Skip to main content

Quick reference

Before you start

Threads is a separate Meta product from Instagram with its own host — OAuth lives at https://www.threads.net/oauth/authorize, and the API at https://graph.threads.net. Don’t route through graph.facebook.com even though Instagram does — Threads endpoints 404 there.Threads scopes must be comma-separated in the authorize URL; Postbreeze handles this automatically.
Required scopes:
  • threads_basic — read profile.
  • threads_content_publish — publish threads.
  • threads_manage_replies + threads_read_replies — first-comment + inbox replies.
  • threads_manage_insights — analytics.
All require Meta App Review + Business Verification before public users can grant them.

Quick start

Workspace is inferred from your API key — no workspaceId argument. Use the flat shape (content + platforms) for the common case — it defaults to a text post when you skip mediaItems.
SDK
See Platform settings → Threads for the full options reference and Media uploads for mediaItems vs mediaIds.

Content types

Text-only

kind: "TEXT". Uses the auto_publish_text=true single-step flow on Threads. No media.

Single image

kind: "IMAGE" with one image attached via mediaIds (or one entry in mediaItems).

Single video

kind: "VIDEO" with one video. Up to 5 minutes, 1 GB. Threads polls processing status; Postbreeze waits ~30s before declaring success. kind: "CAROUSEL" with 2–20 media items. Threads is one of the few platforms that allows mixed image + video in a single carousel — feel free to combine.

Multi-post threads (threadParts)

Threads on Threads. Pass threadParts on platformOptions and Postbreeze publishes the root caption first, then chains each entry as a text-only reply via reply_to_id. The first thread part becomes the second post in the chain; the next part replies to that, and so on.

Constraints

  • Each part ≤ 500 characters. The root caption and every follow-up share the same Threads cap — there’s no “See more” fold to lean on.
  • Up to 25 follow-ups. threadParts.length is capped at 25; for longer chains, split into multiple posts.
  • Follow-ups are text-only. Media (images, videos, carousels) stays on the root post. Thread parts cannot carry attachments.
  • firstComment replies to the root, not the last part. If you set both threadParts and firstComment, the first comment is posted as a reply to the root post (alongside threadParts[0]), not chained at the end of the thread.
  • Thread follow-ups count toward the reply quota. Threads enforces 1,000 replies / 24h per account; a 25-part thread burns 25 of those.
See Platform settings → Threads for the full platformOptions schema.

Media requirements

Images

Videos

See Media uploads for upload strategies (URL ingest vs presigned upload).

Platform-specific fields

Threads has no other publish-time settings.

First comment

Pass firstComment on the platform entry. Postbreeze posts it as a reply to the root post using the same reply_to_id flow Threads uses for thread replies.
Limit: 500 characters (same as the main post). When combined with threadParts, the first comment still attaches to the root — not to the final thread part.

Analytics

Refresh cadence: every 14 days.
Threads splits time-series from cumulative metrics — only views and profile_views come back as daily series. Likes, replies, reposts, quotes, and followers are surfaced as the current total on the analytics page’s headline cards (not the daily chart).

Common errors

What you can’t do

  • ❌ Quote-post via API (Threads doesn’t expose this surface)
  • ❌ Reply target in compose (Postbreeze v1 only reply-to-incoming; cold-start reply is deferred)
  • ❌ Attach media to threadParts follow-ups (text-only by design — media stays on the root)
  • ❌ Schedule via Threads’ native scheduler
  • ❌ Edit a post after publish
  • ❌ Polls
  • ❌ Stories
  • ❌ Webhook subscriptions (polling-only for now in Postbreeze)

Full control: nested shape

The nested shape (caption + targets + socialAccountId + scheduledAt) is the alternative request envelope. Functionally equivalent to the flat shape — pick whichever maps cleaner to your call site.
Node.js