Postproxy × Bluesky

Publish to Bluesky via one API. Postproxy handles the AT Protocol, app-password auth, link cards, and image embeds for you.

One request reaches Bluesky alongside every other network you publish to.

Free plan · No credit card · Live in under 5 minutes

App-password auth

Skip the AT Protocol login dance — pass a handle and app password, we keep the session fresh.

Link cards built in

Posts that include a URL get an automatic link card with the OG image and metadata.

Thread conversations

Sequential replies via the same threads API used for X and Threads.

Mentions, tags, links

Plain-text @handles, #tags, and URLs are linkified server-side with proper facets.

$ 

View full documentation for all platform-specific features for Bluesky

INTEGRATION COST

Skip days of Bluesky integration work

One curl against a sandbox account is the easy part. Production Bluesky publishing means session refresh, blob uploads under the 1 MB cap, AT Protocol facets for mentions and links, OG-fetched link cards, and a permanent on-call rotation for "why didn't this one go through this time?"

5 min
Time to your first Bluesky post via API
Days → Hours
Engineering time saved on integration work
$0
Free plan, no credit card required
Build it yourself
  • Manage app-password storage and session refresh across many accounts
  • Resolve @handles and compute facets for mentions, hashtags, and links
  • Fetch OG metadata and upload card images within Bluesky's ~1 MB blob limit
  • Upload image and video blobs via XRPC, then build the embed record
  • Handle rate limits, retries, and per-account failures
  • Triage every silent failure: "Why didn't this one post go through?"
Ship with Postproxy
  • One REST endpoint. One payload schema. SDKs for popular languages
  • OAuth, tokens, and refresh handled for you — across all accounts
  • Media upload, chunking, and format detection — automatic
  • Retries, rate-limit windows, and per-platform receipts built in
  • Edge cases are our problem. Failures come back with an explicit reason
  • We track the API changes. You ship features
Start posting to Bluesky via API See pricing

Free plan includes the Bluesky API. No credit card.

Benefits

Why Postproxy for Bluesky?

Skip AT Protocol learning curve

No need to read up on lexicons, facets, blob uploads, or session refresh — Postproxy translates a standard post body into the right XRPC calls.

One payload, every network

Publish the same post body to Bluesky alongside Instagram, LinkedIn, X, and more in a single API call.

Auto link cards

Postproxy fetches the OG image and metadata for the URL in your post and uploads it as a Bluesky link card embed.

Reliable delivery

Automatic retries, clear status, and HMAC-signed webhooks for every Bluesky outcome.

How Postproxy publishes to Bluesky

Bluesky's publishing model

Bluesky runs on the AT Protocol — a federated network where every action is a typed record (a lexicon) written to your data repo. Posting means uploading any media as blobs, then creating an app.bsky.feed.post record with text plus optional embeds. Postproxy handles the session, blob uploads, facet extraction, and record creation — you send a normal post body and we translate it into the right XRPC calls.

Mentions, hashtags, and links

Bluesky doesn't auto-linkify plain text — it expects pre-computed facets that mark byte ranges in your post as mentions, tags, or links. Postproxy extracts @handle, #tag, and URL patterns from your post body and resolves handles via the directory, so the same plain-text body you send to X works on Bluesky without extra markup.

Link cards and image embeds

When a post contains at least one URL and no media attachments, Postproxy fetches the Open Graph metadata, downloads the OG image (skipping anything past Bluesky's ~1 MB blob limit), and uploads it as an app.bsky.embed.external link card. If your post has any image or video attachments, those win at the embed level and the URL stays a clickable facet link — Bluesky doesn't allow both.

App passwords, not real passwords

Bluesky's main account password won't work for API posting when 2FA is enabled — and even when it does work, the API will warn you off. Always issue an app password at bsky.app/settings/app-passwords. Postproxy stores the app password, keeps the session token refreshed, and surfaces a clear reconnect prompt if the user ever revokes it.

Frequently Asked Questions

Common questions about Bluesky integration

How do I authenticate a Bluesky account?

Generate an app password at bsky.app/settings/app-passwords and pass it with the handle to /api/profile_groups/:id/initialize_connection. Never use the main account password — accounts with 2FA will reject it.

What's the Bluesky character limit?

300 graphemes. Emoji and combining sequences count as one character on Bluesky's side, which is more generous than a UTF-8 byte count.

Does Postproxy generate link cards on Bluesky?

Yes. If a post contains at least one URL and no media attachments, Postproxy fetches the OG metadata, downloads the OG image, and uploads it as an app.bsky.embed.external card. Posts with media attachments skip the card — the URL is still rendered as a clickable link via the link facet.

Can I post threads on Bluesky?

Yes. Use the thread parameter on the post create endpoint to add sequential replies. Each thread child can include its own media.

What media can I attach to a Bluesky post?

Up to 4 images (jpg, png, webp, gif) at 1 MB each, or one video (mp4, mov) up to 50 MB and 60 seconds. Bluesky's blob size limit drives the per-image cap.

Ready to get started?

Start with our free plan and scale as your needs grow. No credit card required.