Threads

Threads Scheduling API

Schedule Threads posts for a future time via API.

Quick answer

Meta's Threads API has no future publish time — threads_publish fires immediately. To schedule, send the normal POST /api/posts request with an ISO 8601 scheduled_at (or the literal "queue" for the next open slot); PostGate holds the post and runs the container-then-publish flow at that moment. POST /api/schedules defines recurring cron or slot cadences.

Meta's Threads Graph API has no concept of a future publish time — threads_publish fires as soon as you call it. Every "schedule a Threads post" feature you've seen, including PostGate's, is a queue sitting in front of that immediate-publish API: something holds the request and calls Threads at the right moment. This page covers how that queue works and how to use it through POST /api/posts and POST /api/schedules.

01

Why does scheduling have to be orchestrated?

Because Meta's API only publishes immediately, a scheduled Threads post genuinely does not exist on Meta's side until the moment it fires — PostGate stores the intent (body, media, target profile, timestamp) and runs the same container-then- publish flow described in how to post to Threads via API when the clock hits scheduled_at.
02

How do you schedule a single post?

Pass an ISO 8601 scheduled_at on the same POST /api/posts request you'd use for an immediate publish. The post sits in scheduled status until PostGate's scheduler fires it.
Schedule for a fixed timePostGate API
curl -X POST "https://postgate.studio/api/posts" \
  -H "Authorization: Bearer $POSTGATE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: threads-schedule-001" \
  -d '{
    "post": { "body": "Live in ten minutes." },
    "profiles": ["pro_threads_8f21"],
    "scheduled_at": "2026-09-02T14:00:00Z"
  }'
03

How do you use the next open queue slot?

Set scheduled_at to the literal string "queue" to drop the post into the next available slot defined on a recurring schedule, rather than picking an exact timestamp yourself.
04

How do you build a recurring posting cadence?

POST /api/schedules takes the same post/profiles/media template and a cadence — either a cron expression or comma-separated daily slots like 09:00, 13:30, 18:00 in an IANA timezone. Every materialized post from that template goes through the identical Threads publish flow, including the 500-byte text limit and JPEG-only image handling.
Recurring weekday slotPostGate API
curl -X POST "https://postgate.studio/api/schedules" \
  -H "Authorization: Bearer $POSTGATE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Threads weekday update",
    "kind": "slots",
    "expression": "09:00",
    "timezone": "America/Sao_Paulo",
    "template": {
      "post": { "body": "Good morning." },
      "profiles": ["pro_threads_8f21"],
      "media": []
    }
  }'
05

Can you change or cancel before it fires?

A scheduled post can still be updated with PATCH /api/posts/{id} or canceled with DELETE /api/posts/{id}. Once PostGate's scheduler has already handed it to Threads, the post moves to processing and neither operation applies anymore.
06

Does the daily quota count scheduled posts?

Meta's 250-posts-per-24-hours cap is enforced when the post actually publishes, not when it's scheduled. Stacking many scheduled Threads posts into the same rolling window can still hit the limit — see Threads API rate limits for how PostGate reports that as a retry-scheduled target instead of a hard failure.

Frequently asked questions

Why doesn't the Threads API schedule posts natively?

Meta's Threads Graph API has no concept of a future publish time — threads_publish fires as soon as you call it. Every schedule-a-Threads-post feature is a queue sitting in front of that immediate-publish API: PostGate stores the intent (body, media, target profile, timestamp) and runs the container-then-publish flow when the clock hits scheduled_at.

Can I change or cancel a scheduled Threads post?

While the post is still in scheduled status, update it with PATCH /api/posts/{id} or cancel it with DELETE /api/posts/{id}. Once PostGate's scheduler has already handed it to Threads, the post moves to processing and neither operation applies anymore.

How do I set up a recurring Threads posting schedule?

POST /api/schedules takes the same post/profiles/media template and a cadence — either a cron expression or comma-separated daily slots like 09:00, 13:30, 18:00 in an IANA timezone. Every materialized post from that template goes through the identical Threads publish flow, including the 500-byte text limit and JPEG-only image handling.

Do scheduled posts count against the Threads daily quota?

Yes — Meta's 250-posts-per-24-hours cap is enforced when the post actually publishes, not when it is scheduled. Stacking many scheduled Threads posts into the same rolling window can still hit the limit, which PostGate reports as a retry-scheduled target instead of a hard failure.

Build it with PostGate

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

Start building Read the docs