One API Call to Post on Bluesky

The AT Protocol API uses a decentralized identity model with DIDs, record-based content creation, and blob uploads for media. RelayAPI handles OAuth, rate limits, media hosting, and API changes.

No credit card required · Free plan available

POST /v1/posts
const res = await fetch("https:">//api.relayapi.dev/v1/posts", {
  method: "POST",
  headers: {
    Authorization: "Bearer rlay_live_xxxx",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    content: "Check out our latest update!",
    platforms: ["bluesky"],
    media: ["https:">//cdn.example.com/image.jpg"],
  }),
});

AT Protocol (Bluesky API)

  • The AT Protocol uses decentralized identifiers (DIDs) and handle resolution that differ from traditional REST APIs
  • Content creation requires constructing lexicon-based records with facets for links, mentions, and hashtags
  • Media uploads use a blob upload endpoint with CID-based references that must be resolved before posting
  • Video uploads require PDS DID resolution and separate service authentication for the video processing endpoint
  • Rich text parsing requires manual byte-offset calculation for facets (links, mentions, tags) with UTF-8 grapheme counting

RelayAPI

  • RelayAPI abstracts DID resolution and handle management -- just pass a username and we handle identity
  • Post with plain text and RelayAPI automatically detects and creates facets for links, mentions, and hashtags
  • Upload media to RelayAPI and we handle blob uploads, CID resolution, and record embedding automatically
  • Video uploads work with a single API call -- we manage PDS DID resolution, service auth, and processing
  • Automatic rich text parsing with correct UTF-8 byte offset calculation for all facet types
Save 3+ hours of development time

Supported content types

Text PostsImagesVideosLinksQuote PostsThreads

How it works

1

Connect your account

Authorize your Bluesky account via OAuth in about 30 seconds.

2

Build your integration

Use the REST API or our SDKs to publish content from your stack.

3

We handle the rest

RelayAPI manages publishing, rate limits, and delivery notifications.

Ship Faster

Post to Bluesky with a single API call. No DID resolution, no facet construction, no blob CID management. Send your text and media, we create the AT Protocol records.

Official API, Zero Hassle

RelayAPI uses the official AT Protocol API. Your posts appear natively in Bluesky feeds with full engagement features, while we handle decentralized identity and record management.

Rich Text Without Byte Counting

AT Protocol requires precise UTF-8 byte offsets for every link, mention, and hashtag. RelayAPI parses your text automatically and generates correct facets, including proper grapheme counting for international text.

Frequently asked questions

Do I need an app password to connect my Bluesky account?

You can connect via app password or OAuth. RelayAPI supports both authentication methods. App passwords can be generated in your Bluesky account settings and provide scoped API access.

What content types can I publish to Bluesky through RelayAPI?

RelayAPI supports text posts (up to 300 characters with automatic grapheme counting), images (up to 4 per post), videos, link cards with previews, quote posts, and threaded replies.

How does RelayAPI handle Bluesky's rich text facets?

AT Protocol requires byte-level offsets for links, mentions, and hashtags. RelayAPI automatically parses your text, detects rich text elements, resolves mention handles to DIDs, and constructs facets with correct UTF-8 byte positions.

Can I post to custom Bluesky PDS instances?

Yes. RelayAPI supports posting to any AT Protocol PDS, not just bsky.social. Specify your PDS endpoint when connecting your account and we handle DID resolution for your instance.

Start building with Bluesky.

Join developers who chose RelayAPI over wiring up AT Protocol (Bluesky API) by hand.