How to get Bluesky user posts
GET request to /v1/bluesky/user-posts with your input. You get clean JSON back in seconds for ~3 credits (0.1/result) per call — no OAuth, scraping or platform SDKs. Author feed — posts and reposts (isRepost marked), quote/external/images embeds, opaque cursor.How to get Bluesky user posts (step by step)
- 1
Get a free API key
Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.
- 2
Call the Bluesky User Posts API
Send an authenticated GET request to /v1/bluesky/user-posts with your input. No OAuth, no scraping setup.
- 3
Read the JSON response
Parse the clean JSON response. Pass cache=true for a free 24h cache hit; default is always fresh.
Code example
curl "https://api.captapi.com/v1/bluesky/user-posts?url=https%3A%2F%2Fbsky.app%2Fprofile%2Fbsky.app" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."What the response looks like
{
"success": true,
"data": {
"handle": "jay.bsky.team",
"totalReturned": 5,
"nextCursor": "2026-06-26T14:25:33.024Z",
"hasMore": true,
"posts": [
{
"platform": "bluesky",
"uri": "at://did:plc:fpruhuo22xkm5o7ttr2ktxdo/app.bsky.feed.post/3mqjnjafz2s2k",
"url": "https://bsky.app/profile/danabra.mov/post/3mqjnjafz2s2k",
"cid": "bafyreib46qdetrzwrcu35fqynwkiw6tscptkvlxcujk5f745jmzqox5jz4",
"text": "i want to do a little ✨ ama about atproto ✨ in this thread. no question is too simple\n\nif you’ve been curious about atproto but don’t know much (anything?) about it, ask any question and i’ll try to explain it in my own words.\n\n(+ would love to hear from friends who aren’t very active on bsky)",
"publishedAt": "2026-07-13T12:02:47.424Z",
"indexedAt": "2026-07-13T12:02:47.867Z",
"author": {
"handle": "danabra.mov",
"displayName": "dan",
"did": "did:plc:fpruhuo22xkm5o7ttr2ktxdo",
"avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:fpruhuo22xkm5o7ttr2ktxdo/bafkreif43mhqajnbnl62u3ezf37g6x22nd762im54thxbil4ga46eugcga"
},
"engagement": {
"likes": 340,
"reposts": 82,
"replies": 104,
"quotes": 9
},
"embed": null
},
{
"platform": "bluesky",
"uri": "at://did:plc:xtg6uhgsy2j7k2a6qtcood2w/app.bsky.feed.post/3mqsnmkorxc2l",
"url": "https://bsky.app/profile/karlbode.com/post/3mqsnmkorxc2l",
"cid": "bafyreih62va7pjdlbcij4nwp55hatyr73glrjr52eocvxkxwdd72i5phea",
"text": "meanwhile...",
"publishedAt": "2026-07-17T01:58:36.505Z",
"indexedAt": "2026-07-17T01:58:38.070Z",
"author": {
"handle": "karlbode.com",
"displayName": "Karl Bode",
"did": "did:plc:xtg6uhgsy2j7k2a6qtcood2w",
"avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:xtg6uhgsy2j7k2a6qtcood2w/bafkreigf276i3ejipydii2glvywuymqwj4usu5noz4rw7lirgxrtbbcibi"
},
"engagement": {
"likes": 973,
"reposts": 216,
"replies": 41,
"quotes": 107
},
"embed": {
"type": "external",
"url": "https://www.seattletimes.com/seattle-news/meet-jimothy-seattles-internet-famous-raccoon/?fbclid=Iwb21leATGa4ljbGNrBMZrgWV4dG4DYWVtAjExAHNydGMGYXBwX2lkDDM1MDY4NTUzMTcyOAABHnlF6kiFK1hm4n5G5_BMmAcqRVTUV6qoBX4qZCw1rworU3stQwUoZZFw3yXL_aem_eUBpvFSYXBAwVjchn5qVyA",
"title": "Meet ‘Jimothy,’ Seattle’s internet-famous raccoon",
"description": "The tiny beast has been spotted twice in Ballard this summer and appears to be doing well, despite a likely congenital deformity, an animal expert said.",
"thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:xtg6uhgsy2j7k2a6qtcood2w/bafkreidmxsn5szs7i4vpq7kpjbwh44kwnkwu5b2n44vjhtye4hfpqfhzxq"
}
}
]
}
}Billing metadata (credits charged, cache hit/miss) is returned in the X-Captapi-Credits and X-Captapi-Cache response headers.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | Bluesky profile URL, @handle, or handle, e.g. https://bsky.app/profile/handle.bsky.social. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble. |
| limit | integer | No | Max items to return (default 25, max 100). Billed per result. |
| cursor | string | No | Opaque pagination cursor from the previous nextCursor. Leave empty for the first page. Do not invent a cursor from publishedAt — the feed is ordered by feed time (reposts sort by repost time). |
| filter | string | No | Bluesky getAuthorFeed filter: posts_with_replies (default), posts_no_replies, posts_with_media, posts_and_author_threads, or posts_with_video. Controls replies/media/threads — not reposts. Use includeReposts=false to drop reposts. |
| includeReposts | boolean | No | When false, omit repost rows (reasonRepost). Default true — reposts are included and marked with isRepost / repostedBy / repostedAt. |
| cache | boolean | No | Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh. Envelope includes cached + cachedAt on hits. |
Frequently asked questions
What does the Bluesky User Posts API do?
The Bluesky User Posts API lets you list items in bulk with metadata from a public Bluesky post using one GET request to /v1/bluesky/user-posts. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the Bluesky User Posts API cost?
At the default limit this endpoint costs 3 credits (0.1 per result). Billing scales with how many results you request. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Hits include cached + cachedAt. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.
Do I need a Bluesky API key or OAuth?
No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.
Is the Bluesky User Posts API suitable for production use?
Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Hits include cached + cachedAt. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
Ready to get Bluesky user posts?
Start free with 100 credits — no credit card required.
Get your free API key