# Bluesky API
> Read Bluesky (the AT Protocol social network) in real time — no login, no app password needed. Look up any profile by handle or DID (followers, follows, post and list counts, bio, avatar), batch-fetch up to 25 profiles at once, and pull a user's feed in three flavours: posts only, posts with replies, or media-only. Get a post's full thread, fetch posts by AT-URI in bulk, and see exactly who liked, reposted or quote-posted any post. Full-text search posts, find and autocomplete users, and pull posts for any hashtag. Explore the network's discovery surface: a user's created lists, custom feeds and starter packs, any custom feed or list by URI with its members, the most popular feed generators, suggested accounts and the current trending topics. Resolve a handle to its DID. Every call is live (no cache), paginated with a cursor, and returns the upstream AT Protocol shape unchanged. 27 endpoints — broader coverage than the typical Bluesky wrapper. Built for social listening, audience and follower analysis, content and feed aggregation, and bot/automation back-ends. 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/bluesky-api/..."
```

## Pricing
- **Free** (Free) — 2,400 calls/Mo, 2 req/s
- **Starter** ($9/Mo) — 52,000 calls/Mo, 8 req/s
- **Pro** ($28/Mo) — 260,000 calls/Mo, 20 req/s
- **Mega** ($69/Mo) — 1,300,000 calls/Mo, 50 req/s

## Endpoints

### Profiles

#### `GET /v1/profile` — Profile by handle or DID

**Parameters:**
- `actor` (query, required, string) — Handle or DID Example: `bsky.app`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bluesky-api/v1/profile?actor=bsky.app"
```

**Response:**
```json
{
    "data": {
        "did": "did:plc:z72i7hdynmk6r22z27h6tvur",
        "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",
        "banner": "https://cdn.bsky.app/img/banner/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreichzyovokfzmymz36p5jibbjrhsur6n7hjnzxrpbt5jaydp2szvna",
        "handle": "bsky.app",
        "labels": [],
        "createdAt": "2023-04-12T04:53:57.057Z",
        "indexedAt": "2025-10-27T21:05:26.152Z",
        "associated": {
            "chat": {
                "allowIncoming": "none"
            },
            "lists": 12,
            "labeler": false,
            "feedgens": 7,
            "starterPacks": 9,
            "activitySubscription": {
                "allowSubscriptions": "followers"
            }
        },
        "pinnedPost": {
            "cid": "bafyreicnt42y6vo6pfpvyro234ac4o6ijug6adwwrh7awflgrqlt4zibxq",
            "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l"
        },
        "postsCount": 756,
        "description": "official Bluesky account (check username👆)\n\nBugs, feature requests, feedback: support@bsky.app",
        "displayName": "Bluesky",
        "followsCount": 5,
        "verification": {
            "verifications": [],
            "verifiedStatus": "none",
            "trustedVerifierStatus": "valid"
        },
        "followersCount": 33520628
    },
    "meta": {
        "timestamp":
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/profile/feeds` — Custom feeds created by the user

**Parameters:**
- `actor` (query, required, string) — Handle or DID Example: `bsky.app`
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bluesky-api/v1/profile/feeds?actor=bsky.app"
```

**Response:**
```json
{
    "data": {
        "feeds": [
            {
                "cid": "bafyreigreonzn577vy6i4qh2so7aqfjztqrrj4jpssg2jczc27p6x4y6wi",
                "did": "did:web:discover.bsky.app",
                "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/with-friends",
                "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreieppnjpayqgjbyqnbeqzwj3pzqtiwbe5a4m6whzqnp3k7gpqs2gai",
                "labels": [],
                "creator": {
                    "did": "did:plc:z72i7hdynmk6r22z27h6tvur",
                    "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",
                    "handle": "bsky.app",
                    "labels": [],
                    "createdAt": "2023-04-12T04:53:57.057Z",
                    "indexedAt": "2025-10-27T21:05:26.152Z",
                    "associated": {
                        "chat": {
                            "allowIncoming": "none"
                        },
                        "activitySubscription": {
                            "allowSubscriptions": "followers"
                        }
                    },
                    "description": "official Bluesky account (check username👆)\n\nBugs, feature requests, feedback: support@bsky.app",
                    "displayName": "Bluesky",
                    "verification": {
                        "verificatio
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/profile/followers` — Followers

**Parameters:**
- `actor` (query, required, string) — Handle or DID Example: `bsky.app`
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bluesky-api/v1/profile/followers?actor=bsky.app"
```

**Response:**
```json
{
    "data": {
        "cursor": "3mnc6mmjhht2q",
        "subject": {
            "did": "did:plc:z72i7hdynmk6r22z27h6tvur",
            "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",
            "handle": "bsky.app",
            "labels": [],
            "createdAt": "2023-04-12T04:53:57.057Z",
            "indexedAt": "2025-10-27T21:05:26.152Z",
            "associated": {
                "chat": {
                    "allowIncoming": "none"
                },
                "activitySubscription": {
                    "allowSubscriptions": "followers"
                }
            },
            "description": "official Bluesky account (check username👆)\n\nBugs, feature requests, feedback: support@bsky.app",
            "displayName": "Bluesky",
            "verification": {
                "verifications": [],
                "verifiedStatus": "none",
                "trustedVerifierStatus": "valid"
            }
        },
        "followers": [
            {
                "did": "did:plc:sdo6kumfbnroeho6zllkzc2z",
                "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:sdo6kumfbnroeho6zllkzc2z/bafkreidlettqkts2ru3b7wscewep5mbkxjfppdrqbhyfgcqgbrk2zdfrvi",
                "handle": "handle.invalid",
                "labels": [],
                "createdAt": "2025-12-22T12:18:03.125Z",
                "indexedAt": "2025-12-22T12:18:03.125Z",
          
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/profile/follows` — Follows

**Parameters:**
- `actor` (query, required, string) — Handle or DID Example: `bsky.app`
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bluesky-api/v1/profile/follows?actor=bsky.app"
```

**Response:**
```json
{
    "data": {
        "follows": [
            {
                "did": "did:plc:ry3hbexak5ytsum7aazhpkbv",
                "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ry3hbexak5ytsum7aazhpkbv/bafkreienc27b7pfsjflwvh645zh7ywb3ruwgshwqziv3ilo5mqsksjnl3i",
                "handle": "jp.bsky.app",
                "labels": [],
                "createdAt": "2026-03-31T23:39:06.356Z",
                "indexedAt": "2026-04-03T00:35:19.149Z",
                "associated": {
                    "activitySubscription": {
                        "allowSubscriptions": "followers"
                    }
                },
                "description": "Bluesky日本語公式アカウントです（ユーザー名をチェック👆）。\n\nバグのご報告、機能リクエスト、フィードバックはこちらへ →  support@bsky.app",
                "displayName": "Bluesky日本語（公式）",
                "verification": {
                    "verifications": [
                        {
                            "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3mikg6mqywn2r",
                            "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur",
                            "isValid": true,
                            "createdAt": "2026-04-03T00:02:41.492Z",
                            "issuerHandle": "bsky.app",
                            "issuerDisplayName": "Bluesky"
                        }
                    ],
        
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/profile/lists` — Lists created by the user

**Parameters:**
- `actor` (query, required, string) — Handle or DID Example: `bsky.app`
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bluesky-api/v1/profile/lists?actor=bsky.app"
```

**Response:**
```json
{
    "data": {
        "lists": [
            {
                "cid": "bafyreidikdsr75erlyyzcxbpkqzlsglmedgsclv7kbh5bgx4xhz67egwwi",
                "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.list/3lvpca43j5z26",
                "name": "Community Showcase",
                "labels": [],
                "creator": {
                    "did": "did:plc:z72i7hdynmk6r22z27h6tvur",
                    "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",
                    "handle": "bsky.app",
                    "labels": [],
                    "createdAt": "2023-04-12T04:53:57.057Z",
                    "indexedAt": "2025-10-27T21:05:26.152Z",
                    "associated": {
                        "chat": {
                            "allowIncoming": "none"
                        },
                        "activitySubscription": {
                            "allowSubscriptions": "followers"
                        }
                    },
                    "description": "official Bluesky account (check username👆)\n\nBugs, feature requests, feedback: support@bsky.app",
                    "displayName": "Bluesky",
                    "verification": {
                        "verifications": [],
                        "verifiedStatus": "none",
                        "trustedVerifierStatus": "valid"
                    }
                },
            
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/profile/media` — Author media posts

**Parameters:**
- `actor` (query, required, string) — Handle or DID Example: `bsky.app`
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bluesky-api/v1/profile/media?actor=bsky.app"
```

**Response:**
```json
{
    "data": {
        "feed": [
            {
                "post": {
                    "cid": "bafyreidujbxo3rqusy4v6m2xvbg6mwr2h3egmjh5fszkauo4sgwg3hkmfy",
                    "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3mmwmla3xph26",
                    "embed": {
                        "$type": "app.bsky.embed.images#view",
                        "images": [
                            {
                                "alt": "The Bluesky and Standard.site logos sharing an emoji handshake above examples of the new, dynamic link cards.",
                                "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreicnrpnkalwhwp2td7sxgpbxbt6ii3tjth2n5hdcdok5mxfro6np3u",
                                "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreicnrpnkalwhwp2td7sxgpbxbt6ii3tjth2n5hdcdok5mxfro6np3u",
                                "aspectRatio": {
                                    "width": 2024,
                                    "height": 1461
                                }
                            }
                        ]
                    },
                    "author": {
                        "did": "did:plc:z72i7hdynmk6r22z27h6tvur",
                        "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",
                        
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/profile/posts` — Author feed (posts only)

**Parameters:**
- `actor` (query, required, string) — Handle or DID Example: `bsky.app`
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bluesky-api/v1/profile/posts?actor=bsky.app"
```

**Response:**
```json
{
    "data": {
        "feed": [
            {
                "post": {
                    "cid": "bafyreidujbxo3rqusy4v6m2xvbg6mwr2h3egmjh5fszkauo4sgwg3hkmfy",
                    "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3mmwmla3xph26",
                    "embed": {
                        "$type": "app.bsky.embed.images#view",
                        "images": [
                            {
                                "alt": "The Bluesky and Standard.site logos sharing an emoji handshake above examples of the new, dynamic link cards.",
                                "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreicnrpnkalwhwp2td7sxgpbxbt6ii3tjth2n5hdcdok5mxfro6np3u",
                                "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreicnrpnkalwhwp2td7sxgpbxbt6ii3tjth2n5hdcdok5mxfro6np3u",
                                "aspectRatio": {
                                    "width": 2024,
                                    "height": 1461
                                }
                            }
                        ]
                    },
                    "author": {
                        "did": "did:plc:z72i7hdynmk6r22z27h6tvur",
                        "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",
                        
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/profile/replies` — Author feed incl. replies

**Parameters:**
- `actor` (query, required, string) — Handle or DID Example: `bsky.app`
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bluesky-api/v1/profile/replies?actor=bsky.app"
```

**Response:**
```json
{
    "data": {
        "feed": [
            {
                "post": {
                    "cid": "bafyreibgwuutflnt7ktuortqszbtmz35pdx7usi5qexc4vf3ohtc6mviuy",
                    "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3mmwmlxefkf2h",
                    "author": {
                        "did": "did:plc:z72i7hdynmk6r22z27h6tvur",
                        "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",
                        "handle": "bsky.app",
                        "labels": [],
                        "createdAt": "2023-04-12T04:53:57.057Z",
                        "associated": {
                            "chat": {
                                "allowIncoming": "none"
                            },
                            "activitySubscription": {
                                "allowSubscriptions": "followers"
                            }
                        },
                        "displayName": "Bluesky",
                        "verification": {
                            "verifications": [],
                            "verifiedStatus": "none",
                            "trustedVerifierStatus": "valid"
                        }
                    },
                    "labels": [],
                    "record": {
                        "text": "The release also includes a rebuilt GIF picker, a refreshed photo viewer,
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/profile/starter-packs` — Starter packs created by the user

**Parameters:**
- `actor` (query, required, string) — Handle or DID Example: `bsky.app`
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bluesky-api/v1/profile/starter-packs?actor=bsky.app"
```

**Response:**
```json
{
    "data": {
        "starterPacks": [
            {
                "cid": "bafyreiblw4aq7ipvhgyrdhu7rrlx3wu6o3yoqiq2iqtexblgni7ivv2bzm",
                "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.starterpack/3mnblq2djxx23",
                "labels": [],
                "record": {
                    "list": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.list/3mnblq24mc723",
                    "name": "June 2 Elections",
                    "$type": "app.bsky.graph.starterpack",
                    "feeds": [],
                    "createdAt": "2026-06-02T02:53:55.634Z",
                    "updatedAt": "2026-06-02T04:53:36.515Z",
                    "description": "Follow some of our favorite reporters covering the June 2, 2026, elections in California, Iowa, New Mexico, Montana, South Dakota, and New Jersey"
                },
                "creator": {
                    "did": "did:plc:z72i7hdynmk6r22z27h6tvur",
                    "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",
                    "handle": "bsky.app",
                    "labels": [],
                    "createdAt": "2023-04-12T04:53:57.057Z",
                    "associated": {
                        "chat": {
                            "allowIncoming": "none"
                        },
                        "activitySubscription": {
                            "allowSu
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/profiles` — Batch profiles (up to 25)

**Parameters:**
- `actors` (query, required, string) — Comma-separated handles/DIDs Example: `bsky.app,jay.bsky.team`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bluesky-api/v1/profiles?actors=bsky.app%2Cjay.bsky.team"
```

**Response:**
```json
{
    "data": {
        "profiles": [
            {
                "did": "did:plc:z72i7hdynmk6r22z27h6tvur",
                "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",
                "banner": "https://cdn.bsky.app/img/banner/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreichzyovokfzmymz36p5jibbjrhsur6n7hjnzxrpbt5jaydp2szvna",
                "handle": "bsky.app",
                "labels": [],
                "createdAt": "2023-04-12T04:53:57.057Z",
                "indexedAt": "2025-10-27T21:05:26.152Z",
                "associated": {
                    "chat": {
                        "allowIncoming": "none"
                    },
                    "lists": 12,
                    "labeler": false,
                    "feedgens": 7,
                    "starterPacks": 9,
                    "activitySubscription": {
                        "allowSubscriptions": "followers"
                    }
                },
                "pinnedPost": {
                    "cid": "bafyreicnt42y6vo6pfpvyro234ac4o6ijug6adwwrh7awflgrqlt4zibxq",
                    "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l"
                },
                "postsCount": 756,
                "description": "official Bluesky account (check username👆)\n\nBugs, feature requests, feedback: support@bsky.app",
                "displayName": "Bluesky",
            
…(truncated, see openapi.json for full schema)
```

### Posts

#### `GET /v1/post` — Post detail + thread

**Parameters:**
- `uri` (query, required, string) — AT-URI of the post/feed/list/starter-pack

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

#### `GET /v1/post/likes` — Who liked a post

**Parameters:**
- `uri` (query, required, string) — AT-URI of the post/feed/list/starter-pack
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

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

#### `GET /v1/post/quotes` — Quote-posts of a post

**Parameters:**
- `uri` (query, required, string) — AT-URI of the post/feed/list/starter-pack
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

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

#### `GET /v1/post/reposts` — Who reposted a post

**Parameters:**
- `uri` (query, required, string) — AT-URI of the post/feed/list/starter-pack
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

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

#### `GET /v1/posts` — Batch posts by AT-URIs

**Parameters:**
- `uris` (query, required, string) — Comma-separated AT-URIs

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

### Search

#### `GET /v1/hashtag` — Posts for a hashtag

**Parameters:**
- `tag` (query, required, string) — Hashtag (without #) Example: `art`
- `limit` (query, optional, string) — Page size

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bluesky-api/v1/hashtag?tag=art"
```

**Response:**
```json
{
    "data": {
        "posts": [
            {
                "cid": "bafyreifbh3vg4m2kjfxpkc7we535y6xm3yfyvqnnc3zxue7c63tfykxqte",
                "uri": "at://did:plc:7mbwyqmjtcus5vqr2cw4rqjk/app.bsky.feed.post/3mnc6oakyds2l",
                "embed": {
                    "$type": "app.bsky.embed.images#view",
                    "images": [
                        {
                            "alt": "Post-Photography Studies https://post-photography-studies.tumblr.com/ \n\n#postphotography #photography #digitalart #art #kunst #ai #collage #interface #windows #screenaesthetics #future",
                            "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:7mbwyqmjtcus5vqr2cw4rqjk/bafkreibydy3x7xoksoucoufjtjgfpci7ore42isfhi6ob2mh3jkwe2pise",
                            "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:7mbwyqmjtcus5vqr2cw4rqjk/bafkreibydy3x7xoksoucoufjtjgfpci7ore42isfhi6ob2mh3jkwe2pise",
                            "aspectRatio": {
                                "width": 448,
                                "height": 576
                            }
                        }
                    ]
                },
                "author": {
                    "did": "did:plc:7mbwyqmjtcus5vqr2cw4rqjk",
                    "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:7mbwyqmjtcus5vqr2cw4rqjk/bafkreigu6sc4enuzn2hltghocjkyvkhrfgfpjgrkm2fejo4rdkhbou73ay",
                    "handle": "garrettlynchirl.bsk
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/search/posts` — Full-text post search

**Parameters:**
- `q` (query, required, string) — Search query Example: `cycling`
- `sort` (query, optional, string) — top|latest
- `limit` (query, optional, string) — Page size

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bluesky-api/v1/search/posts?q=cycling"
```

**Response:**
```json
{
    "data": {
        "posts": [
            {
                "cid": "bafyreifec3pv2nj7ookrmgi3vk6oulrs344hpayqiqbbuebluwz743kwx4",
                "uri": "at://did:plc:2k6jwn46tzfjyc6vwcgh36c3/app.bsky.feed.post/3mnc6hf3bkk2f",
                "embed": {
                    "cid": "bafkreibjhpdvyv4rfpup3bv6om7t72j67brbcv4oez7mymrak4i6f4y5fe",
                    "$type": "app.bsky.embed.video#view",
                    "playlist": "https://video.bsky.app/watch/did%3Aplc%3A2k6jwn46tzfjyc6vwcgh36c3/bafkreibjhpdvyv4rfpup3bv6om7t72j67brbcv4oez7mymrak4i6f4y5fe/playlist.m3u8",
                    "thumbnail": "https://video.bsky.app/watch/did%3Aplc%3A2k6jwn46tzfjyc6vwcgh36c3/bafkreibjhpdvyv4rfpup3bv6om7t72j67brbcv4oez7mymrak4i6f4y5fe/thumbnail.jpg",
                    "aspectRatio": {
                        "width": 1080,
                        "height": 1920
                    },
                    "presentation": "default"
                },
                "author": {
                    "did": "did:plc:2k6jwn46tzfjyc6vwcgh36c3",
                    "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:2k6jwn46tzfjyc6vwcgh36c3/bafkreigi2suqxtjjm2bn2eeadwagitsd4jhuxteuoe6zswjanvjnjraga4",
                    "handle": "ioulia-libera.bsky.social",
                    "labels": [],
                    "createdAt": "2025-03-10T13:17:10.014Z",
                    "associated": {
                        "activitySubscription": {
                            "allowSubscripti
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/search/typeahead` — Actor autocomplete

**Parameters:**
- `q` (query, required, string) — Prefix Example: `jay`
- `limit` (query, optional, string) — Page size

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bluesky-api/v1/search/typeahead?q=jay"
```

**Response:**
```json
{
    "data": {
        "actors": [
            {
                "did": "did:plc:oky5czdrnfjpqslsw2a5iclo",
                "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:oky5czdrnfjpqslsw2a5iclo/bafkreihxtnc37g7jqdcgidtkknwuswtjiijcdnc6cx4imc4oq33cnsc5da",
                "handle": "jay.bsky.team",
                "labels": [],
                "createdAt": "2022-11-17T06:31:40.296Z",
                "associated": {
                    "chat": {
                        "allowIncoming": "following"
                    },
                    "activitySubscription": {
                        "allowSubscriptions": "followers"
                    }
                },
                "displayName": "Jay 🦋",
                "verification": {
                    "verifications": [
                        {
                            "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lndslpegeo2f",
                            "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur",
                            "isValid": true,
                            "createdAt": "2025-04-21T11:35:53.359Z",
                            "issuerHandle": "bsky.app",
                            "issuerDisplayName": "Bluesky"
                        }
                    ],
                    "verifiedStatus": "valid",
                    "trustedVerifierStatus": "none"
                }
            },
            {
                "did": "did:plc:3t37x6vfigdzzp2gjcfnzlz4",
 
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/search/users` — Search users/actors

**Parameters:**
- `q` (query, required, string) — Search query Example: `news`
- `limit` (query, optional, string) — Page size

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bluesky-api/v1/search/users?q=news"
```

**Response:**
```json
{
    "data": {
        "actors": [
            {
                "did": "did:plc:xlclrlbyua2bbz6rd5d4oq45",
                "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:xlclrlbyua2bbz6rd5d4oq45/bafkreih6otehkehg6gihhnjxl3rqgughy7xun6aaa3omtzosrys7pxtepe",
                "handle": "punchbowlnews.bsky.social",
                "labels": [],
                "createdAt": "2024-11-18T14:36:42.646Z",
                "indexedAt": "2026-01-02T19:23:05.627Z",
                "associated": {
                    "activitySubscription": {
                        "allowSubscriptions": "followers"
                    }
                },
                "description": "Subscribe at http://punchbowl.news. Power. People. Politics. #punchbowlnews",
                "displayName": "Punchbowl News",
                "verification": {
                    "verifications": [
                        {
                            "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3m5c5z6k2tq25",
                            "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur",
                            "isValid": true,
                            "createdAt": "2025-11-10T17:38:03.050Z",
                            "issuerHandle": "bsky.app",
                            "issuerDisplayName": "Bluesky"
                        }
                    ],
                    "verifiedStatus": "valid",
                    "trustedVerifierStatus": "none"
                }
          
…(truncated, see openapi.json for full schema)
```

### Feeds & Lists

#### `GET /v1/feed` — Custom feed by URI

**Parameters:**
- `uri` (query, required, string) — AT-URI of the feed generator
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

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

#### `GET /v1/feed/popular` — Popular custom feeds

**Parameters:**
- `q` (query, optional, string) — Filter query
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

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

**Response:**
```json
{
    "data": {
        "feeds": [
            {
                "cid": "bafyreievgu2ty7qbiaaom5zhmkznsnajuzideek3lo7e65dwqlrvrxnmo4",
                "did": "did:web:discover.bsky.app",
                "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot",
                "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreidljdg62x3zhlweyzshoekrw2znokytt5tmib7g4xsngwvpnf6ule",
                "labels": [],
                "creator": {
                    "did": "did:plc:z72i7hdynmk6r22z27h6tvur",
                    "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",
                    "handle": "bsky.app",
                    "labels": [],
                    "createdAt": "2023-04-12T04:53:57.057Z",
                    "indexedAt": "2025-10-27T21:05:26.152Z",
                    "associated": {
                        "chat": {
                            "allowIncoming": "none"
                        },
                        "activitySubscription": {
                            "allowSubscriptions": "followers"
                        }
                    },
                    "description": "official Bluesky account (check username👆)\n\nBugs, feature requests, feedback: support@bsky.app",
                    "displayName": "Bluesky",
                    "verification": {
                        "verifications"
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/list` — List feed by URI

**Parameters:**
- `uri` (query, required, string) — AT-URI of the list
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

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

#### `GET /v1/list/members` — List members by URI

**Parameters:**
- `uri` (query, required, string) — AT-URI of the list
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

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

#### `GET /v1/starter-pack` — Starter-pack detail by URI

**Parameters:**
- `uri` (query, required, string) — AT-URI of the starter pack

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

### Discovery

#### `GET /v1/handle/resolve` — Resolve a handle to its DID

**Parameters:**
- `handle` (query, required, string) — Handle Example: `bsky.app`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bluesky-api/v1/handle/resolve?handle=bsky.app"
```

**Response:**
```json
{
    "data": {
        "did": "did:plc:z72i7hdynmk6r22z27h6tvur"
    },
    "meta": {
        "timestamp": "2026-06-02T08:33:19.848Z",
        "request_id": "93e8a70a-94fc-4b88-a4bc-99b2887017d4"
    },
    "status": "ok",
    "message": "Resolve handle to DID",
    "success": true
}
```

#### `GET /v1/suggestions` — Suggested actors to follow

**Parameters:**
- `limit` (query, optional, string) — Page size
- `cursor` (query, optional, string) — Pagination cursor

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

**Response:**
```json
{
    "data": {
        "actors": []
    },
    "meta": {
        "timestamp": "2026-06-02T08:33:19.946Z",
        "request_id": "fd01b9a4-816c-4ea1-83cd-77b2584ad529"
    },
    "status": "ok",
    "message": "Suggested actors",
    "success": true
}
```

#### `GET /v1/trending/topics` — Trending topics

**Parameters:**
- `limit` (query, optional, string) — Page size

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

**Response:**
```json
{
    "data": {
        "topics": [
            {
                "link": "/profile/trending.bsky.app/feed/741797250",
                "topic": "Nigel Farage"
            },
            {
                "link": "/profile/trending.bsky.app/feed/741698619",
                "topic": "Mariners"
            },
            {
                "link": "/profile/trending.bsky.app/feed/741650189",
                "topic": "Digital Art"
            },
            {
                "link": "/profile/trending.bsky.app/feed/741703691",
                "topic": "Cole Young"
            },
            {
                "link": "/profile/trending.bsky.app/feed/741653033",
                "topic": "Lynx"
            },
            {
                "link": "/profile/trending.bsky.app/feed/741642072",
                "topic": "Olivia Miles"
            },
            {
                "link": "/profile/trending.bsky.app/feed/741560003",
                "topic": "Rachel Maddow"
            },
            {
                "link": "/profile/trending.bsky.app/feed/741609974",
                "topic": "Faces of Death"
            },
            {
                "link": "/profile/trending.bsky.app/feed/741581435",
                "topic": "Pentagon Funding"
            },
            {
                "link": "/profile/trending.bsky.app/feed/741533108",
                "topic": "Nintendo Music"
            }
        ],
        "suggested": [
            {
                "link": "/profile/bsky.app/
…(truncated, see openapi.json for full schema)
```

### Meta

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

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

**Response:**
```json
{
    "data": {
        "auth": "none upstream (public read API); this gateway requires x-api-key",
        "name": "Bluesky API",
        "note": "Live read-only data; no cache. Pagination via limit + cursor (cursor returned in each response). URIs are AT-URIs (at://did/app.bsky.feed.post/rkey).",
        "source": "Bluesky AT Protocol public AppView (public.api.bsky.app/xrpc)",
        "endpoints": 27
    },
    "meta": {
        "timestamp": "2026-06-02T08:33:20.344Z",
        "request_id": "c638a448-e5b9-452e-b122-a3a4f5590f4a"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```


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