Get a Bluesky user’s posts
Retrieve a page of public posts, replies and reposts with original records, media metadata and engagement counts. Provide exactly one of handle or user_id, and pass cursor to retrieve the next page.
/v1/bluesky/user/postsx-api-keyHeaders
Get your API keyYour ScrapeAtlas customer key. Create one on /account/ and set SCRAPEATLAS_API_KEY.
One Bluesky handle; mutually exclusive with user_id.
min 3 chars · max 253 chars
example.testOne did:plc or did:web account identifier, mutually exclusive with handle.
max 2048 chars
Opaque next-page cursor. Absence means the source provided no continuation; do not invent a cursor.
min 1 chars · max 2048 chars
Request correlation identifier.
Source request count, decoded response bytes and elapsed milliseconds.
Always included.
≥ 0
Always included.
≥ 0
Always included.
≥ 0
True when usable data is returned; inspect status and coverage for omissions.
success, partial, failed, or challenged. HTTP 200 can be partial.
one of: success, partial
Canonical profile or post URL.
absolute HTTPS URL
UTC retrieval time.
Complete means this bounded page or thread was returned without known omissions. It does not imply all historical posts or replies.
Always included.
Always included.
Always included.
Ordered post views: uri, cid, author, record text and facets, embeds, reply/repost/like/quote counts, labels, timestamps and source extensions.
up to 30 items
Always included.
Always included.
min 1 chars
Always included.
Always included.
max 2048 chars
Always included.
min 1 chars
Always included.
Always included.
Always included.
Always included.
Always included.
≥ 0
Always included.
≥ 0
Always included.
≥ 0
Always included.
≥ 0
Always included.
Opaque next-page cursor. Absence means the source provided no continuation; do not invent a cursor.
No fields match.
HTTP 200 returns the success variant. Check status: partial means usable data with warnings, and failed or challenged requests carry a failure object described in Errors & responses.
| HTTP | failure.code | Meaning |
|---|---|---|
| 200 | partial | Usable data with restricted_posts_omitted, unavailable_replies_omitted, replies_incomplete, or reply_limit warnings. Batch omissions use unavailable_records or restricted_records_omitted warnings. |
| 400 | invalid_request | Missing, duplicate, ambiguous, unsafe or unsupported parameters. |
| 401 | unauthorized | Missing or invalid worker API key. |
| 403 | restricted_page | The primary account or post is restricted or unavailable. |
| 404 | not_found | The source reports a missing profile or post. |
| 404 | unavailable_records | No requested batch record is available from the public source; no empty success is returned. |
| 429 | upstream_rate_limited | Source throttling; no automatic retry. |
| 502 | upstream_challenged | Source rejected the unauthenticated request. |
| 502 | unsupported_page | Malformed, missing or mismatched source data. |
| 502 | response_too_large payload_too_complex | Response exceeded byte or parsing limits. |
| 502 | unsafe_redirect request_limit upstream_error | Bounded source retrieval could not complete. |
| 503 | busy | All worker slots are occupied. |
| 504 | timeout | Total request deadline expired. |