Works with all AI agents

Connect your AI agent

Choose your AI agent and connect in seconds.

Add to Claude

Works on every Claude plan, including free. Full Claude guide

  1. 1

    Add to Claude

    One click from Claude’s connector directory.

  2. 2

    Sign up or sign in

    Takes seconds, then you’re sent straight back.

  3. 3

    Ask Claude

    “Plan and schedule my posts for next week.”

PostEverywhere Bluesky API Guide

PostEverywhere API reference for Bluesky: request fields, media rules and examples for text posts, images, video and threads.

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

Connect your Bluesky account to PostEverywhere

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.

What you can post to Bluesky

Content Type Media Required Description
Text post None Plain text post, up to 300 characters. A text post with a link gets a link card.
Image post Image(s) Post with up to 4 attached images.
Video post Video (MP4) Post with a single video attachment.
Thread None / media A 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. URLs become clickable link facets. A text post (no images or video) that contains a link also gets a link card for the first link, built from the page's title, description and image. If the card cannot be built, the post goes out without it.

Bluesky-specific options in the API

Set these in platform_content.bluesky.settings:

Setting Type Default Description
replyControl string "everybody" Who can reply: "everybody", "following", "mentioned" or "nobody". If Bluesky does not apply it, the post still goes out and carries a bluesky_reply_control_not_applied warning, shown on the post and in the warnings array of GET /v1/posts/:id/results.

Bluesky limits: characters, media and video

Requirement Limit
Post text length 300 characters (Unicode grapheme-aware). Longer is refused with 400 content_too_long.
Images per post Up to 4
Image formats JPEG, PNG, WebP (GIF and HEIC are accepted but re-encoded as a static JPEG)
Image handling Automatically recompressed to ≤ 2 MB per image if needed
Video format MP4 (H.264)
Video max file size 100 MB
Video duration Up to 3 minutes
Links Auto-detected and made clickable; a text post with a link gets a link card for the first link
Mentions / hashtags Auto-detected from @handle / #tag in text
Thread length Up to 25 parts in thread_posts, after content

Publish to Bluesky: a working request

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. content is the first post, and each string in thread_posts becomes a reply to the one before it. You can add up to 25 parts, each up to 300 characters; a part that is too long is rejected with 400 invalid_thread_posts before anything is posted. Attached media goes on the first post only:

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 every social platform by hand does not scale.",
      "2/ One API call fans out to all of them, with per-platform overrides.",
      "3/ Bluesky is one of them. Try it: https://posteverywhere.ai"
    ]
  }'

Getting better results on Bluesky

  • 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. Link, @mention and #hashtag facets are generated automatically from the raw text: paste the URL or handle directly.
  • Images are recompressed for you. Each uploaded image blob is capped at 2 MB; PostEverywhere downsizes large images automatically so you can send full-resolution files.

Common questions about posting to Bluesky

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 or WebP; GIFs are converted to a static JPEG) 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 automatically. Links are clickable, and on a text post without images or video the first link also gets a link card.

Can I edit a Bluesky post after it's published?

No. The AT Protocol does not expose a post-edit operation: Bluesky's official model is delete-and-repost. PATCH /v1/posts/:id only accepts posts in scheduled or draft status. To change a published Bluesky post, delete it (in the Bluesky app or via repository tooling) and recreate it from PostEverywhere.

Other platforms you can publish to

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

Related: Bluesky media requirements · connecting a Bluesky account · testing posts safely · how to post to Bluesky programmatically · the PostEverywhere social media API · the Discord guide