Skip to main content
Bluesky is the only platform that connects via handle + app password instead of OAuth redirect. Supports text, image, carousel, and video posts.

Connect

No browser redirect — send credentials directly:
curl -X POST "https://backend.postsiva.com/unified/oauth/url" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: psk_live_YOUR_KEY" \
  -d '{
    "platform": ["bluesky"],
    "handle": "yourname.bsky.social",
    "app_password": "xxxx-xxxx-xxxx-xxxx"
  }'
FieldDescription
handleYour Bluesky handle (e.g. alice.bsky.social)
app_passwordApp password from Bluesky Settings → App Passwords
Response has auth_url: null — connection completes immediately.
Use an app password, not your main account password. Revoke unused app passwords in Bluesky settings.

Platform slug

Use bluesky in platforms arrays and API filters:
{ "platforms": ["bluesky"] }
Some older examples and video test payloads use the alias blue_sky. Prefer bluesky — it is the canonical slug in posting, OAuth, and unified posts. If a legacy integration sends blue_sky, normalize to bluesky before calling the API.

Post types

TypeEndpointMedia requirement
TextPOST /unified/post/text
ImagePOST /unified/post/imagedefault_image_id required (URL not supported)
CarouselPOST /unified/post/carouselimage_ids
VideoPOST /unified/post/videovideo_id required (URL not supported)

Text post

curl -X POST "https://backend.postsiva.com/unified/post/text" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: psk_live_YOUR_KEY" \
  -d '{
    "platforms": ["bluesky"],
    "default_text": "Hello from the Postsiva API on Bluesky!"
  }'

Character limit

Bluesky posts are capped at 300 characters:
{
  "detail": "Max text character limit for bluesky is 300. Received 350 characters in default_text."
}
See Character limits.

Image and video

Provide default_image_id or default_image_url for images; video_id or video_url for video. Postsiva auto-uploads HTTPS URLs when needed:
curl -X POST "https://backend.postsiva.com/unified/post/image" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: psk_live_YOUR_KEY" \
  -d '{
    "platforms": ["bluesky"],
    "default_text": "Photo post on Bluesky.",
    "default_image_url": "https://cdn.example.com/photo.jpg"
  }'
Or upload first via POST /media/upload and pass default_image_id / video_id.

Multi-platform with short-form networks

{
  "platforms": ["bluesky", "threads"],
  "default_text": "Shared short update.",
  "threads": {
    "threads_text": "Same message on Threads (500 char limit)."
  }
}
Bluesky enforces 300 chars; Threads text posts allow 500.

Disconnect

curl -X DELETE "https://backend.postsiva.com/unified/oauth/token?platform=bluesky" \
  -H "X-API-Key: psk_live_YOUR_KEY"

Common errors

ErrorCauseFix
NOT_CONNECTEDBluesky not linkedConnect with handle + app password
Missing credentialsNo handle or app_password on connectProvide both fields
422 text limitOver 300 charactersShorten post
Media errorInvalid or unreachable URLUse HTTPS URL or upload via /media/upload first