Skip to main content

Bluesky API Guide

Publish text posts, image posts, video posts, and threads to Bluesky (the AT Protocol network). PostEverywhere handles the AT Protocol session, rich-text facets, link cards, and media attachments through a single call. For a general overview of all supported platforms, see the Introduction.

Connecting a Bluesky Account

Bluesky uses an app password, not OAuth. In your PostEverywhere dashboard, go to Accounts → Connect Bluesky and enter:

Use an app password — never your main account password. You can revoke it from Bluesky at any time without affecting your login.

Supported Content Types

Content TypeMedia RequiredDescription
Text postNonePlain text post, up to 300 characters.
Image postImage(s)Post with up to 4 attached images.
Video postVideo (MP4)Post with a single video attachment.
ThreadNone / mediaA chain of connected posts (each up to 300 characters).

Bluesky is short-form: posts are capped at 300 characters. Links, @mentions, and #hashtags in your text are detected automatically and turned into rich-text facets — you don't need to format them. When your text contains a URL, Bluesky renders an external link preview card automatically.

Requirements & Limits

RequirementLimit
Post text length300 characters (Unicode grapheme-aware)
Images per postUp to 4
Image formatsJPEG, PNG, WebP, GIF
Image handlingAutomatically recompressed to ≤ 1 MB per image if needed
Video formatMP4 (H.264)
Video max file size100 MB
Video durationUp to 3 minutes
LinksAuto-detected; rendered as a preview card
Mentions / hashtagsAuto-detected from @handle / #tag in text

Example: Create a Post

Schedule a Bluesky Text Post

curl -X POST https://app.posteverywhere.ai/api/v1/posts \
-H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Cross-posting from PostEverywhere — links like https://posteverywhere.ai and #hashtags are detected automatically.",
"account_ids": [2295],
"scheduled_for": "2026-06-01T12:00:00Z",
"timezone": "UTC"
}'

Schedule a Bluesky Post with Images

Upload your images first (see Upload Media), then attach the returned IDs:

curl -X POST https://app.posteverywhere.ai/api/v1/posts \
-H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Four shots from launch day 🦋",
"account_ids": [2295],
"media_ids": [
"11111111-1111-1111-1111-111111111111",
"22222222-2222-2222-2222-222222222222",
"33333333-3333-3333-3333-333333333333",
"44444444-4444-4444-4444-444444444444"
]
}'

Post a Thread

Use thread_posts to publish a connected chain. Each entry becomes a reply to the one before it:

curl -X POST https://app.posteverywhere.ai/api/v1/posts \
-H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "A short thread on why we built a unified posting API 🧵",
"account_ids": [2295],
"thread_posts": [
"1/ Managing 9 platforms by hand does not scale.",
"2/ One API call fans out to all of them, with per-platform overrides.",
"3/ Bluesky was the latest to join. Try it: https://posteverywhere.ai"
]
}'

Tips

  • Keep it under 300 characters. Bluesky counts by Unicode grapheme, so emoji and combined characters count as one. If you need more room, use a thread.
  • Don't pre-shorten links or build markdown. Bluesky link cards and @mention / #hashtag facets are generated automatically from the raw text — paste the URL or handle directly.
  • Images are recompressed for you. Bluesky caps each uploaded blob at ~1 MB; PostEverywhere downsizes large images automatically so you can send full-resolution files.

Frequently Asked Questions

How do I connect a Bluesky account?

Bluesky uses an app password rather than OAuth. Create one at bsky.app → Settings → App Passwords, then add your handle and that app password under Accounts → Connect Bluesky in the PostEverywhere dashboard.

What is the character limit for Bluesky posts?

300 characters, counted by Unicode grapheme. Emoji and combined characters count as a single character. For longer content, split it across a thread using thread_posts.

Can I attach images or video to a Bluesky post?

Yes. Upload your media and pass the returned UUIDs in media_ids. Bluesky supports up to 4 images (JPEG, PNG, WebP, GIF) or a single MP4 video up to 100 MB and 3 minutes. Large images are automatically recompressed to fit Bluesky's per-blob size limit.

No. Include the raw URL, @handle, or #hashtag in your content and PostEverywhere generates the correct AT Protocol rich-text facets and link preview card automatically.

  • X (Twitter) — similar short-form text and threading model
  • Threads — short-form conversational posts by Meta
  • LinkedIn — longer-form posts with PDF/document support

Further Reading