Scheduling APIAPI

Schedule a post with one field

Send the same body you would publish now, add a scheduleAt timestamp, and FoPost holds it in the queue until then. Everything stays editable until the moment it goes out, and delivery is reported per account.

POST /v1/posts
curl -X POST https://api.fopost.com/v1/posts \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "workspaceId": "9b2f6c1e-...",
    "status": "scheduled",
    "scheduleAt": "2026-09-01T09:00:00Z",
    "content": [{ "text": "Webhook retries are live. Read the changelog.", "position": 0 }],
    "accounts": [{ "id": "4a71d80b-..." }, { "id": "c30e9f12-..." }]
  }'

One timestamp

Any ISO 8601 time in the future. The queue picks it up and publishes on schedule.

Editable until sent

PATCH the text, media, accounts, or time on anything still in the queue.

Delivery per account

Once it goes out, each account reports its own status and permalink.

Queue

Plan a week of posts in one script

Loop over your content, pick a time for each item, and create the posts. The queue runs in FoPost, so your own process can exit as soon as the request returns. List scheduled posts any time to see what is coming up.

Read the posts reference
GET /v1/posts?status=scheduled
curl "https://api.fopost.com/v1/posts?workspaceId=9b2f6c1e-...&status=scheduled" \
  -H "X-API-Key: $API_KEY"

{
  "data": [
    { "id": "post_01j8...", "status": "scheduled", "scheduleAt": "2026-09-01T09:00:00Z", "accounts": 2 },
    { "id": "post_01j9...", "status": "scheduled", "scheduleAt": "2026-09-02T09:00:00Z", "accounts": 3 }
  ]
}

Filter by status

List drafts, scheduled, published, or failed posts with one query parameter.

Labels

Tag each post by campaign and filter the queue by label.

Per workspace

A key sees one workspace, so one client’s queue never mixes with another.

Adjust

Move, rewrite, or cancel before it goes out

Plans change. PATCH a scheduled post to change its time, text, media, or target accounts. Cancel it and it is marked cancelled and never delivered, or delete it outright. Nothing is locked until the queue picks it up.

See the PATCH endpoint
PATCH /v1/posts/:id
curl -X PATCH https://api.fopost.com/v1/posts/post_01j8... \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "scheduleAt": "2026-09-01T14:00:00Z" }'

Reschedule

Change scheduleAt and the queue moves the post to the new time.

Swap content

Replace the content array or the media ids on a post in the queue.

Cancel or delete

Pull a post from the queue without touching anything else in it.

Confirm

Know when it landed, without polling

When the scheduled time arrives, the post fans out into one delivery per account. Register a webhook and post.published or post.failed fires for each one, or poll the deliveries endpoint if you prefer a pull model.

Start building
A month of scheduled posts on the publishing calendar

Webhook on settle

post.published and post.failed carry the post id, account, and permalink.

Retries

Transient network errors retry with backoff before a failure is reported.

Analytics after

Once live, the same post id reads back impressions and engagement from the Analytics API.

Scheduling API questions, answered

How far ahead can I schedule?

As far as you like. Any future ISO 8601 timestamp is accepted, and the queue holds the post until then.

What timezone does scheduleAt use?

Send an ISO 8601 timestamp with an offset or in UTC. The value you send is the value that runs; no conversion happens on the server.

Can I edit a post after scheduling it?

Yes. PATCH any field, including the time, on a post that has not gone out yet. Once it is published, edits apply to the record, and you use delete to remove it from a network.

What happens if my server is down at publish time?

Nothing changes. The queue runs inside FoPost, not on your infrastructure, so the post goes out whether or not your process is running.

Can I schedule to a subset of accounts?

Yes. The accounts array is the target list. Include only the accounts that should get the post, and each gets its own delivery record.

Is there a rate limit?

Yes, 100 requests per minute per key. Scheduling a week of posts in one script fits comfortably inside it.

Build on the Scheduling API today

Starting is free and the full API is included. Create a key and make your first call in minutes.

Get your API key