Threads Posting API
A posting API for Threads covering text, image, and video posts.
PostGate's Threads posting API is the same POST /api/posts envelope used for every platform — a post body, a profiles array, optional media. It covers text up to 500 UTF-8 bytes, one image or video, carousels of 2–20 items, and reply threading, and it collapses Meta's container-then-publish flow into one request while tracking the 250-post daily quota per profile.
"Threads posting API" usually means one of two things: Meta's own graph.threads.net Graph API, or a managed layer like PostGate that sits on top of it. This page is about the surface you actually integrate against — what a posting API for Threads needs to expose, and where PostGate's POST /api/posts differs from calling Meta directly.
Is there a Threads-specific endpoint?
POST /api/posts takes a post body, a profiles array of connected profile IDs, and an optional media array — the same envelope used for Instagram, Facebook, and every other platform. A Threads profile ID in that array is enough to route the post there.What does the Threads surface actually cover?
scheduled_at work. See Threads scheduling for that distinction.Which endpoints do you actually call?
POST /api/posts to publish, draft, or schedule. GET /api/posts/{id} and GET /api/posts/{id}/logs to read delivery state. POST /api/media when an asset is large or reused. GET /api/profiles/{id}/health to check whether the Threads connection needs re-consent before you spend a rate-limit slot on a doomed request.What does a managed layer add over calling graph.threads.net directly?
threads_publish with the container ID. PostGate collapses that into one request, retries the publish step on transient failures without duplicating the container, and tracks Meta's 250-posts-per-24-hours quota per profile so a burst from one tenant doesn't silently fail for another.Frequently asked questions
What content types does the Threads posting surface support?
Text posts up to 500 UTF-8 bytes, a single image or video, and carousels of 2–20 items. Reply threading is supported — one of the few platforms in PostGate where a post can target an existing Thread as its parent. Stories are not exposed because Threads has none.
Does the raw Threads Graph API support scheduling?
No — Meta's API only ever publishes immediately. A future scheduled_at works because PostGate's own scheduler holds the post and fires the publish flow at the right moment; nothing is scheduled on Meta's side.
What does a managed layer add over calling graph.threads.net directly?
The raw Graph API is a two-step container-then-publish flow: create a container, poll it until it is processed, then call threads_publish with the container ID. PostGate collapses that into one request, retries the publish step on transient failures without duplicating the container, and tracks Meta's 250-posts-per-24-hours quota per profile.
Which endpoints does a Threads integration actually call?
POST /api/posts to publish, draft, or schedule. GET /api/posts/{id} and GET /api/posts/{id}/logs to read delivery state. POST /api/media when an asset is large or reused. GET /api/profiles/{id}/health to check whether the Threads connection needs re-consent before you spend a rate-limit slot on a doomed request.
