Bluesky API

Bluesky posting API for social media agents, no ATProto records

Blotato's Bluesky posting API publishes a post or a thread from plain text and media URLs. You never build an AT Protocol record.

Bluesky's own API is open and free. Its record-and-facet post model is not shaped like the other eight platforms, and that is the gap this page closes.

REST
POST https://backend.blotato.com/v2/posts
Auth
blotato-api-key: YOUR_API_KEY
MCP
https://mcp.blotato.com/mcp

Updated September 2026. API access is included on every paid plan and excluded from the free trial.

What the Bluesky posting API does in Blotato

POST /v2/posts with targetType bluesky needs no extra target fields. 300 characters per post, up to 4 images, or 1 video whose URL ends in .mp4, .webm, or .mov, since Blotato recognizes video by the extension. Threads go in content.additionalPosts. Analytics come back through GET /analytics, as on the other analytics platforms.

Threads in one request

The first post is content.text. Each additionalPosts entry is the next reply, chained for you.

Four images or one video

Recommended image sizes are 1080 by 1080, 1200 by 627, or 627 by 1200. One video per post in MP4, WebM, or MOV.

Post analytics

GET /analytics ranks your Bluesky posts by views, reach, likes, or comments. GET /posts/:id/analytics returns one post over time.

Scheduling into the calendar

scheduledTime queues the post. useNextFreeSlot takes the next open Bluesky slot in your calendar.

Where Bluesky's post model differs, and why you will not notice

Bluesky runs on AT Protocol. A post is a record in your repository, links and mentions are facets you would normally construct by byte offset, and images are embeds. Through Blotato you send text and media URLs in the same envelope you use for X and Threads, and the record is built on our side.

POST https://backend.blotato.com/v2/posts
{
  "post": {
    "accountId": "98432",
    "content": {
      "text": "Shipped: our agent now polls post status instead of trusting the 200.",
      "mediaUrls": ["https://cdn.example.com/status-log.png"],
      "platform": "bluesky",
      "additionalPosts": [
        { "text": "Write-up on what that caught in week one.", "mediaUrls": [] }
      ]
    },
    "target": { "targetType": "bluesky" }
  }
}

Response: { "postSubmissionId": "uuid" }, a receipt. Poll GET /posts/:postSubmissionId for published or failed. Every field: help.blotato.com/api/llm. Bluesky's own reference: the Bluesky API docs.

Why Bluesky builders use Blotato when the AT Protocol API is free

  • Free is not the cost. A ninth post shape is. For a Bluesky-only integration the flat price buys little, and it is fair to say so. The trade shows up at the second platform, when every network has its own auth, its own upload, and its own record format.
  • One session, held for you. You connect Bluesky through the login flow once. Blotato holds the session and the media upload, so an agent never manages a Bluesky credential.
  • The thread envelope is shared with X and Threads. The same additionalPosts array publishes on all three. Change targetType and post the same thread three times.

Bluesky, first request to published

  1. Connect Bluesky. Sign in to Blotato and connect the Bluesky account.
  2. Generate an API key. Generate the key from the API tab in Settings. The trial excludes the API, so the key starts the paid Starter plan right away.
  3. Fetch the accountId. GET /users/me/accounts?platform=bluesky.
  4. POST and poll. Send the request above and poll GET /posts/:postSubmissionId until it reads published. If a video URL lacks an .mp4, .webm, or .mov extension, Blotato will not treat it as video, so fix the URL before you post.

From an agent instead of code, the Bluesky tools are on the MCP server at https://mcp.blotato.com/mcp. Setup per client is on the Bluesky MCP server page, and the walkthrough of posting to Bluesky from Claude shows the prompt-to-post flow. A prompt like "Post this to Bluesky with the screenshot attached, then add a reply linking the write-up." calls the same endpoint this page documents.

See every plan and its limits

Bluesky posting limits and price

Blotato publishes no Bluesky-specific daily cap in its posting limits, so Bluesky's own rate limits are the ceiling.

Bluesky limitValue through Blotato
Blotato daily capnone; Bluesky's limits apply
Text300 characters
Imagesup to 4; 1080 by 1080, 1200 by 627 or 627 by 1200 recommended
Video1 per post, MP4, WebM or MOV; the URL must end in the extension

Bluesky charges nothing for its API. What it does cost to run a Bluesky integration yourself, rate limits included, is the subject of the Bluesky API pricing guide.

On Bluesky, this API covers publishing, scheduling and analytics. Comments, DMs and DM automation are Instagram and Facebook only. Caps are listed at help.blotato.com/settings/social-accounts.

MCP tools that reach Bluesky

The tool names an agent calls on the MCP server for this platform, verbatim from the server's tool list. The REST endpoint behind each one is in the API reference.

  • blotato_list_accounts
  • blotato_create_post
  • blotato_get_post_status
  • blotato_list_posts
  • blotato_list_schedules
  • blotato_get_schedule
  • blotato_update_schedule
  • blotato_delete_schedule
  • blotato_create_presigned_upload_url
  • blotato_list_top_posts
  • blotato_get_post_analytics
FAQ

Bluesky posting API FAQs

01 Is there a Bluesky API for posting?
Two kinds. Bluesky's own AT Protocol API, which is free and open, and unified APIs like Blotato's that publish to Bluesky and eight other platforms from one request. Blotato takes targetType bluesky, text, and media URLs, and builds the AT Protocol record itself.
02 Do I need to build AT Protocol records to post to Bluesky through Blotato?
No. You send content.text and content.mediaUrls in the same envelope used for X and Threads. Facets and embeds are constructed on the Blotato side.
03 Can I post a thread to Bluesky in one API call?
Yes. Put the first post in content.text and the rest in content.additionalPosts. Blotato posts them as a reply chain.
04 Why pay for an API when Bluesky's is free?
For a Bluesky-only integration the price buys little. It buys one envelope, one key, and one bill across nine platforms, plus analytics and scheduling. The API is included on every paid plan from $29/mo, and the free trial does not include it.

Same key, eight more platforms

Bluesky is one targetType on the same endpoint. The social media API page has the comparison table of every platform's required fields and caps.