Solutions

Bluesky API for Developers

Publish to Bluesky from one REST API or MCP server, with clickable links, hashtags and mentions, link cards and images with alt text. Ampost handles the AT Protocol details.

Rich Text Done Right

Bluesky only makes links, #tags and @mentions clickable when the post carries byte-exact facets. Ampost detects them and resolves handles for you.

Link Cards

Send a `linkUrl` and Ampost builds the link card from the page's title, description and image, as the Bluesky app does.

Images with Alt Text

Attach up to 4 images; `altText` and dimensions go to Bluesky so images are accessible and keep their aspect ratio.

App Password Connection

Users connect with a Bluesky app password, never their account password. Ampost refuses the account password and the user can revoke access any time.

Any PDS

Ampost resolves the handle to the account's own server, so accounts on bsky.social and self-hosted PDSes both work.

Same Model as Every Platform

Post the same update to Bluesky, X, Threads and LinkedIn with one request, and schedule it for later.

Why this page exists

A Bluesky publishing API without AT Protocol plumbing

Posting to Bluesky well takes more than one HTTP call: resolving the handle to its server, computing UTF-8 byte offsets for every link and mention, uploading blobs and building link cards.

Ampost does that work and keeps the request the same as for every other network, so Bluesky is one more entry in platforms.

Use cases

Cross-posting from X and Threads

Send each announcement to Bluesky as well, with the link turned into a proper card instead of a bare URL.

AI agents with a Bluesky presence

Give an agent an MCP tool that posts to Bluesky with correct mentions and hashtags, without AT Protocol code.

Products that post for their users

Let users connect Bluesky with an app password on an Ampost page, then publish from your product with your API key.

Publish to Bluesky in one API call

Connect a Bluesky account once, then publish posts with a link card from your backend or agent.

curl -X POST https://api.ampost.io/api/posts \
  -H "Authorization: Bearer amp_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platforms": ["bluesky"],
    "text": "New on the blog: how we ship weekly #buildinpublic",
    "linkUrl": "https://example.com/blog/shipping-weekly",
    "publishNow": true
  }'

Bluesky-specific caveats

What developers should know before integrating

Bluesky posts are limited to 300 characters, counted as Bluesky counts them (grapheme by grapheme).

A post carries either images (up to 4, each under 1 MB) or a link card. With images, the link goes into the text instead.

Video is not supported yet.

Users connect with an app password. If they delete it in Bluesky, Ampost marks the account disconnected at the next post.

Build path

Move from Bluesky proof of concept to production

Read the API docs, connect a Bluesky account with an app password, then send a first post with a link and check the card in the app.

Keep Bluesky text under 300 characters: use the per-platform text override in options.bluesky.text when the same post is longer elsewhere.

FAQ

Common questions about Bluesky API integration

How do users connect Bluesky to Ampost?

On an Ampost connection page they enter their handle and an app password created in Bluesky under Settings, Privacy and security, App passwords. Ampost refuses the account password.

Are links, hashtags and mentions clickable?

Yes. Ampost adds the rich-text facets Bluesky needs for links, #tags and @mentions; mentions of handles that do not exist stay plain text.

Can I schedule Bluesky posts?

Yes. Send a future `scheduledFor`; Ampost stores the images and publishes at that time, opening a fresh Bluesky session if the old one expired.

Ready to publish to Bluesky via API?

Start building with Ampost today. Use one integration surface for Bluesky and the rest of your social publishing workflow.