One POST to publish everywhere
Create a post once, list the accounts it should reach, and FoPost handles the formatting, media upload, and delivery for each network. Scoped keys, idempotent requests, and delivery status you can poll or receive by webhook.
curl -X POST https://api.fopost.com/v1/posts \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"workspaceId": "9b2f6c1e-...",
"status": "published",
"content": [{ "text": "Shipped a new release today.", "position": 0 }],
"accounts": [{ "id": "4a71d80b-..." }, { "id": "c30e9f12-..." }]
}'Every network, one shape
The same request body publishes to X, LinkedIn, Instagram, and every other connected account.
Scoped keys
A key with the publish scope can post and nothing else. Revoke it without touching the others.
Delivery per account
Each account reports its own status, external id, and permalink once it is live.
Write the post once, target any set of accounts
Pass the text, media, and the accounts to reach. FoPost applies each network’s limits and conventions, uploads media in the format the platform wants, and returns a post id you can track. Threads, carousels, and long-form bodies all ride on the same content array.
Read the posting reference{
"id": "post_01j8...",
"status": "published",
"deliveries": [
{ "accountId": "4a71d80b-...", "platform": "twitter", "status": "delivered", "externalUrl": "https://x.com/..." },
{ "accountId": "c30e9f12-...", "platform": "linkedin", "status": "delivered", "externalUrl": "https://linkedin.com/..." }
]
}Content blocks
Ordered blocks become a thread, a carousel, or a body depending on the network.
Media by reference
Upload once to the media library and attach by id to any number of posts.
Idempotent
Send an idempotency key and a retried request never double-posts.
Know exactly where every post landed
A post fans out into one delivery per account. Poll the deliveries endpoint or subscribe to a webhook and you get the platform status, the external id, the permalink, and the error text when a network rejects something.
See webhook events
Deliveries endpoint
GET /v1/posts/:id/deliveries lists every account with its own status.
Webhook events
post.published and post.failed fire the moment a delivery settles.
Retries built in
Transient platform errors retry with backoff before they surface as failed.
Edit, cancel, and delete from code
The full lifecycle is on the API. Update a scheduled post before it goes out, cancel it, or delete a published post from the network it landed on. Labels and workspaces keep client work separated when you run more than one brand.
Start buildingcurl -X PATCH https://api.fopost.com/v1/posts/post_01j8... \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{ "content": [{ "text": "Updated copy.", "position": 0 }] }'Edit before publish
Change text, media, or accounts on anything still in the queue.
Labels
Tag posts by campaign or client and filter every list endpoint by label.
Workspaces
Keys are per workspace, so one client can never reach another.
Posting API questions, answered
How do I authenticate?
Which networks can I post to?
Can I attach images and video?
What happens if a network is down?
Is there a rate limit?
Is there an SDK?
Build on the Posting 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