Introducing the Instagram APIRead more →

Bluesky User Posts API. Posts and reposts, page by page.

Posts and reposts with exact counts. We handle the proxies, blocks and platform changes.

Bluesky User Posts API at a glance

Returns a public Bluesky account's posts and reposts from its handle, DID or profile link, as the tabs of its profile list them. Ask for its replies too, or only posts with media or video. Each post has its link, publish time, full text with hashtags, mentions and full link URLs, images and video, link card, quote and reply, the pin, and exact like, reply, repost, quote and bookmark counts. A repost also says who reposted it and when.

GET /v1/bluesky/posts

Read the API reference
  • 1 credit per page, $0.75–$1.97 per 1,000 pages
  • 22 typed fields null when unknown
  • 100 posts and reposts per page, most recent activity first: a post by when it was posted, a repost by when it was reposted
  • handle is all it needs, e.g. espn.com

Send one request. Get up to 100 posts and reposts back.

Copy the request in your language, or hand it to your agent. Sign up for an API key and your first 100 credits are free.

$ npm install socialtap
handle = espn.com
GET /v1/bluesky/postsTry in
const params = new URLSearchParams({
  handle: "espn.com",
});
const res = await fetch(`https://socialtap.dev/v1/bluesky/posts?${params}`, {
  headers: { "x-api-key": process.env.SOCIALTAP_API_KEY ?? "" },
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
const { data, page, meta } = body;
console.log(data, meta.credits_charged);
200 OK · GET https://socialtap.dev/v1/bluesky/postsDocs

One schema on 21 platforms.

The response reference lists every field, its type and when it is null. See the full schema.

  • Null means unknown

    A field Bluesky doesn't show is null, never zero or an empty string, so a real zero always means zero.

  • What it accepts

    The Bluesky account: its handle, with or without the @ (alice.bsky.social, espn.com), its DID (did:plc:z72i7hdynmk6r22z27h6tvur, did:web:didweb.watch), which is the id every answer gives, or a link to its profile.

  • Write one parser

    Bluesky, TikTok, Instagram and 18 more platforms answer in these fields, so the code that reads one reads them all.

platformstring
Platform ID (tiktok, youtube, …).
idstring
Platform-native post ID (string; Instagram shortcode, Reddit with its t3_ prefix).
urlstring
Canonical post URL.
typestring
Normalized content shape. New values may be added; treat unknown values as other.
platform_typestring
The platform's own product label, lowercase (reel, short, story, live, tweet, …).
titlestring
Headline (YouTube title, Reddit title); null on caption-only platforms.
textstring
Caption, description or body as plain text.
languagestring
BCP-47 language of text, when the platform states it.

What teams build with the Bluesky User Posts API.

  • Monitor an account for new posts

  • Export an account's post history

  • Compare engagement across an account's posts

  • Collect an account's images and video

Good to know before you build.

  • The default tab shows what the app's Posts tab shows, without replies to other accounts. Set tab=replies for those too.
  • The list goes by each item's latest activity: a post by when it was posted, a repost by when it was reposted, so a repost of an older post sits among recent items. published_at stays the post's own, and platform_specific.bluesky.reposted_by and reposted_at say who reposted it and when.
  • The pinned post comes first on the posts and replies tabs, and isn't repeated where it was posted. The media and video tabs show it only where it was posted.
  • An account that chose to be seen only by signed-in people returns private_or_unavailable, as the app answers a logged-out visitor.
  • A post of such an account that this one reposted is left out, so a page can hold fewer posts than its limit, or none, and still have a next_cursor.
  • If Bluesky's AppView (its main API) is down, the posts and replies tabs are read from the account's own repository instead. Counts, the author's badge and is_nsfw are then null, url names the author by DID, reposts aren't listed, and a partial_data warning says so. The media and video tabs then fail.

1 credit per page. Failed requests are free.

Buy credits once and spend them on any endpoint, on any platform.

SourcePrice per successful pagePer 1,000 pages
Platform API api1 credit$0.75–$1.97
  • Cache hits are free.
  • Credits from packs and top-ups never expire.
  • A monthly plan's credits are spent first, and what is left of them ends at each renewal.
  • Prices exclude tax: sales tax is added at checkout where it applies.
  • Outside the US, plans and packs are sold to businesses: checkout asks for your VAT, GST or other business tax ID.

Questions about the Bluesky User Posts API.

More in the API reference.

How much does the Bluesky User Posts API cost?
A page of up to 100 posts and reposts costs 1 credit. Every successful page is charged, empty pages included. SocialTap credits cost $0.75–$1.97 per 1,000, depending on the plan or pack.
How do I get the next page?
Repeat the same request with cursor set to page.next_cursor from the previous response, keeping the other parameters. When page.has_more is false there are no more pages. Cursors expire after 24 hours.

Try it on an account you know.

Paste its handle or link in the playground, or copy the request into your code.

100free credits
  • No credit card
  • Failed requests are free
  • Works on all 218 endpoints
Start for free Read the docs