Skip to main content
Before you start. Threads uses Meta’s Threads Graph API with a separate OAuth at threads.net — distinct from Facebook Login. Connecting Threads does not connect Facebook or Instagram, and vice versa.

Quick reference

Connect an account

OAuth 2.0 against threads.net. Start at POST /v1/accounts/connect/threads, send the user through the redirect, and the callback completes the handshake.

Scopes

The publisher uses neither replies scope — Threads supports replying via replyToId on the request body, which is a write and needs no extra scope.

Token lifecycle

Threads issues long-lived tokens (~60 days, refreshable after the first 24 h). The publisher refreshes ahead of expiry; subscribe to token.expiring to know when a user-prompt re-auth is on the horizon.

Post types

Text post

text.json

Single image

single-image.json

Single video

single-video.json
Threads accepts 2 – 20 items per carousel, and unlike most platforms it allows mixed image + video in a single carousel.
carousel.json

Reply

Replies to an existing thread under the same account.
reply.json

Wisdom (platform-specific things that bite)

  • Threads is a two-step container API: create-container → poll until FINISHED → publish. The publisher hides this entirely; one POST /v1/posts blocks until the publish lands. Image containers usually FINISH inside 1 – 2 s; video can take a minute.
  • Containers expire after 24 hours without a publish. If a scheduled post’s container ages out, the dispatcher creates a fresh one — see threads.container.expired.
  • Carousels allow mixed image + video — this is the only platform in letmepost where that’s true.
  • Threads has no first-comment surface; what looks like “first comment” on the app is just another reply you’d post via threads.replyToId.
  • A 700-char caption on an image post is rejected upstream with the same 500-grapheme rule as text-only — preflight catches it locally before any container is created.
  • The publish response carries the post id but not a permalink; the publisher follows up with GET /{thread-id}?fields=permalink best-effort, and falls back to the id if Threads returns nothing.

Common errors

What you can’t do (yet)

  • First comment (Threads has no comment-as-author surface distinct from a reply).
  • Quote posts, polls, edits.
  • Reading replies / engagement (would require threads_read_replies + the inbox feature, neither in v1).
  • DMs — Threads has no DM API.
  • Cross-posting fan-out to Instagram in a single call; Threads and Instagram are separate connects.

API reference