# Tumblr API
> Read any public Tumblr blog in real time — no login or key needed. Fetch a blog's info (title, description, total post count), its posts with paging and an optional post-type filter (text, photo, quote, link, chat, audio, video, answer), posts filtered by a tag, and a single post by id. Each post comes in the upstream Tumblr shape with its type-specific fields (photo URLs, video embeds, quote text, etc.), tags and timestamps. Pass blog = the blog name (its subdomain); every call is live (no cache). 5 endpoints. Built for blog content aggregation, social listening and feed back-ends. A Tumblr blog-reading API. No upstream key, no cache.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/tumblr-api/..."
```

## Pricing
- **Free** (Free) — 3,300 calls/Mo, 2 req/s
- **Starter** ($6/Mo) — 65,000 calls/Mo, 8 req/s
- **Pro** ($19/Mo) — 325,000 calls/Mo, 20 req/s
- **Mega** ($46/Mo) — 1,600,000 calls/Mo, 50 req/s

## Endpoints

### Tumblr

#### `GET /v1/blog` — Blog info

**Parameters:**
- `blog` (query, required, string) — Blog name (subdomain) Example: `staff`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tumblr-api/v1/blog?blog=staff"
```

**Response:**
```json
{
    "data": {
        "tumblelog": {
            "name": "staff",
            "uuid": "t:0aY0xL2Fi1OFJg4YxpmegQ",
            "cname": false,
            "feeds": [],
            "title": "Tumblr Staff",
            "timezone": "US/Eastern",
            "description": ""
        },
        "posts_total": 2986
    },
    "meta": {
        "timestamp": "2026-06-02T16:53:22.227Z",
        "request_id": "985bc3ed-d758-4907-8b0e-4391b442bd19"
    },
    "status": "ok",
    "message": "Blog info",
    "success": true
}
```

#### `GET /v1/post` — Single post

**Parameters:**
- `blog` (query, required, string) — Blog name (subdomain) Example: `staff`
- `id` (query, required, string) — Post id

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tumblr-api/v1/post?blog=staff"
```

#### `GET /v1/posts` — Blog posts

**Parameters:**
- `blog` (query, required, string) — Blog name (subdomain) Example: `staff`
- `limit` (query, optional, string) — Page size
- `start` (query, optional, string) — Offset

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tumblr-api/v1/posts?blog=staff"
```

**Response:**
```json
{
    "data": {
        "posts": [
            {
                "id": "813992302192263168",
                "url": "https://staff.tumblr.com/post/813992302192263168",
                "date": "Wed, 15 Apr 2026 16:05:52",
                "slug": "a-note-from-the-tumblr-team",
                "tags": [
                    "tumblr staff"
                ],
                "type": "regular",
                "format": "html",
                "mobile": 0,
                "date-gmt": "2026-04-15 20:05:52 GMT",
                "feed-item": "",
                "tumblelog": {
                    "url": "https://staff.tumblr.com/",
                    "name": "staff",
                    "cname": false,
                    "title": "Tumblr Staff",
                    "timezone": "US/Eastern",
                    "avatar_url_16": "https://64.media.tumblr.com/dbc619ed53b0b1f9da04189686cb10e7/e72ec0c8ebd4ace0-49/s16x16u_c1/7eb3eaf52ab48bab91ac9fc1087622108be8c2c9.png",
                    "avatar_url_24": "https://64.media.tumblr.com/dbc619ed53b0b1f9da04189686cb10e7/e72ec0c8ebd4ace0-49/s24x24u_c1/07a28b62b77b37978ba79d172e36a9a06740f7ed.png",
                    "avatar_url_30": "https://64.media.tumblr.com/dbc619ed53b0b1f9da04189686cb10e7/e72ec0c8ebd4ace0-49/s30x30u_c1/a3eff13737ee1e2f022220de96a807a2851e422d.png",
                    "avatar_url_40": "https://64.media.tumblr.com/dbc619ed53b0b1f9da04189686cb10e7/e72ec0c8ebd4ace0-49/s40x40u_c1/577d40efd017fecc82a0b0ce57ec2cd053749ac2.png",
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/tagged` — Posts by tag

**Parameters:**
- `blog` (query, required, string) — Blog name (subdomain) Example: `staff`
- `tag` (query, required, string) — Tag Example: `art`
- `limit` (query, optional, string) — Page size

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tumblr-api/v1/tagged?blog=staff&tag=art"
```

**Response:**
```json
{
    "data": {
        "posts": [
            {
                "id": "768250886787039233",
                "url": "https://staff.tumblr.com/post/768250886787039233",
                "date": "Tue, 26 Nov 2024 17:45:39",
                "slug": "tumblr-tuesday-huevember",
                "tags": [
                    "tumblr tuesday",
                    "huevember",
                    "huevember 2024",
                    "artists on tumblr",
                    "art",
                    "fanart",
                    "ocs",
                    "art challenges",
                    "final fantasy",
                    "the magnus archives",
                    "dungeon meshi",
                    "totk",
                    "one piece",
                    "the locked tomb",
                    "frieren",
                    "my hero academia",
                    "shiguang dailiren",
                    "gravity falls",
                    "honkai star rail",
                    "the wild robot",
                    "long post"
                ],
                "type": "regular",
                "format": "html",
                "mobile": 0,
                "date-gmt": "2024-11-26 22:45:39 GMT",
                "feed-item": "",
                "tumblelog": {
                    "url": "https://staff.tumblr.com/",
                    "name": "staff",
                    "cname": false,
                    "title": "Tumblr Staff",
                    "timezone": "US/Eastern
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Spec

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tumblr-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "auth": "none upstream; gateway requires x-api-key",
        "name": "Tumblr API",
        "note": "Live, no cache. Pass blog = the blog name (subdomain). Pagination via limit + start; filter by type or tag. Reads public blogs only.",
        "source": "Tumblr public legacy read API ({blog}.tumblr.com/api/read/json)",
        "endpoints": 5
    },
    "meta": {
        "timestamp": "2026-06-02T16:53:23.859Z",
        "request_id": "5e82dbb3-8a08-4525-a492-026ff4b6badb"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```


---
Marketplace page: https://www.oanor.com/api/tumblr-api
OpenAPI spec: https://www.oanor.com/api/tumblr-api/openapi.json
