Post to Bluesky from one API.
Publish to Bluesky from your app with one REST call, or let your AI agent do it over MCP. SocialHelper checks every post against Bluesky’s limits before it goes out.
What you can post
Bluesky limits.
These are the limits the API enforces for Bluesky, read straight from the code. Every post is checked against them before anything is sent.
- Text
- 300 characters as people see them (an emoji counts once) · at most 3,000 bytes
- Images
- Up to 4 per post · JPEG, PNG, WEBP · 1.9 MB each
- Video
- Not supported
Post with one request
Your first Bluesky post.
Send the text and the account ID. Add an Idempotency-Key so a retried request never posts twice. The response lists each account with its own status and, once it’s live, the post’s URL.
curl https://socialhelper.app/api/v1/posts \
-H "Authorization: Bearer $SOCIALHELPER_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"text": "We just shipped dark mode. Try it tonight 🌙",
"accounts": [
"ACCOUNT_ID"
]
}'
const response = await fetch("https://socialhelper.app/api/v1/posts", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SOCIALHELPER_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
"text": "We just shipped dark mode. Try it tonight 🌙",
"accounts": [
"ACCOUNT_ID"
]
}),
});
const { data: post } = await response.json();
console.log(post.status, post.targets);
import os, uuid, requests
response = requests.post(
"https://socialhelper.app/api/v1/posts",
headers={
"Authorization": f"Bearer {os.environ['SOCIALHELPER_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"text": "We just shipped dark mode. Try it tonight 🌙",
"accounts": ["ACCOUNT_ID"],
},
)
post = response.json()["data"]
print(post["status"], post["targets"])
Connect
Connect Bluesky once.
Open Accounts in the SocialHelper dashboard and choose Bluesky. The connect form asks for the details below, and explains where to find each one.
- Handle or email
- Your Bluesky handle, or the email you sign in with.
- App password
- Create one in Bluesky under Settings → Privacy and security → App passwords. Do not use your account password.
SocialHelper calls Bluesky’s official API for you. Bluesky API reference ↗
FAQ
Bluesky questions.
How long can a Bluesky post be?
300, counted the way Bluesky counts it. SocialHelper checks the length before posting, and if it doesn’t fit nothing is sent.
Can I post images or video to Bluesky?
Up to 4 images per post. Video isn’t supported.
Do I need my own Bluesky developer app?
No. You paste these from your own Bluesky account into the connect form: handle or email, app password.
Can my AI agent use Bluesky?
Yes. Connect the SocialHelper MCP server at https://socialhelper.app/mcp and your agent can post to Bluesky, after confirming the text with you.
How much does it cost?
SocialHelper is free during early access, Bluesky included.
More platforms
Same key, every account.
Share posts from your LinkedIn profile.
posts
Mastodon
Post to your account on any Mastodon server.
posts
Telegram
Post to channels and groups through your bot.
posts
Discord
Post to a server channel through a webhook.
posts
Post to your Facebook Pages.
posts 3 tools
Publish photos and reels to Instagram.
posts 3 tools
Google Search Console
Clicks, queries, indexing and sitemaps.
4 tools
Google Analytics
GA4 traffic, conversions and realtime reports.
4 tools
Ship your Bluesky integration today.
Create a free account, connect an account and send your first post in a few minutes.