Threads

How to Post to Threads via API

The request flow for publishing to Threads programmatically.

Quick answer

To post to Threads via API, connect the profile once through Meta’s OAuth consent screen, then call POST /api/posts with the body and the Threads profile ID — PostGate runs Meta’s two-step container flow, retries, and quota tracking underneath. Text is capped at 500 UTF-8 bytes, and Meta limits each profile to 250 published posts per rolling 24 hours.

Posting to Threads through Meta's own API means building a two-step container flow, polling for processing, tracking a 250-post daily quota per profile, and handling app review before real users can publish. This walks through the same outcome using PostGate: connect once, then publish with one request while PostGate handles the container flow, retries, and quota tracking underneath.

01

1. Connect a Threads profile

Threads uses the same connection model as Instagram and Facebook — a Meta OAuth consent screen, not a separate Threads login. The customer approves permission for PostGate to publish on their behalf, and PostGate stores the result as a durable profile ID (pro_threads_...). Nothing about the request in step 2 changes if that profile later needs to reconnect — the ID stays stable.
02

2. Create the post

Call POST /api/posts with the post body and the Threads profile ID. Text posts are capped at 500 UTF-8 bytes — count emojis and non-ASCII characters accordingly, since Meta counts bytes, not characters.
Publish nowPostGate API
curl -X POST "https://postgate.studio/api/posts" \
  -H "Authorization: Bearer $POSTGATE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: threads-post-001" \
  -d '{
    "post": { "body": "New feature just went out. Details in the next reply." },
    "profiles": ["pro_threads_8f21"]
  }'
03

3. Attach an image or video (optional)

Add a media array with a public URL or a pre-uploaded media ID. A single Threads post takes one image (JPEG, up to 8 MB) or one video (up to 1 GB, 5 minutes). For more than one item, use a carousel instead — Threads carousels take 2 to 20 items and count as a single post against the daily quota. Large or reused assets should go through the media endpoint first so validation happens before publish time, not during it.
04

4. Choose when it goes out

With no timing field, delivery starts immediately. Set draft: true to hold it for approval, or an ISO 8601 scheduled_at to fire at a fixed instant — Meta's Threads API itself has no native scheduling, so this is PostGate's own scheduler holding the request and firing the same publish call at the right time. See Threads scheduling for recurring queues.
05

5. Confirm delivery, don’t assume it

The 201 response from step 2 means PostGate accepted the request, not that Threads published it. Read GET /api/posts/{id} for the target's status and permalink, or subscribe to the terminal webhook instead of polling. A failed target carries a structured error you can act on; an awaiting_reconnect target means the customer needs to re-approve the connection.
06

6. Design around Meta’s rate limit

Threads profiles are capped at 250 published posts per rolling 24 hours by Meta, tracked per connected profile rather than per app. See Threads API rate limits for how that quota behaves and how PostGate surfaces a limited target instead of a raw 429.

Frequently asked questions

What is the Threads text length limit for API posts?

Text posts are capped at 500 UTF-8 bytes. Meta counts bytes, not characters — so emojis and non-ASCII characters count for more than one and should be budgeted accordingly.

How many posts per day does the Threads API allow?

Meta caps Threads profiles at 250 published posts per rolling 24 hours, tracked per connected profile rather than per app. A carousel of 2 to 20 items counts as a single post against that quota, and PostGate surfaces a limited target instead of a raw 429 when it is hit.

Can I schedule a Threads post via API?

Meta’s Threads API itself has no native scheduling. Through PostGate, add an ISO 8601 scheduled_at to fire at a fixed instant — PostGate’s own scheduler holds the request and fires the same publish call at the right time — or set draft: true to hold the post for approval.

What media can a single Threads post include?

One image (JPEG, up to 8 MB) or one video (up to 1 GB, 5 minutes). For more than one item, use a carousel instead — Threads carousels take 2 to 20 items and count as a single post against the daily quota.

Build it with PostGate

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

Start building Read the docs