Appearance
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
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
handle | string | no | Bluesky handle | espn.com |
user_id | string | no | Bluesky '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 --helpExample 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
| Status | Meaning | Action |
|---|---|---|
| 200 | Success. | Use the JSON payload. |
| 400 | Invalid or missing parameter. | Verify required parameters and value format. |
| 401 | Missing or invalid x-api-key. | Pass a valid API key in the header. |
| 402 | Out of credits. | Top up at scrapecreators.com or wait for plan reset. |
| 404 | Resource not found or private. | Confirm the handle, URL, or id and that the resource is public. |
| 429 | Rate limited. | Backoff and retry with exponential delay. |
| 500 | Server error or upstream platform failure. | Retry with backoff; report persistent errors to support. |