Threads posting API: posts and threads from a social media agent
Blotato's Threads posting API publishes a text post, an image, a video, or a full multi-post thread in one request.
Meta's Threads API uses the same container-then-publish pattern as Instagram, and it needs App Review for production. Here it is a single POST from an account you connected through a login screen.
- REST
POST https://backend.blotato.com/v2/posts- Auth
blotato-api-key: YOUR_API_KEY- MCP
https://mcp.blotato.com/mcp
Updated September 2026. API access is included on every paid plan and excluded from the free trial.
What the Threads posting API does in Blotato
POST /v2/posts with targetType threads. Text posts run to 500 characters. Each post carries one image or one video: Blotato's Threads integration takes no carousel, and a mediaUrls array with two items fails with the error 'Threads only supports a single image or a video'. For several images, send a thread instead, with one image per entry in content.additionalPosts.
Threads with one media item per post
content.text is the first post. Each additionalPosts entry is the next reply with its own text and a single mediaUrls item.
Reply control
target.replyControl takes everyone, accounts_you_follow, or mentioned_only. It is optional.
Post analytics
GET /analytics ranks your published Threads posts by views, reach, likes, or comments. GET /posts/:id/analytics returns one post over time.
Scheduling into the calendar
scheduledTime queues the post or the whole thread. GET, PATCH, and DELETE /schedules/:id manage it afterwards.
How to publish several images to Threads when a post takes one media item
Send a thread. Post one carries image one, post two carries image two, and so on. Each entry has exactly one item in its mediaUrls, and Blotato chains the replies for you.
POST https://backend.blotato.com/v2/posts
{
"post": {
"accountId": "98432",
"content": {
"text": "Two screenshots from the agent's first week.",
"mediaUrls": ["https://cdn.example.com/week-1a.png"],
"platform": "threads",
"additionalPosts": [
{ "text": "Day 7. Every post polled to published before the log closed.", "mediaUrls": ["https://cdn.example.com/week-1b.png"] }
]
},
"target": {
"targetType": "threads",
"replyControl": "everyone"
}
}
}
Response: { "postSubmissionId": "uuid" }, a receipt. Poll GET /posts/:postSubmissionId for published or failed.
Every field: help.blotato.com/api/llm. Threads' own reference: the Threads API docs.
Three things Meta's Threads API makes you do that this does not
- The thread envelope is shared with X and Bluesky. The same additionalPosts array publishes a thread on all three. Change targetType, keep each network's character limit, and post the same thread three times.
- The container flow is gone. Create a container, wait, then publish it is how Meta does Threads and Instagram. Here it is one request and one status poll.
- Production access is already granted. Meta's Threads API gates production publishing behind App Review and a 60-day token refresh. Blotato's app holds that access and refreshes the tokens.
From API key to a live thread on Threads
- Connect Threads. Sign in to Blotato and connect the Threads account through the login flow.
- Generate an API key. The API tab in Settings issues the key, and the key starts paid Starter at $29/mo on the spot, because the free trial does not include the API.
- Fetch the accountId. GET /users/me/accounts?platform=threads.
- POST and poll. Send the request above and poll GET /posts/:postSubmissionId. A two-item mediaUrls array fails here, with the single-image error attached.
Posting from Claude instead of a script? The Threads tools are on the MCP server at https://mcp.blotato.com/mcp.
Setup per client is on the Threads MCP server page, and the walkthrough of
posting to Threads from Claude shows the prompt-to-post flow. A prompt like
"Post these three screenshots to Threads as a thread, one per post, replies limited to accounts I follow." calls the same endpoint this page documents.
Threads posting limits and what it costs
Blotato publishes no Threads-specific daily cap in its posting limits, so Meta's own Threads API limits are the ceiling, and a rejected post comes back as failed with Meta's error attached.
| Threads limit | Value through Blotato |
|---|---|
| Blotato daily cap | none; Meta's Threads limits apply |
| Text | 500 characters |
| Media per post | 1 image or 1 video; send a thread for more |
| Images | up to 8 MB, 10:1 to 1:10 |
| Video | MP4 or MOV, up to 1 GB, 1 second to 5 minutes, 9:16 recommended |
| Off-spec video | converted by Blotato only under 120 seconds |
Meta's Threads API is free per call. Its rate-limit formula, the 24-hour publishing caps, and the token refresh most teams forget are in the Threads API pricing guide.
On Threads, this API covers publishing, scheduling and analytics. Comments, DMs and DM automation are Instagram and Facebook only. Caps are listed at help.blotato.com/settings/social-accounts.
MCP tools that reach Threads
The tool names an agent calls on the MCP server for this platform, verbatim from the server's tool list. The REST endpoint behind each one is in the API reference.
blotato_list_accountsblotato_create_postblotato_get_post_statusblotato_list_postsblotato_list_schedulesblotato_get_scheduleblotato_update_scheduleblotato_delete_scheduleblotato_create_presigned_upload_urlblotato_list_top_postsblotato_get_post_analytics
Threads posting API FAQs
01 Can I post a carousel to Threads through the API?
02 Does the Threads posting API need Meta App Review?
03 Can I limit who replies to a Threads post via the API?
04 Does Blotato return Threads analytics?
Same key, eight more platforms
Threads is one targetType on the same endpoint. The social media API page has the comparison table of every platform's required fields and caps.
Blotato Your AI Agent still can't post to social media.
Point Claude, ChatGPT, n8n, or your own agent at Blotato's MCP and that's fixed: 9 platforms behind one key, flat $29/mo.
Connect your agentFlat pricing. Cancel anytime.