Welcome to the Tumblr API! There isn't anything we enjoy more than seeing talented designers and engineers using Tumblr to invent whole new forms of creative expression. We've put a tremendous amount of care into making this API functional and flexible enough for any projects you throw at it. Join us in our discussion group to talk about how to use it, what could be better, and all the amazing things you're going to build with it. Follow our Developers Blog for important news and announcements. Please use the API responsibly, and send us your feedback. Enjoy!
If you're looking for documentation for the old API, you can find it here.
Get an OAuth key: register an application
You'll need this to get your API key, even if you don't ever need to use a fully signed OAuth request.
For more details, see Authentication below.
Check out or developer console to test calls, and see live examples of using our official clients: API Console
Before you dive in, review these essentials.
All Tumblr API requests start with api.tumblr.com. The next segment of the URI path depends on the type of request:
api.tumblr.com/v2/blog/{blog-identifier}/...
api.tumblr.com/v2/user/...
See Methods below for complete details.
Each blog has a unique hostname. The hostname can be standard or custom.
.tumblr.com.
Example: greentype.tumblr.com
Example: www.davidslog.com
You'll need the blog hostname anytime you work with a blog. When you see the placeholder {blog-identifier} in the API docs, substitute the standard or custom hostname.
The API returns JSON-encoded objects (content-type: application/json). Responses vary according to the method used, but every response envelope includes these common parts:
| meta |
The meta object matches the HTTP response message:
|
|---|---|
| response | API-specific results |
{
"meta": {
"status": 200,
"msg": "OK"
},
"response": { ... }
}
All requests made with HTTP GET are JSONP-enabled. To use JSONP, append jsonp= or callback= and the name of your callback function to the request.
JSONP requests will always return an HTTP status code of 200 but will reflect the real status code in the meta field of the JSON response.
The docs include some working examples. Please click them to your heart's content, but don't use the embedded API key for your own nefarious purposes. Register your application to get your own API key (your OAuth Consumer Key).
| Notation | Meaning | Example |
|---|---|---|
| Curly brackets { } | Required item | api.tumblr.com/v2/blog/The blog identifier is required. |
| Square brackets [ ] | Optional item | api.tumblr.com/v2/blog/Specifying a post type is optional. |
Here is a list of official API client which will help you get up and running with your favorite language in no time. If you find that we've missed your favorite language, tell us!
The API uses three different levels of authentication, depending on the method.
api_key.
api_key=PyezS3Q4Smivb24d9SzZGYSuh--IaMfAkEEach method description includes a note about the authentication level.
The API supports the OAuth 1.0a Protocol, accepting parameters via the Authorization header, with the HMAC-SHA1 signature method only. There's probably already an OAuth client library for your platform.
| Request-token URL | https://www.tumblr.com/oauth/request_token |
|---|---|
| Authorize URL | https://www.tumblr.com/oauth/authorize |
| Access-token URL | https://www.tumblr.com/oauth/access_token |
This method returns general information about the blog, such as the title, number of posts, and other high-level data.
https://api.tumblr.com/v2/blog/scipsy.tumblr.com/infohttps://api.tumblr.com/v2/blog/good.tumblr.com/info| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/blog/{blog-identifier}/info?api_key={key} | GET | API key |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| blog-identifier | String |
Any blog identifier
See the Overview for more details. | N/A | Yes |
| api_key | String |
Your OAuth Consumer Key
See Authentication for more details. | N/A | Yes |
| Response Field | Type | Description | Notes |
|---|---|---|---|
| title | String | The display title of the blog | Compare name |
| posts | Number | The total number of posts to this blog | |
| name | String | The short blog name that appears before tumblr.com in a standard blog hostname | Compare title |
| updated | Number | The time of the most recent post, in seconds since the epoch | |
| description | String | You guessed it! The blog's description | |
| ask | Boolean | Indicates whether the blog allows questions | |
| ask_anon | Boolean | Indicates whether the blog allows anonymous questions | Returned only if ask is true |
| likes | Number | Number of likes for this user | Returned only if this is the user's primary blog and sharing of likes is enabled |
| is_blocked_from_primary | Boolean | Indicates whether this blog has been blocked by the calling user's primary blog | Returned only if there is an authenticated user making this call |
{
"meta": {
"status": 200,
"msg": "OK"
},
"response": {
"blog": {
"title": "David's Log",
"posts": 3456,
"name": "david",
"url": "http:\/\/david.tumblr.com\/",
"updated": 1308953007,
"description": "<p><strong>Mr. Karp<\/strong> is tall and skinny, with
unflinching blue eyes a mop of brown hair.\r\n
He speaks incredibly fast and in complete paragraphs.</p>",
"ask": true,
"ask_anon": false,
"likes": 12345
}
}
}You can get a blog's avatar in 9 different sizes. The default size is 64x64.
https://api.tumblr.com/v2/blog/david.tumblr.com/avatar/512https://api.tumblr.com/v2/blog/david.tumblr.com/avatar| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/blog/{blog-identifier}/avatar[/size] | GET | None |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| blog-identifier | String |
Any blog identifier
See the Overview for more details. | N/A | Yes |
| size | Number |
The size of the avatar (square, one value for both length and width).
Must be one of the values:16, 24, 30, 40, 48, 64, 96, 128, 512 | 64 | No |
| Response Field | Type | Description | Notes |
|---|---|---|---|
| avatar_url | String | The URL of the avatar image. This is also returned in the Location HTTP header field (see note). | An HTTP Location header field is returned — the response points to the avatar image. That means you can embed this method in an img tag in HTML. |
This method can be used to retrieve the publicly exposed likes from a blog.
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/blog/{blog-identifier}/likes?api_key={key} | GET | API Key |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| limit | Number | The number of results to return: 1–20, inclusive | 20 | No |
| offset | Number | Liked post number to start at | 0 (first post) | No |
| before | Integer | Retrieve posts liked before the specified timestamp | None | No |
| after | Integer | Retrieve posts liked after the specified timestamp | None | No |
| Response Field | Type | Description |
|---|---|---|
| liked_posts | Array | An array of post objects (posts liked by the user) |
| liked_count | Number | Total number of liked posts |
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/blog/{blog-identifier}/followers | GET | OAuth |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| blog-identifier | String |
Any blog identifier
See the Overview for more details. | N/A | Yes |
| limit | Number | The number of results to return: 1–20, inclusive | 20 | No |
| offset | Number | Result to start at | 0 (first follower) | No |
These fields are wrapped in a users object:
| Response Field | Type | Description |
|---|---|---|
| total_users | Number | The number of users currently following the blog |
| users | Array | Each item is a follower, containing these fields: |
| name | String | The user's name on tumblr |
| following | Boolean | Whether the caller is following the user |
| url | String | The URL of the user's primary blog |
| updated | Number | The time of the user's most recent post, in seconds since the epoch |
{
"meta": {
"status": 200,
"msg": "OK"
},
"response": {
"total_users": 2684,
"users": [
{
"name": "david",
"following": true,
"url": "http:\/\/www.davidslog.com",
"updated": 1308781073
},
{
"name": "ben",
"following": true,
"url": "http:\/\/bengold.tv",
"updated": 1308841333
},
...
]
}
}https://api.tumblr.com/v2/blog/peacecorps.tumblr.com/posts/text?notes_info=truehttps://api.tumblr.com/v2/blog/pitchersandpoets.tumblr.com/posts/photo?tag=new+york+yankees| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/blog/{blog-identifier}/posts[/type]?api_key={key}&[optional-params=] | GET | API key |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| blog-identifier | String |
Any blog identifier
See the Overview for more details. | N/A | Yes |
| api_key | String |
Your OAuth Consumer Key
See Authentication for more details. | N/A | Yes |
| type | String |
The type of post to return. Specify one of the following:
text, quote, link, answer, video, audio, photo, chat | None – return all types | No |
| id | Number | A specific post ID. Returns the single post specified or (if not found) a 404 error. | None | No |
| tag | String | Limits the response to posts with the specified tag | None | No |
| limit | Number | The number of posts to return: 1–20, inclusive | 20 | No |
| offset | Number | Post number to start at | 0 (first post) | No |
| reblog_info | Boolean |
Indicates whether to return reblog information
(specify true or false).
Returns the various reblogged_ fields.
| False | No |
| notes_info | Boolean |
Indicates whether to return notes information
(specify true or false).
Returns note count and note metadata.
| False | No |
| filter | String |
Specifies the post format to return, other than HTML:
| None (HTML) | No |
reblog_info and notes_info are false by default
because of the server impact involved in retrieving the data.
Each response includes a blog object that is the equivalent of an /info response. Posts are returned as an array attached to the posts field.
| Response Field | Type | Description | Notes |
|---|---|---|---|
| blog_name | String | The short name used to uniquely identify a blog | |
| id | Number | The post's unique ID | |
| post_url | String | The location of the post | |
| type | String | The type of post | See the type request parameter |
| timestamp | Number | The time of the post, in seconds since the epoch | |
| date | String | The GMT date and time of the post, as a string | |
| format | String | The post format: html or markdown | |
| reblog_key | String | The key used to reblog this post | See the /post/reblog method |
| tags | Array (string) | Tags applied to the post | |
| bookmarklet | Boolean | Indicates whether the post was created via the Tumblr bookmarklet | Exists only if true |
| mobile | Boolean | Indicates whether the post was created via mobile/email publishing | Exists only if true |
| source_url | String | The URL for the source of the content (for quotes, reblogs, etc.) | Exists only if there's a content source |
| source_title | String | The title of the source site | Exists only if there's a content source |
| liked | Boolean | Indicates if a user has already liked a post or not | Exists only if the request is fully authenticated with OAuth. |
| state | String | Indicates the current state of the post | States are published, queued, draft and private |
| total_posts | Number | The total number of post available for this request, useful for paginating through results |
| Response Field | Type | Description |
|---|---|---|
| title | String | The optional title of the post |
| body | String | The full post body |
{
"meta": {
"status": 200,
"msg": "OK"
},
"response": {
"blog": { ... },
"posts": [
{
"blog_name": "citriccomics",
"id": 3507845453,
"post_url": "http:\/\/citriccomics.tumblr.com\/post\/3507845453",
"type": "text",
"date": "2011-02-25 20:27:00 GMT",
"timestamp": 1298665620,
"state": "published",
"format": "html",
"reblog_key": "b0baQtsl",
"tags": [
"tumblrize",
"milky dog",
"mini comic"
],
"note_count": 14,
"title": "Milky Dog",
"body": "<p><img src=\"http:\/\/media.tumblr.com\
/tumblr_lh6x8d7LBB1qa6gy3.jpg\"\/><a href=\"http:\/\
/citriccomics.com\/blog\/?p=487\" target=\"_blank\">TO READ
THE REST CLICK HERE<\/a><br\/>\n\nMilky Dog was inspired by
something <a href=\"http:\/\/gunadie.com\/naomi\"
target=\"_blank\">Naomi Gee<\/a> wrote on twitter, I really
liked the hash tag <a href=\"http:\/\/twitter.com\/
search?q=%23MILKYDOG\" target=\"_blank\">#milkydog<\/a>
and quickly came up with a little comic about it. You can
(and should) follow Naomi on twitter <a href=\"http:\/\
/twitter.com\/ngun\" target=\"_blank\">@ngun<\/a> I'm on
twitter as well <a href=\"http:\/\/twitter.com\
/weflewairplanes\"target=\"_blank\">@weflewairplanes<\/a>
<\/p>\n\nAlso, if you’re a Reddit user (or even if
you're not) I submitted this there, if you could up vote
it I'd be super grateful just <a href=\"http:\/\
/tinyurl.com\/5wj3tqz\" target=\"_blank\">CLICK HERE<\/a>"
},
...
],
"total_posts": 3
}
}| Response Field | Type | Description |
|---|---|---|
| photos | Array |
Photo objects with properties:
|
| caption | String | The user-supplied caption |
| width | Number | The width of the photo or photoset |
| height | Number | The height of the photo or photoset |
Multi-photo Photo posts, called Photosets, will send return multiple photo objects in the photos array.
{
"meta": {
"status": 200,
"msg": "OK"
},
"response": {
"blog": { ... },
"posts": [
{
"blog_name": "derekg",
"id": 7431599279,
"post_url": "http:\/\/derekg.org\/post\/7431599279",
"type": "photo",
"date": "2011-07-09 22:09:47 GMT",
"timestamp": 1310249387,
"format": "html",
"reblog_key": "749amggU",
"tags": [],
"note_count": 18,
"caption": "<p>my arm is getting tired.<\/p>",
"photos": [
{
"caption": "",
"alt_sizes": [
{
"width": 1280,
"height": 722,
"url": "http:\/\/derekg.org\/photo\/1280\/7431599279\/1\/
tumblr_lo36wbWqqq1qanqww"
},
{
"width": 500,
"height": 282,
"url": "http:\/\/30.media.tumblr.com\/
tumblr_lo36wbWqqq1qanqwwo1_500.jpg"
},
{
"width": 400,
"height": 225,
"url": "http:\/\/29.media.tumblr.com\/
tumblr_lo36wbWqqq1qanqwwo1_400.jpg"
},
{
"width": 250,
"height": 141,
"url": "http:\/\/26.media.tumblr.com\/
tumblr_lo36wbWqqq1qanqwwo1_250.jpg"
},
{
"width": 100,
"height": 56,
"url": "http:\/\/24.media.tumblr.com\/
tumblr_lo36wbWqqq1qanqwwo1_100.jpg"
},
{
"width": 75,
"height": 75,
"url": "http:\/\/30.media.tumblr.com\/
tumblr_lo36wbWqqq1qanqwwo1_75sq.jpg"
}
]
}
]
}
],
"total_posts": 1
}
}| Response Field | Type | Description | Notes |
|---|---|---|---|
| text | String | The text of the quote (can be modified by the user when posting) | |
| source | String |
Full HTML for the source of the quote
Example: <a href="...">Steve Jobs</a> | See also the table of common response fields |
{
"meta": {
"status": 200,
"msg": "OK"
},
"response": {
"blog": { ... },
"posts": [
{
"blog_name": "museumsandstuff",
"id": 4742980381,
"post_url": "http:\/\/museumsandstuff.tumblr.com\/post\/4742980381",
"type": "quote",
"date": "2011-04-19 08:52:34 GMT",
"timestamp": 1303203154,
"format": "html",
"reblog_key": "KLA85e6c",
"tags": [],
"note_count": 23,
"source_url": "http:\/\/museumtwo.blogspot.com\/2011\/04\/
guest-post-convivial-museum-photo-essay.html",
"source_title": "museumtwo.blogspot.com",
"text": "Why do visitors still report discomfort, confusion,
elitism, exclusion?",
"source": "<a href=\"http:\/\/museumtwo.blogspot.com\/2011\/04\/
guest-post-convivial-museum-photo-essay.html\"
target=\"_blank\">Museum 2.0: Guest Post: The Convivial
Museum Photo Essay<\/a> (via <a href=\"http:\/\/
www.joshrobinson.org\/\"target=\"_blank\">joshrobinsonblog
<\/a>)"
},
...
],
"total_posts": 9
}
}| Response Field | Type | Description |
|---|---|---|
| title | String | The title of the page the link points to |
| url | String | The link |
| author | String | The author of the article the link points to |
| excerpt | String | An excerpt from the article the link points to |
| publisher | String | The publisher of the article the link points to |
| photos | Array |
Photo objects with properties:
|
| description | String | A user-supplied description |
{
"meta": {
"status": 200,
"msg": "OK"
},
"response": {
"blog": { ... },
"posts": [
{
"blog_name": "travellingcameraclub",
"id": 688472164,
"post_url": "http:\/\/travellingcameraclub.com\/post\/688472164",
"type": "link",
"date": "2010-06-11 23:17:08 GMT",
"timestamp": 1276298228,
"format": "html",
"reblog_key": "RWhJJWia",
"tags": [],
"note_count": 9,
"title": "Esther Aarts Illustration | News and Blog: Faq: How do
you make those marker doodles?",
"url": "http:\/\/blog.estadiezijn.nl\/post\/
459075181\/faq-how-do-you-make-those-marker-doodles",
"author": "Ester Aarts",
"excerpt": "How I make marker doodles",
"publisher": "blog.estadiezijn.nl",
"photos": [
{
"caption": "",
"original_size":
{
"width": 500,
"height": 500,
"url": "http:\/\/40.media.tumblr.com
\/1393850e5c331da2e3c9fb478a30310d
\/tumblr_inline_nm3lwntw8k1rplry2_500.jpg"
},
"alt_sizes": []
}
],
"description": "<blockquote>\n<p>On my Ipad, of course!<\/p>
<p>Nothing better than the latest technology to get the job done.
Look at all my apps!<\/p> <p><img height=\"555\" width=\"500\"
src=\"http:\/\/farm5.static.flickr.com\/4006\/
4445161463_31da0327c2_o.jpg\" alt=\"my iPad\"\/><\/p>
<p>My favourite markers are an Edding 400, a Sharpie and a
Copic Ciao. The white gouache is from Dr Martins and does a
decent job covering up whatever needs to be covered up, and
flows.<\/p><\/blockquote>"
}
...
],
"total_posts": 7
}
}| Response Field | Type | Description |
|---|---|---|
| title | String | The optional title of the post |
| body | String | The full chat body |
| dialogue | Array |
Array of objects with the following properties:
|
{
"meta": {
"status": 200,
"msg": "OK"
},
"response": {
"blog": { ... },
"posts": [
{
"blog_name": "david",
"id": 5845345725,
"post_url": "http:\/\/www.davidslog.com\/5845345725\/
if-youre-okay-with-it-destroying-tumblr,
"type": "chat",
"date": "2011-05-25 22:32:00 GMT",
"timestamp": 1306362720,
"format": "html",
"reblog_key": "wlxAsElf",
"tags": [],
"note_count": 114,
"title": null,
"body": "David: http://staff.tumblr.com/post/5845153911
[draft] Topherchris: are you freaking serious\r\n
David: If you're okay with it - I'd love to :)\r\n
Topherchris: i'm okay with it, if you're okay with
it destroying tumblr",
"dialogue": [
{
"label": "David:",
"name": "David",
"phrase": "http://staff.tumblr.com/post/5845153911 [draft]\r",
},
{
"label": "Topherchris:",
"name": "Topherchris",
"phrase":"are you freaking serious\r"
},
{
"label": "David:",
"name": "David",
"phrase": "If you're okay with it - I'd love to :)"
},
{
"label": "Topherchris:",
"name": "Topherchris",
"phrase": "i'm okay with it, if you're okay with it
destroying tumblr",
}
]
}
...
],
"total_posts": 7
}
}| Response Field | Type | Description |
|---|---|---|
| caption | String | The user-supplied caption |
| player | String | HTML for embedding the audio player |
| plays | Number | Number of times the audio post has been played |
| album_art | String | Location of the audio file's ID3 album art image |
| artist | String | The audio file's ID3 artist value |
| album | String | The audio file's ID3 album value |
| track_name | String | The audio file's ID3 title value |
| track_number | Number | The audio file's ID3 track value |
| year | Number | The audio file's ID3 year value |
{
"meta": {
"status": 200,
"msg": "OK"
},
"response": {
"blog": { ... },
"posts": [
{
"blog_name": "derekg",
"id": 5578378101,
"post_url": "http:\/\/derekg.org\/post\/5578378101/otis-redding",
"type": "audio",
"date": "2011-05-17 16:21:05 GMT",
"timestamp": 1305649265,
"format": "html",
"reblog_key": "Wa65rR5l",
"tags": [],
"note_count": 3,
"source_url": "http:\/\/soundcloud.com\/mariam-cabal\/otis-redding",
"source_title": "SoundCloud \/ Mariam Caballero",
"id3_title": "Otis Redding - Cigarettes And Coffee",
"caption": "<p>Otis Redding never fails me.\u00a0<\/p>",
"player": "<embed type=\"application\/x-shockwave-flash\"
src=\"http:\/\/assets.tumblr.com\/swf\/audio_player.swf?
audio_file=http:\/\/www.tumblr.com\/audio_file\/5578378101\/
tumblr_llclf5oDKZ1qanqww&color=FFFFFF&logo=soundcloud\"
height=\"27\" width=\"207\" quality=\"best\"><\/embed>",
"plays": 1576
}
],
"total_posts": 1
}
}| Response Field | Type | Description | Notes |
|---|---|---|---|
| caption | String | The user-supplied caption | |
| player | Array of embed objects |
Object fields within the array:
| Values vary by video source |
{
"meta": {
"status": 200,
"msg": "OK"
},
"response": {
"blog": { ... },
"posts": [
{
"blog_name": "john",
"id": 6522991678,
"post_url": "http:\/\/john.io\/post\/6522991678",
"type": "video",
"date": "2011-06-14 15:51:21 GMT",
"timestamp": 1308066681,
"format": "html",
"reblog_key": "sWRdVJrI",
"tags": [],
"note_count": 17,
"source_url": "http:\/\/www.WatchMojo.com",
"source_title": "WatchMojo.com",
"caption": "<p><a href=\"http:\/\/foreverneilyoung.tumblr.com\/
post\/6522738445\" target=\"_blank\">foreverneilyoung<\/a>:
<\/p>\n<blockquote>\n<p><a href=\"http:\/\/watchmojo.tumblr.com\/
post\/6521201320\" target=\"_blank\">watchmojo<\/a>:<\/p>\n
<blockquote>\n<p>Neil Young\u2019s live album \u201cA Treasure\
u201d is available today. To celebrate, we take a look at the
life and career of the Canadian singer-songwriter.
<\/p>\n<\/blockquote>\n<p>Neil 101 for you new fans out
there.<\/p>\n<\/blockquote>\n<p><strong>If you don't
know\/appreciate Neil Young's impressive body of work,
this will help<\/strong><\/p>",
"player": [
{
"width": 250,
"embed_code": "<object width=\"248\" height=\"169\"><param
name=\"movie\" value=\"http:\/\/www.youtube.com\/
v\/4Q1aI7xPo0Y&rel=0&egm=0&
showinfo=0&fs=1\"><\/param><param name=\"wmode\"
value=\"transparent\"><\/param><param name=\"
allowFullScreen\" value=\"true\"><\/param><embed
src=\"http:\/\/www.youtube.com\/v\/
4Q1aI7xPo0Y&rel=0&egm=0&showinfo=
0&fs=1\" type=\"application\/x-shockwave-flash\"
width=\"248\" height=\"169\" allowFullScreen=\"true\"
wmode=\"transparent\"><\/embed><\/object>"
},
{
"width": 400,
"embed_code": "<object width=\"400\" height=\"251\">
<param name=\"movie\" value=\"http:\/\/www.youtube.com\/
v\/4Q1aI7xPo0Y&rel=0&egm=0&showinfo=0&fs=1\"><\/
param><param name=\"wmode\" value=\"transparent
\"><\/param><param name=\"allowFullScreen\" value=
\"true\"><\/param><embed src=\"http:\/\/www.youtube.com
\/v\/4Q1aI7xPo0Y&rel=0&egm=0&
showinfo=0&fs=1\" type=\"application\/
x-shockwave-flash\" width=\"400\" height=\"251\"
allowFullScreen=\"true\" wmode=\"transparent\">
<\/embed><\/object>"
},
{
"width": 500,
"embed_code": "<object width=\"500\" height=\"305\"><param
name=\"movie\" value=\"http:\/\/www.youtube.com\/
v\/4Q1aI7xPo0Y&rel=0&egm=0&
showinfo=0&fs=1\"><\/param><param name=\"wmode\"
value=\"transparent\"><\/param><param name=\"
allowFullScreen\" value=\"true\"><\/param><embed
src=\"http:\/\/www.youtube.com\/v\/4Q1aI7xPo0Y&
rel=0&egm=0&showinfo=0&fs=1\"
type=\"application\/x-shockwave-flash\" width=\"500\"
height=\"305\" allowFullScreen=\"true\"
wmode=\"transparent\"><\/embed><\/object>"
}
]
},
...
],
"total_posts": 48
}
}| Response Field | Type | Description |
|---|---|---|
| asking_name | String | The blog name of the user asking the question |
| asking_url | String | The blog URL of the user asking the question |
| question | String | The question being asked |
| answer | String | The answer given |
{
"meta": {
"status": 200,
"msg": "OK"
},
"response": {
"blog": { ... },
"posts": [
{
"blog_name": "david",
"id": 7504154594,
"post_url": "http://www.davidslog.com/7504154594",
"type": "answer",
"date": "2011-07-11 20:24:14 GMT",
"timestamp": 1310415854,
"format": "html",
"reblog_key": "HNvqLd5G",
"tags": [],
"asking_name": "aperfectfacade",
"asking_url": "http://aperfectfacade.tumblr.com/",
"question": "I thought Tumblr started in 2007, yet you
have posts from 2006?",
"answer": "<p>Good catch! Tumblr <strong>launched</strong> in
February 2007. We were testing it for a few months before
then.</p>\n<p><strong>Tumblr Trivia:</strong> Before Tumblr,
my blog (davidslog.com) was a manually edited, single page,
HTML tumblelog.</p>"
}
],
"total_posts": 1
}
}| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/blog/{blog-identifier}/posts/queue | GET | OAuth |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| offset | String | Post number to start at | 0 (first post) | No |
| limit | Number | The number of results to return: 1–20, inclusive | 20 | No |
| filter | String |
Specifies the post format to return, other than HTML:
| None (HTML) | No |
See the table of common response fields.
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/blog/{blog-identifier}/posts/draft | GET | OAuth |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| before_id | Number |
Return posts that have appeared after this ID
Use this parameter to page through the results:
first get a set of posts, and then get posts since
the last ID of the previous set.
| 0 | No |
| filter | String |
Specifies the post format to return, other than HTML:
| None (HTML) | No |
See the table of common response fields.
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/blog/{blog-identifier}/posts/submission | GET | OAuth |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| offset | String | Post number to start at | 0 (first post) | No |
| filter | String |
Specifies the post format to return, other than HTML:
| None (HTML) | No |
See the table of common response fields.
| Response Field | Type | Description |
|---|---|---|
| id | Number | The ID of the submitted post |
| post_url | String | The location of the post |
| slug | String | Short text summary to the end of the post URL |
| type | String | The type of post. One of the following: text, photo, quote, link, video |
| date | String | The GMT date and time of the post |
| timestamp | Number | The time of the post, in seconds since the epoch |
| state | String | Indicates the current state of the post (submission) |
| format | String | Format type of post. |
| reblog_key | String | The reblog key for the post |
| tags | Array | Tags applied to the post |
| short_url | String | Short url for the post |
| post_author | String | Author of post, only available when submission is not anonymous |
| is_submission | Boolean | Indicates post is a submission (true) |
| anonymous_name | String | Name on an anonymous submission |
| anonymous_email | String | Email on an anonymous submission |
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/blog/{blog-identifier}/post | POST | OAuth |
These parameters are used for /post, /post/edit and /post/reblog methods.
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| type | String |
The type of post to create. Specify one of the following:
text, photo, quote, link, chat, audio, video | text | Yes |
| state | String |
The state of the post. Specify one of the following:
published, draft, queue, private | published | No |
| tags | String | Comma-separated tags for this post | None | No |
| tweet | String | Manages the autotweet (if enabled) for this post: set to off for no tweet, or enter text to override the default tweet | None | No |
| date | String | The GMT date and time of the post, as a string | The date and time of the POST request | No |
| format | String | Sets the format type of post. Supported formats are: html & markdown | html | No |
| slug | String | Add a short text summary to the end of the post URL | Dynamically generated if enabled on the blog | No |
| native_inline_images | Boolean | Convert any external image URLs to Tumblr image URLs | false | No |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| title | String | The optional title of the post, HTML entities must be escaped | None | No |
| body | String | The full post body, HTML allowed | None | Yes |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| caption | String | The user-supplied caption, HTML allowed | None | No |
| link | String | The "click-through URL" for the photo | None | No |
| source | String | The photo source URL | None | Yes, either source or data or data64 |
| data |
Array (URL-encoded binary contents) Limit: 10 MB | One or more image files (submit multiple times to create a slide show) | None | Yes, either source or data or data64 |
| data64 |
String Limit: 10 MB | The contents of an image file encoded using base64 | None | Yes, either source or data or data64 |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| quote | String | The full text of the quote, HTML entities must be escpaed | None | Yes |
| source | String | Cited source, HTML allowed | None | No |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| title | String | The title of the page the link points to, HTML entities should be escaped | None | No |
| url | String | The link | None | Yes |
| description | String | A user-supplied description, HTML allowed | None | No |
| thumbnail | String | The url of an image to use as a thumbnail for the post | None | No |
| excerpt | String | An excerpt from the page the link points to, HTML entities should be escaped | None | No |
| author | String | The name of the author from the page the link points to, HTML entities should be escaped | None | No |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| title | String | The title of the chat | None | No |
| conversation | String | The text of the conversation/chat, with dialogue labels (no HTML) | None | Yes |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| caption | String | The user-supplied caption | None | No |
| external_url | String | The URL of the site that hosts the audio file (not tumblr) | None | Yes, either external_url or data |
| data |
String (URL-encoded binary contents) Limit: 10 MB | An audio file | None | Yes, either external_url or data |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| caption | String | The user-supplied caption | None | No |
| embed | String | HTML embed code for the video or a URI to the video. If you provide an unsupported service's URI you may receive a 400 response. | None | Yes, either a URI, embed, or data. |
| data |
String (URL-encoded binary contents) Limit: 100 MB | A video file | None | Yes, either embed or data |
Returns 201: Created or an error code.
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/blog/{blog-identifier}/post/edit | POST | OAuth |
This parameter is in addition to the common parameters listed under /post.
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| id | Number | The ID of the post to edit | None | Yes |
Returns 200: OK (successfully edited) or an error code.
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/blog/{blog-identifier}/post/reblog | POST | OAuth |
These parameters are in addition to the common parameters listed under /post.
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| id | Number | The ID of the reblogged post on tumblelog | None | Yes |
| reblog_key | Number | The reblog key for the reblogged post – get the reblog key with a /posts request | None | Yes |
| comment | String | A comment added to the reblogged post | None | No |
| native_inline_images | Boolean | Convert external image URLs in the comment to Tumblr image URLs | false | No |
Returns 201: Created or an error code.
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/blog/{blog-identifier}/post/delete | POST | OAuth |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| id | Number | The ID of the post to delete | None | Yes |
Returns 200: OK (successfully deleted) or an error code.
Use this method to retrieve the user's account information that matches the OAuth credentials submitted with the request.
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/user/info | GET | OAuth |
| Response Field | Type | Description |
|---|---|---|
| following | Number | The number of blogs the user is following |
| default_post_format | String | The default posting format - html, markdown or raw |
| name | String | The user's tumblr short name |
| likes | Number | The total count of the user's likes |
| blogs | Array |
Each item is a blog the user has permissions to post to, containing these fields:
|
{
"meta": {
"status": 200,
"msg": "OK"
},
"response": {
"user": {
"following": 263,
"default_post_format": "html",
"name": "derekg",
"likes": 606,
"blogs": [
{
"name": "derekg",
"title": "Derek Gottfrid",
"url": "http://derekg.org/",
"tweet": "auto",
"primary": true,
"followers": 33004929,
},
{
"name": "ihatehipstrz",
"title": "I Hate Hipstrz",
...
}
]
}
}Use this method to retrieve the dashboard that matches the OAuth credentials submitted with the request.
Note: Please don't re-implement the Dashboard, and don't recreate complete Tumblr functions or clients on a platform where Tumblr already has an official client. See our API policies here.
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/user/dashboard | GET | OAuth |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| limit | Number | The number of results to return: 1–20, inclusive | 20 | No |
| offset | Number | Post number to start at | 0 (first post) | No |
| type | String |
The type of post to return. Specify one of the following:
text, photo, quote, link, chat, audio, video, answer | None – return all types | No |
| since_id | Number |
Return posts that have appeared after this ID
Use this parameter to page through the results:
first get a set of posts, and then get posts since
the last ID of the previous set.
| 0 | No |
| reblog_info | Boolean |
Indicates whether to return reblog information
(specify true or false).
Returns the various reblogged_ fields.
| False | No |
| notes_info | Boolean |
Indicates whether to return notes information
(specify true or false).
Returns note count and note metadata.
| False | No |
Dashboard responses include the fields returned in /posts responses (with all the various type-specific fields), but without the blog object. Instead, a blog_name field identifies the blog for each post returned.
{
"meta": {
"status": 200,
"msg": "OK"
},
"response": {
"posts": [
{
"blog_name": "laughingsquid",
"id": 6828225215,
"post_url": "http:\/\/links.laughingsquid.com\/post\/6828225215",
...
}
]
}
}Use this method to retrieve the liked posts that match the OAuth credentials submitted with the request.
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/user/likes | GET | OAuth |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| limit | Number | The number of results to return: 1–20, inclusive | 20 | No |
| offset | Number | Liked post number to start at | 0 (first post) | No |
| before | Integer | Retrieve posts liked before the specified timestamp | None | No |
| after | Integer | Retrieve posts liked after the specified timestamp | None | No |
| Response Field | Type | Description |
|---|---|---|
| liked_posts | Array | An array of post objects (posts liked by the user) |
| liked_count | Number | Total number of liked posts |
Use this method to retrieve the blogs followed by the user whose OAuth credentials are submitted with the request.
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/user/following | GET | OAuth |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| limit | Number | The number of results to return: 1–20, inclusive | 20 | No |
| offset | Number | Result number to start at | 0 (first followee) | No |
These fields are wrapped in a blog object:
| Response Field | Type | Description |
|---|---|---|
| total_blogs | Number | The number of blogs the user is following |
| blogs | Array |
Each item is a blog that's being followed, containing these fields:
|
{
"meta": {
"status": 200,
"msg": "OK"
},
"response": {
"total_blogs": 259,
"blogs": [
{
"name": "david",
"url": "http:\/\/www.davidslog.com",
"updated": 1308781073,
"title": "David’s Log",
"description": "“Mr. Karp is tall and skinny, with unflinching blue eyes and a mop of brown hair. He speaks incredibly fast and in complete paragraphs.” – NY Observer"
},
{
"name": "matthew",
"url": "http:\/\/matthew.tumblr.com",
"updated": 1306436424,
"title": "Matt Hackett",
"description": " I obsess over the engineering and dissemination of technology for creative people.
\nI'm happily torn between work on the visible (marketing) and the invisible (architecture, management) components of media-product-making machinery.\n
\nMost recently, I saw as Tumblr's team grew from 10 to 110 and monthly audience from 25 million to 150 million from my vantage point as VP Engineering and later Head of Brand Strategy.
\nMore about Matt Hackett"
},
...
]
}
}| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/user/follow | POST | OAuth |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| url | String | The URL of the blog to follow | None | Yes |
Returns 200: OK (blog successfully followed) or a 404 (blog was not found)
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/user/unfollow | POST | OAuth |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| url | String | The URL of the blog to unfollow | None | Yes |
Returns 200: OK (blog successfully unfollowed) or a 404 (blog was not found)
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/user/like | POST | OAuth |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| id | Number | The ID of the post to like | None | Yes |
| reblog_key | String | The reblog key for the post id | None | Yes |
Returns 200: OK (post successfully liked ) or a 404 (post id or reblog_key was not found)
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/user/unlike | POST | OAuth |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| id | Number | The ID of the post to unlike | None | Yes |
| reblog_key | String | The reblog key for the post id | None | Yes |
Returns 200: OK (post successfully unliked ) or a 404 (post id or reblog_key was not found)
| URI | HTTP Method | Authentication |
|---|---|---|
api.tumblr.com/v2/tagged | GET | API Key or OAuth |
| Parameter | Type | Description | Default | Required? |
|---|---|---|---|---|
| tag | String | The tag on the posts you'd like to retrieve | None | Yes |
| before | Integer | The timestamp of when you'd like to see posts before. If the Tag is a "featured" tag, use the "featured_timestamp" on the post object for pagination. | Current timestamp | No |
| limit | Number | The number of results to return: 1–20, inclusive | 20 | No |
| filter | String |
Specifies the post format to return, other than HTML:
| None (HTML) | No |
See the table of common response fields.