Skip to main content
Threads supports text, image, carousel, and video posts. One Threads account per workspace.

Connect

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": ["threads"]}'
Threads uses Meta OAuth (same ecosystem as Instagram and Facebook).

Post types

TypeEndpointText limit
TextPOST /unified/post/text500 characters
ImagePOST /unified/post/image500 chars (caption)
CarouselPOST /unified/post/carousel2,200 chars (caption)
VideoPOST /unified/post/video2,200 chars (caption)
Text posts are limited to 500 characters. Image, carousel, and video captions allow up to 2,200 characters.

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": ["threads"],
    "default_text": "Quick thought for Threads — keep it under 500 chars."
  }'

Platform override

Use threads.threads_text to override default_text when posting to multiple platforms:
{
  "platforms": ["threads", "linkedin"],
  "default_text": "Longer LinkedIn version with full context and details...",
  "threads": {
    "threads_text": "Short Threads version."
  }
}

Image posts

Provide default_image_id or default_image_url (HTTPS). Postsiva auto-uploads URLs and posts with the resolved media ID:
{
  "platforms": ["threads"],
  "default_text": "Photo caption.",
  "default_image_url": "https://cdn.example.com/photo.jpg"
}
Or upload first via POST /media/upload and pass default_image_id.

Character validation

Text posts exceeding 500 characters return 422:
{
  "detail": "Max text character limit for threads is 500. Received 520 characters in threads_text/default_text."
}
See Character limits.

Multi-platform example

{
  "platforms": ["threads", "bluesky", "linkedin"],
  "default_text": "Cross-posted update.",
  "threads": {
    "threads_text": "Threads: short take."
  },
  "linkedin": {
    "post_to_personal": true
  }
}
Each platform enforces its own limit independently.

Scheduling and drafts

{
  "platforms": ["threads"],
  "default_text": "Scheduled thread.",
  "scheduled_time": "2026-07-12T18:00:00Z"
}
See Scheduling and Drafts.

Common errors

ErrorCauseFix
NOT_CONNECTEDThreads not linkedComplete Meta OAuth
422 text limitOver 500 chars on text postShorten or use image post for longer caption
Missing mediaNo default_image_id or default_image_urlUpload via /media/upload or pass HTTPS URL