Bluesky Settings

API metadata for publishing text, media, and threads to Bluesky via Social0.

Overview

Platform enum: bluesky

Supported post types:

TypeMediaNotes
TextSingle skeet (~3,000 chars)
Image1+ imagesWith caption
Video1 videoWith caption
ThreadPer-part text/mediaVia metadata.twitterThread.parts

Bluesky uses bring-your-own-key (BYOK) — you provide an app password when connecting in the dashboard. Social0 stores credentials for publish; the REST API does not accept app passwords in post bodies.

See Bluesky (product).


Settings / metadata schema

Bluesky posts are mostly caption + media only. Thread metadata is optional.

FieldLocationRequiredTypeDescription
contentbodyYes*stringPost text (max ~3,000 chars)
platformsbodyYesUUID[]Bluesky account UUID
mediabodyNoUUID[]Image or video media IDs
metadata.twitterThread.partsmetadataNoarrayMulti-part thread
metadata.accountCaptions.<uuid>metadataNostringPer-account caption

* Text-only posts supported.

Thread part shape: same as X / Twitter{ text, mediaIds[] } per part.


Complete example

Single post:

curl -X POST https://api.social0.app/v1/posts/publish \
  -H "Authorization: Bearer sk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "content": "Publishing to Bluesky through the Social0 API — same pipeline as the dashboard.",
    "platforms": ["550e8400-e29b-41d4-a716-446655440000"]
  }'

Thread:

{
  "content": "Thread fallback",
  "platforms": ["550e8400-e29b-41d4-a716-446655440000"],
  "metadata": {
    "twitterThread": {
      "parts": [
        { "text": "1/3 — Bluesky threads use metadata.twitterThread.parts.", "mediaIds": [] },
        { "text": "2/3 — Each part replies to the previous.", "mediaIds": [] },
        { "text": "3/3 — Up to ~3000 chars per part.", "mediaIds": [] }
      ]
    }
  }
}

Response 202:

{
  "post_id": "uuid",
  "tracking_id": "uuid",
  "status": "queued",
  "stream_url": "/v1/jobs/{tracking_id}/stream"
}

Quirks

  • App password at connect: Generate an app password in the Bluesky app → connect in Social0 dashboard. Cannot pass credentials via /v1/posts/publish.
  • 3,000 char limit: Much higher than Threads; suitable for long-form single posts.
  • Threads: Use metadata.twitterThread.parts — Bluesky publisher chains replies automatically.
  • No legacy --- split: Use structured parts only.
  • Rate limits: Bluesky enforces posting limits; repeated failures may require waiting or reconnecting.