Bluesky

Bluesky User Posts API

Author feed — posts and reposts (isRepost marked), quote/external/images embeds, opaque cursor.

Send a Bluesky profile URL, @handle, or handle and get that account's public author feed (app.bsky.feed.getAuthorFeed) as clean JSON — original posts and reposts. Reposts keep the original author{} and engagement; they are marked isRepost=true with repostedBy{handle,displayName,did,avatar} and repostedAt so analytics do not credit someone else's likes to the profile you queried. Pass includeReposts=false to drop reposts. Optional filter maps to Bluesky's feed filter (posts_with_replies | posts_no_replies | posts_with_media | posts_and_author_threads | posts_with_video) — that controls replies/media/threads, not reposts. Each row: uri/url/cid, text, publishedAt, indexedAt, author{}, engagement{likes,reposts,replies,quotes}, and embed as one of type external | images | video | quote (quotes include uri/url/text/author — never a raw lexicon NSID). Rows are ordered by effective timestamp — repostedAt for reposts, publishedAt otherwise — matching Bluesky's author-feed order; re-sorting by publishedAt alone yields a different feed. nextCursor is Bluesky's opaque cursor (do not derive it from publishedAt). Billed ~0.1 credits per returned row (limit max 100). Pass cache=true for the 24h shared cache.

Docs: https://captapi.com/apis/bluesky-user-posts

get/v1/bluesky/user-posts

Request

  • Base URL: https://api.captapi.com
  • URL: https://api.captapi.com/v1/bluesky/user-posts
  • Auth: one of:
    • HTTP bearer
    • API key in header X-API-Key

Query parameters

urlstring required

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.

limitinteger

Max items to return (default 25, max 100). Billed per result.

cursorstring

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).

filterstring

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.

includeRepostsboolean

When false, omit repost rows (reasonRepost). Default true — reposts are included and marked with isRepost / repostedBy / repostedAt.

cacheboolean

Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh.

Response

Success. The data object for this endpoint.

successunknown required

Changes

No recorded changes to this operation across all 3 revisions of this API.