Threads

Threads Posting API

A posting API for Threads covering text, image, and video posts.

Quick answer

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.

01

Is there a Threads-specific endpoint?

PostGate doesn't give Threads its own 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.
02

What does the Threads surface actually cover?

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. What isn't exposed: Stories (Threads has none) and scheduling at the raw Graph API level — Meta's API only ever publishes immediately, so PostGate's own scheduler is what makes a future scheduled_at work. See Threads scheduling for that distinction.
03

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.
04

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's 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 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.

Build it with PostGate

One API for every social platform your customers care about — sandboxed, documented, and ready today.

Start building Read the docs