Social networks
Bluesky API
Retrieve public Bluesky profiles, paginated account feeds, post conversations, and batches of selected profiles or posts.
Five authenticated endpoints return structured public data with original records, media metadata, source counts, and explicit coverage.
API availability: Available
http://localhost:3013Public API: https://api.scrapeatlas.com.Endpoints
/v1/bluesky/profileGet a Bluesky profile
Retrieve a public Bluesky profile by handle with its DID, display name, bio, images, follower/following/post counts, verification and published profile metadata.
Reference/v1/bluesky/user/postsGet 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.
Reference/v1/bluesky/postGet a Bluesky post
Retrieve a public Bluesky post, its author, media metadata, engagement counts and nested replies by HTTPS bsky.app URL with a handle or DID.
Reference/v1/bluesky/profiles/batchGet Bluesky profiles in a batch
Retrieve public profiles for up to 25 handles or DIDs in one request, with full profile metadata and a result for each actor in input order.
Reference/v1/bluesky/posts/batchGet Bluesky posts in a batch
Retrieve up to 25 selected post views by canonical AT URI in one request, including authors, original records, media metadata and engagement counts, with a result for each URI in input order.
ReferenceQuick start
Create an API key on your account page, then call the public API. Values below are placeholders.
curl "https://api.scrapeatlas.com/v1/bluesky/profile?handle=example.test" \
-H "x-api-key: YOUR_API_KEY"Coverage & limits
- Independent, stateless worker: four concurrent operations; 15-second total deadline; at most two upstream HTTP attempts with one shared transient retry. No automatic retry for challenges or HTTP 429.
- Fixed public.api.bsky.app HTTPS origin. No login, cookies, browser, proxy, outbound link visits, media downloads or result storage. The service API key is never forwarded.
- At most 4 MiB combined decoded JSON, depth 32 and 30,000 nodes per source response. Oversize or malformed responses fail explicitly.
- User posts: one source page of up to 30 entries; source order and duplicates are preserved. Cursor continuation is caller-driven, without automatic crawling.
- Single post: six reply levels and at most 100 visited reply nodes. Known unreturned replies produce replies_incomplete or reply_limit warnings. No ancestor enumeration.
- Source access restrictions, hidden or taken-down labels and blocked or missing embedded content are honoured: a restricted primary object fails explicitly, and affected feed entries or replies are omitted with partial coverage. Ordinary content labels remain metadata.
- Source optional fields and null values are preserved. Source caching and live counters can affect freshness.
- Batch profiles/posts: 1–25 unique input identifiers, JSON POST bodies up to 64 KiB, one source batch call with at most one shared transient retry; no per-record enrichment or thread expansion. Results follow input order. Missing/restricted records are null with explicit status; no usable records fails with unavailable_records.
| 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. |