X (Twitter) posting API for social media agents
Blotato's X (Twitter) posting API publishes a single post or a whole thread in one request, with the reply chaining handled for you.
You never buy an X API tier or capture tweet ids between calls.
- 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 X (Twitter) posting API does in Blotato
POST /v2/posts with targetType twitter needs no extra target fields. content.text is the first post. Put the rest of a thread in content.additionalPosts, each entry with its own text and mediaUrls, and Blotato chains the replies. Up to 4 photos, 1 GIF, or 1 video per post. Scheduling and the status poll work the same as on every other platform.
Threads in one call
One request, one array. Each additionalPosts entry becomes the next reply, and there is no tweet id to store between calls.
Media without the OAuth 1.0a detour
X still uses OAuth 1.0a for media uploads, and Blotato is the one holding that flow. You send a public URL.
Post analytics
GET /analytics ranks your published posts by views, reach, likes, or comments. GET /posts/:id/analytics returns the snapshot history for one.
Scheduling into the calendar
scheduledTime queues the post or the entire thread. GET /schedules lists what is waiting, PATCH moves it, DELETE cancels it.
What a thread looks like on the wire
The first post is content.text. Every additionalPosts entry becomes the next reply in order. Media goes on whichever post it belongs to. Nothing has to be stored between calls, because there is only one call to Blotato.
POST https://backend.blotato.com/v2/posts
{
"post": {
"accountId": "98432",
"content": {
"text": "We ran a posting agent unattended for 30 days. Thread. (1/3)",
"mediaUrls": [],
"platform": "twitter",
"additionalPosts": [
{ "text": "Day 1 to 10: it published 42 posts and failed twice, both media rejections. (2/3)", "mediaUrls": [] },
{ "text": "Day 11 to 30: zero silent failures, because it polled status instead of trusting the 200. (3/3)", "mediaUrls": ["https://cdn.example.com/log.png"] }
]
},
"target": { "targetType": "twitter" }
}
}
Response: { "postSubmissionId": "uuid" }, a receipt. Poll GET /posts/:postSubmissionId for published or failed.
Every field: help.blotato.com/api/llm. X's own reference: the X API docs.
What building on the X API costs you that this does not
- No X API tier to buy. X moved write access behind paid tiers with pay-per-use pricing that has changed more than once. Blotato's price is flat and does not reference X's.
- A thread is a data structure, not a loop. Against the X API you post, read the id, reply, read the id, reply. Here it is one array in one request.
- Same key, eight more platforms. The thread envelope also works for Bluesky and Threads. Change targetType, respect each network's character limit, and the rest of the request is identical.
- Publishing and analytics, and nothing we do not ship. Comments and DMs are Instagram and Facebook only. On X, the surface is publishing, scheduling, and post analytics.
Posting to X, from key to live thread
- Connect X. Sign in to Blotato and connect the X account. Blotato holds the OAuth tokens, including the OAuth 1.0a pair media uploads still need.
- Generate an API key. Generate the key on the API tab in Settings and copy it with any trailing = characters. Paid Starter begins at that moment, because the trial excludes the API.
- Fetch the accountId. GET /users/me/accounts?platform=twitter.
- POST and poll. Send the thread above, then poll GET /posts/:postSubmissionId. The whole thread reports as one submission.
Threads from Claude rather than from code? The X tools are on the MCP server at https://mcp.blotato.com/mcp.
Setup per client is on the X MCP server page, and the walkthrough of
posting to X from Claude Code shows the prompt-to-post flow. A prompt like
"Post this as a three-part thread on X and schedule it for 9am tomorrow." calls the same endpoint this page documents.
X posting limits, character counts, and what it costs
Blotato publishes no X-specific daily cap in its posting limits. X itself returns a 429 after 100 requests per user per 24 hours, and that error surfaces on the post status rather than being hidden.
| X limit | Value through Blotato |
|---|---|
| Blotato daily cap | none; X returns 429 after 100 requests per user per 24 hours |
| Text | 280 characters, 25,000 on Premium |
| Media per post | 4 photos, 1 GIF, or 1 video |
| Images | up to 5 MB; GIFs up to 15 MB |
| Video | up to 512 MB, 0.5 to 140 seconds |
| Off-spec video | converted by Blotato only under 120 seconds |
What X's own tiers cost, which endpoints left the self-serve tiers, and how the credit math works is the entire subject of the X API pricing guide.
On X, 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 X
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
X posting API FAQs
01 Can I post a thread to X with one API call?
02 Do I need an X developer account or API credits to use Blotato?
03 Is this a Twitter API or an X API?
04 Does the API return X post analytics?
Same key, eight more platforms
X 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.