The Bluesky API for posts, replies, mentions, and DMs
Post, replies, mentions, and DMs on Bluesky through one API.
- Free tier, no credit card
- Instant API key
- MCP server included
Ledge Skate & Shoe @ledge.skateOct 6
New white lows just landed. In store Saturday, all sizes.

/v1/posts201 CreatedCapabilities: What you can build on Bluesky
Every capability is one endpoint, the same one you call on every other platform.The screens show where each call lands.
Comments
Read the replies under your Bluesky posts and reply back through the same comment endpoints used on every other platform.
- GET
/v1/inbox/comments/{postId} - POST
/v1/inbox/comments/{postId}
PostLedge Skate & Shoe
@ledge.skate
New white lows just landed. In store Saturday, all sizes.

2:00 PMOct 6, 2026

Maya R. @maya.bsky.social2h
Do these come in black?
Ledge Skate & Shoe @ledge.skate1m
Yes, black with a gum sole, sizes 36 to 46.

Jin K. @jink.bsky.social5h
Skated mine all weekend, the grip is unreal.
- GET
Direct Messages
Read DM conversations and send messages through the same unified inbox you use for Instagram and Facebook messaging.
- GET
/v1/inbox/conversations - POST
/v1/inbox/conversations/{id}/messages

Lena S.
@lena.bsky.social
Wednesday at 6:42 PM
Beginners welcome at the jam?
Totally, we bring loaner boards.
Today at 9:12 AM
❤️Is Saturday's jam on if it rains?
Lena S.Is Saturday's jam on if it rains?
Moved indoors, 2pm at the warehouse.
Read
I'm inCan't make it- GET
Mentions
Fetch posts mentioning your connected handle through the same dedicated mentions endpoint used for Instagram and X.
- GET
/v1/accounts/{id}/mentions
- posts mentioning your handle
- GET
Publishing
Publish through the same POST /v1/posts call as every other platform. GET /v1/posts/validate returns what a Bluesky post accepts before you send it.
- POST
/v1/posts - GET
/v1/posts/validate
- publish
- check constraints first
- POST
Webhooks
New Bluesky interactions arrive on your single configured webhook endpoint, in the same envelope as every other platform.
Webhook events
comment.receiveddm.receivedmention.received
On every platform
Agent-ready
Every Bluesky capability is a typed tool on the SocialAPI.ai MCP server.
- social_api_validate_post
- social_api_list_post_comments
- social_api_send_dm
One API key
The key that calls Bluesky calls all 13 platforms.
Authorization: Bearer sapi_key_…Predictable errors
The same status codes everywhere, whatever the platform behind them.
- 401expired token
- 429rate limited
- 501not on this platform
Call the Bluesky API
Publish a post to Bluesky
The same POST /v1/posts endpoint you already use for every other platform. Add a Bluesky account to the targets array and nothing else in your publishing code changes.
curl -X POST https://api.social-api.ai/v1/posts \
-H "Authorization: Bearer <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"targets": [{ "account_id": "<bluesky-account-id>" }],
"text": "Shipped Bluesky support today. Same API, one more platform.",
"publish_now": true
}' | jq
# Response
{
"id": "<post-id>",
"status": "published",
"targets": [
{
"platform": "bluesky",
"account_id": "<bluesky-account-id>",
"status": "published",
"platform_post_id": "at://...",
"published_at": "2026-09-14T18:00:00Z"
}
]
}import requests
resp = requests.post(
"https://api.social-api.ai/v1/posts",
headers={"Authorization": "Bearer <your-api-key>"},
json={
"targets": [{"account_id": "<bluesky-account-id>"}],
"text": "Shipped Bluesky support today. Same API, one more platform.",
"publish_now": True,
},
)
print(resp.json()) # { "id": "...", "status": "published", ... }const res = await fetch("https://api.social-api.ai/v1/posts", {
method: "POST",
headers: {
Authorization: "Bearer <your-api-key>",
"Content-Type": "application/json",
},
body: JSON.stringify({
targets: [{ account_id: "<bluesky-account-id>" }],
text: "Shipped Bluesky support today. Same API, one more platform.",
publish_now: true,
}),
});
console.log(await res.json());In depth: How the Bluesky API works on SocialAPI.ai
Publish to Bluesky, read the replies under your posts, track mentions of your handle, and read and send DMs through the same unified API you already use for every other platform. Connect an account once with its handle and an app password, and every interaction comes back in the same schema, on the same webhook endpoint, with the same error codes.
Publishing through the endpoint you already call
Bluesky posts go out through the same POST /v1/posts request as Instagram, LinkedIn, or Threads. Add a Bluesky account to the targets array and the rest of your publishing code is untouched. Ask GET /v1/posts/validate what a Bluesky post accepts instead of hard-coding the platform's limits into your app.
Replies under your posts
Read the replies on your Bluesky posts and reply back through the same comment endpoints used across every other connected platform. A reply on Bluesky arrives in the same shape as a comment on Instagram, so your moderation and support queues need no Bluesky-specific branch.
Mentions of your handle
Fetch posts mentioning your connected handle through the same mentions endpoint used for Instagram and X. Poll it on a schedule, or let the mentions land on your webhook, and build brand monitoring or a support queue once for every platform at the same time.
Direct messages
List DM conversations, read message history, and send replies through the unified inbox endpoint, the same request and response shape you already use for Instagram and Facebook messaging. Bluesky does not need its own code path.
One schema, one webhook, one set of error codes
Posts, replies, mentions, and DMs on Bluesky come back in the same unified interaction schema as every other platform, arrive on the same single webhook endpoint in the same envelope, and fail with the same HTTP sentinels: 401 for an expired token, 429 when the platform throttles you, 501 for something a platform does not support. Bluesky is a new target for code you have already written.
Simple, honest pricing.
Reading comments, DMs, and mentions is free and unlimited on every plan. Paid plans start at $29/mo with unlimited posts and interactions. The free tier needs no credit card.
Frequently asked questions
What developers ask before they ship Bluesky.
Does Bluesky have an API?
Yes. Bluesky is built on the AT Protocol and SocialAPI.ai exposes it through the same REST API as every other platform: publish posts, read and write replies, fetch mentions of your handle, and read and send DMs with one API key.
Can I publish to Bluesky through the API?
Yes. Send a POST /v1/posts request with a Bluesky account in the targets array, exactly as you would for Instagram or LinkedIn. Call GET /v1/posts/validate first if you want to check what a Bluesky post accepts before publishing.
Can I read and reply to comments on my Bluesky posts?
Yes. Replies under your Bluesky posts are read and answered through the same comment endpoints used on every other platform, and each one comes back in the same normalized schema as a comment from Instagram or Facebook.
Can I send Bluesky DMs through the API?
Yes. List conversations and send messages through the same /v1/inbox/conversations endpoints used for Instagram and Facebook DMs. There is no separate Bluesky messaging integration to build.
How do I connect a Bluesky account?
With the handle, for example @yourname.bsky.social, and an app password generated in Bluesky settings. There is no OAuth flow: the AT Protocol does not offer one. The app password is encrypted at rest, is scoped to what you grant it, and can be revoked from Bluesky at any time.
Can AI agents post to Bluesky?
Yes. The built-in MCP server exposes publishing and inbox reads as tools, so Claude and other MCP-capable agents can draft Bluesky posts and replies inside your existing approval flow.
Every other platform, one API: Every other platform, one API
Same key, same shapes, same webhook.
Ready to unify your social interactions?
Free tier available. No credit card required. Ships with the MCP server.