Bluesky API · post · schedule · analyze

The Bluesky API built for developers

Post text, images, video and threads to Bluesky with one API call — no AT Protocol sessions, no manual rich-text facets, no blob upload steps. We handle atproto so you ship in hours, not weeks.

PostsThreadsImagesSchedulingAnalytics

✓ 5 minutes to first post ✓ 99.92% uptime ✓ Posts, threads & rich-text

bash
curl https://api.outstand.so/v1/posts/ \
  -H "Authorization: Bearer $OUTSTAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "content": "hello from the API 🦋 read more at https://outstand.so", "accounts": ["bluesky"] }'

Links, @mentions and #hashtags become clickable automatically. Add up to 4 images, or containers[] for a thread.

Bluesky is open — but the AT Protocol is low-level

Posting on Bluesky means speaking the AT Protocol directly: authenticate a session against the user's PDS, resolve their DID, and createRecord with byte-indexed rich-text facets for every link, mention and hashtag. Images are blobs you upload then reference. Outstand turns all of it into a single request.

Authenticate a session against the PDS and resolve the DID
Connect once — we manage the AT Protocol session and DID
Links, mentions and hashtags need byte-indexed facets
We compute facets — links, @mentions and #hashtags become clickable for you
Images must be uploaded as blobs, then referenced in the embed
Pass a media URL; we upload the blob and embed it
Threads are reply records with root and parent refs
Send a containers[] array; we set the reply refs in order
Rate limits per session
We queue, throttle and retry — you never see an error

Everything Bluesky supports, through one endpoint

Every content type and capability available on Bluesky via Outstand today.

Text posts

Images (up to 4)

Threads

Link cards

PublishingSchedulingAnalyticsMedia handlingComments

Plus automatic rich-text facets — links, @mentions and #hashtags are made clickable for you. Reading or replying to replies is not yet exposed.

Copy, paste, ship

The same accounts array also fans out to X, Threads, LinkedIn and more — one request, many platforms.

Post with images (up to 4)

bash
curl https://api.outstand.so/v1/posts/ \
  -H "Authorization: Bearer $OUTSTAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "launch day 📸",
    "accounts": ["bluesky"],
    "media": [
      { "url": "https://media.outstand.so/1.jpg", "filename": "1.jpg" },
      { "url": "https://media.outstand.so/2.jpg", "filename": "2.jpg" }
    ]
  }'

Post a thread

bash
curl https://api.outstand.so/v1/posts/ \
  -H "Authorization: Bearer $OUTSTAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accounts": ["bluesky"],
    "containers": [
      { "content": "a thread on building in the open 🧵" },
      { "content": "1/ share early" },
      { "content": "2/ listen, then ship" }
    ]
  }'

Auto-link mentions & hashtags

bash
curl https://api.outstand.so/v1/posts/ \
  -H "Authorization: Bearer $OUTSTAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "big news 👉 https://outstand.so/blog — h/t @alice.bsky.social #buildinpublic",
    "accounts": ["bluesky"]
  }'

Schedule a post (up to 30 days out)

bash
curl https://api.outstand.so/v1/posts/ \
  -H "Authorization: Bearer $OUTSTAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "content": "going live Friday ⏰", "accounts": ["bluesky"], "scheduledAt": "2026-07-03T16:00:00Z" }'

Read analytics

bash
curl https://api.outstand.so/v1/posts/{id}/analytics \
  -H "Authorization: Bearer $OUTSTAND_API_KEY"
# → likes, reposts, replies, quotes

Live in three steps

From signup to your first published Bluesky post in about five minutes.

1

Connect Bluesky

Your user connects via OAuth or an app password. We manage the AT Protocol session and resolve their DID — no app review required.

2

Call POST /v1/posts/

Send text and media with accounts: ["bluesky"]. Use containers[] for a thread, or add scheduledAt to schedule.

3

We do the atproto work

Facet computation, blob upload, reply refs and retries — returned as a unified response with the published post URI.

More than a Bluesky wrapper

One integration that grows with everything you ship next.

One API, 10+ platforms

One request publishes to Bluesky and 10 more networks. Same JSON shape everywhere — learn one API, ship them all.

Managed Keys or BYOK

No app review on Bluesky — connect via OAuth or an app password. Use our Managed Keys, or your own credentials.

Built for scale

Intelligent rate limiting, automatic token refresh, webhook events and media processing.

Honest pricing

$19/mo includes 3,000 posts, then from $0.007/post. No seats, no annual lock-in.

What you can build

Same endpoints, same data shapes — pick what you ship.

Social schedulers

Let your users queue and auto-publish Bluesky content from your app.

AI agents

Give Claude or GPT a tool to post to Bluesky. MCP server included.

Analytics dashboards

Pull Bluesky reach and engagement alongside every other platform.

Agencies & white-label

Run Bluesky posting for clients under your own brand and app.

Bluesky API FAQ

The questions developers ask before they build.

Does Bluesky have an official API?

Yes — Bluesky is built on the open AT Protocol, which lets apps create posts, threads and media records and read engagement. Outstand is a managed layer on top of it, so you skip the session, DID and facet handling.

Do I need an app password to post to Bluesky?

You connect with OAuth or a Bluesky app password. Outstand stores the credential securely and manages the AT Protocol session for you — there is no app-review process on Bluesky.

Can I post images and video to Bluesky via API?

Yes. Add up to 4 images (or a video) in the media array and Outstand uploads each as a blob and embeds it in the post record.

Do links, mentions and hashtags become clickable?

Yes. The AT Protocol requires byte-indexed rich-text facets for these to be clickable. Outstand computes the facets automatically, so URLs, @handles and #hashtags in your content just work.

Can I post a thread on Bluesky via API?

Yes. Send a containers[] array — the first container is the root post and each following container is published as a reply with the correct root and parent refs.

Can I schedule Bluesky posts via the API?

Yes. Add a scheduledAt ISO-8601 timestamp (up to 30 days ahead) and Outstand publishes it automatically — no cron or queue on your side.

Can I delete a Bluesky post via the API?

Yes. Bluesky supports deleting records via the API, and Outstand exposes it through DELETE /v1/posts/{id}/remote.

Ship Bluesky posting today

Grab an API key and publish your first Bluesky post in the next five minutes. 3,000 posts included, then from $0.005/post.