Skip to content

Posts

GET /v1/bluesky/user/posts

Fetches a paginated feed of posts from a Bluesky user, returning each post's uri, record text, author info, embed content, replyCount, repostCount, likeCount, quoteCount, and indexedAt. Supports pagination via cursor. Use user_id (the 'did') instead of handle for faster response times.

Authentication

All requests require the x-api-key header. Get your key at scrapecreators.com.

Query Parameters

NameTypeRequiredDescriptionExample
handlestringnoBluesky handleespn.com
user_idstringnoBluesky 'did'. (For some reason Bluesky calls their user ids, 'did' for whatever reason)did:plc:x7d6j54pm22ufehkes6jo4jf

Example Request

curl

bash
curl 'https://api.scrapecreators.com/v1/bluesky/user/posts' \
  -H 'x-api-key: $SCRAPECREATORS_API_KEY'

Node / TypeScript

js
const params = new URLSearchParams({  });
const res = await fetch(`https://api.scrapecreators.com/v1/bluesky/user/posts?${params}`, {
  headers: { 'x-api-key': process.env.SCRAPECREATORS_API_KEY }
});
const data = await res.json();
console.log(data);

Python

python
import os, requests
r = requests.get(
    'https://api.scrapecreators.com/v1/bluesky/user/posts',
    headers={'x-api-key': os.environ['SCRAPECREATORS_API_KEY']},
    params={},
)
r.raise_for_status()
print(r.json())

CLI

bash
scrapecreators bluesky user-posts --help

Example Response

json
{
  "success": true,
  "feed": [
    {
      "uri": "at://did:plc:x7d6j54pm22ufehkes6jo4jf/app.bsky.feed.post/3lqdfq7fkvm2g",
      "cid": "bafyreibams5wyqdpg2cmmks7lhf5ccxu7hbu24sfatgc53jmb2nun5k5dm",
      "author": {
        "did": "did:plc:x7d6j54pm22ufehkes6jo4jf",
        "handle": "espn.com",
        "displayName": "ESPN",
        "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:x7d6j54pm22ufehkes6jo4jf/bafkreie4oxawqqsfzvk47ysr3unsnmviedzpylxmwxnpa534to2bzas4ie@jpeg",
        "labels": [],
        "createdAt": "2024-11-25T21:49:49.345Z",
        "verification": {
          "verifications": [
            {
              "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur",
              "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lndppjqgb72f",
              "isValid": true,
              "createdAt": "2025-04-21T10:44:20.398Z"
            }
          ],
          "verifiedStatus": "valid",
          "trustedVerifierStatus": "none"
        }
      },
      "record": {
        "$type": "app.bsky.feed.post",
        "createdAt": "2025-05-29T19:01:20.743Z",
        "embed": {
          "$type": "app.bsky.embed.external",
          "card": {
            "description": "The Oilers apparently will have defenseman Mattias Ekholm back in their lineup for Game 5 of the Western Conference finals against the Stars.",
            "thumb": {
              "$type": "blob",
              "ref": {
                "$link": "bafkreihhffgngv4thcnw7sh7o43qnwwyjvfemdlccwalu76r3vnhlbssle"
              },
              "mimeType": "image/jpeg",
              "size": 158648
            },
            "title": "Oilers' Ekholm set for return in Game 5 vs. Stars",
            "uri": "http://spr.ly/63320N4OEy"
          },
          "external": {
            "description": "The Oilers apparently will have defenseman Mattias Ekholm back in their lineup for Game 5 of the Western Conference finals against the Stars.",
            "thumb": {
              "$type": "blob",
              "ref": {
                "$link": "bafkreihhffgngv4thcnw7sh7o43qnwwyjvfemdlccwalu76r3vnhlbssle"
              },
              "mimeType": "image/jpeg",
              "size": 158648
            },
            "title": "Oilers' Ekholm set for return in Game 5 vs. Stars",
            "uri": "http://spr.ly/63320N4OEy"
          }
        },
        "facets": [],
        "text": "Oilers' defenseman Mattias Ekholm is set to return to action Thursday for Game 5 of the Western Conference finals against the Stars.\n\nEkholm has been out of the Oilers' lineup since April 11 with an undisclosed injury."
      },
      "embed": {},
      "replyCount": 1,
      "repostCount": 0,
      "likeCount": 24,
      "quoteCount": 1,
      "indexedAt": "2025-05-29T19:01:21.645Z",
      "labels": []
    }
  ],
  "cursor": "2025-05-22T17:02:02.847Z"
}

Credits

Most ScrapeCreators endpoints consume 1 credit per successful response. Some heavier endpoints (transcripts, AI-driven enrichment, ad detail lookups) may cost more. Check GET /v1/credit-balance for your remaining balance.

Errors

StatusMeaningAction
200Success.Use the JSON payload.
400Invalid or missing parameter.Verify required parameters and value format.
401Missing or invalid x-api-key.Pass a valid API key in the header.
402Out of credits.Top up at scrapecreators.com or wait for plan reset.
404Resource not found or private.Confirm the handle, URL, or id and that the resource is public.
429Rate limited.Backoff and retry with exponential delay.
500Server error or upstream platform failure.Retry with backoff; report persistent errors to support.