Text posts
A post of words only, up to 280 as X counts them. A post with a link counts toward the 20 link posts of the add-on's month; a post without one does not.
X posting
Status 200 Uploads posts to X for you: text on its own, a post with one image or up to 4 images, or one with a video, now or at a scheduled time. X needs the X add-on, which works on any plan and gives 200 X posts per billing month. Post from the dashboard, the REST API, Python, n8n or an AI app such as Claude; you sign in on X itself, and we post through our own X app.
A post of words only, up to 280 as X counts them. A post with a link counts toward the 20 link posts of the add-on's month; a post without one does not.
Text with one image of up to 5 MB. A larger image is refused before X is called, so nothing half-sent is left on your timeline.
Text with 2 to 4 images in one post, X's own limit, each of up to 5 MB.
Text with one video, up to 5 GB per file; X itself takes larger files, and we stop at the largest file we store.
Each setting by its name in the dashboard, its field in the REST API and its option in the AI connector. Every one here has been used in a real post or a dated live test.
| Setting | Dashboard | REST field | AI connector option | What it does |
|---|---|---|---|---|
| Who can reply | Who Can Reply | x.whoCanReply | who_can_reply | Everyone, the accounts you follow, the accounts you mention, your subscribers, or verified accounts. |
When we change or flag something in an X post, the answer (and History) names it with one of these codes. Your original file is never changed.
unknown_field: A field we do not read is not used, and the answer says so (with the field name we think you meant, when there is one). The post still goes out.
field_not_used: A field we read but could not use for this post (for example another network's block, or a setting that does not apply to this kind of post) is named in the answer. The post still goes out.
options_outside_post: An option sent next to "post" instead of inside it is not used, and the answer says where it belongs.
media_url_not_kept: A scheduled post that names its media by web address fetches the file when it goes out, and we keep no copy: the answer reminds you the file must still be there then.
posts_close_together: The answer warns when another X post of the account is scheduled within 20 seconds: leave at least a minute between them.
caption_over_limit: In a dry run or a scheduled post, a caption longer than X allows is flagged. We send it as it is; X may refuse it or cut it short.
moved_to_next_day: When the daily limit of the profile is reached while a scheduled post is going out, the networks that did not fit move to the next day as a scheduled post of their own, and the post read back says so.
queued_for_next_day: On a plan with a daily limit, a post over the day's limit is queued for the next day instead of failing (answer 202), and the answer gives the time.
The same X post from the dashboard, the REST API, Python, n8n or an AI app.
curl -i -X POST 'https://status200uploads.com/api/v2/posts' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer rl_your_api_key' \
-H 'Idempotency-Key: 8e03978e-40d5-43e8-bc93-6894a57f9324' \
-d '{"post": {"accountId": "@yourprofile", "platform": "x", "content": {"text": "Hello"}}}'
# The same command again: the same answer, with "Idempotent-Replayed: true", and one post.from status200uploads import Status200, Status200Error
s200 = Status200() # STATUS200_API_KEY
post = {
"accountId": "@yourprofile",
"platform": "x",
"content": {"text": "New photos from the shoot are up", "mediaID": ["YOUR_IMAGE_ID"]},
"x": {"whoCanReply": "following"},
}
try:
result = s200.publish(post, wait=True)
print(result.final.get("permalink") if result.final else result.code)
except Status200Error as error:
print(error.code, error.message) # e.g. plan_required without the X add-on{
"post": {
"accountId": "@yourprofile",
"platform": "x",
"content": { "text": "{{ $json.text }}" },
"x": { "whoCanReply": "everyone" }
}
}Post on X: "Our summer sale starts today", and only let people I follow reply.
The app checks the post with status200_validate_post, which counts the text the way X does, then sends it with status200_publish_post and who_can_reply set to following. Without the X add-on the answer says so and names the next step, and nothing is sent.
The code in the answer, what it means and what to do. Each one is in the API reference.
| HTTP | Code | What it means | What to do |
|---|---|---|---|
| 403 | plan_required | The account has no X add-on. Nothing was sent. | Add the X add-on on the Pricing page, then send the post again. |
| 429 | x_limit_reached | The add-on's 200 X posts for this billing month are used. | Wait for the next billing month. Your other networks are not affected, and a second add-on would not add posts. |
| 429 | x_link_limit_reached | The 20 posts with a link for this billing month are used. | Remove the link and send the post again, or wait for the next billing month. |
| 403 | x_rejected | X refused the post itself, for example as a duplicate of a recent one. X's reason is in the message. | Change the text; X does not take the same post twice in a row. |
| 401 | x_rejected | X no longer accepts the saved sign-in. | Reconnect X under Connections and send it again. |
| 503 | x_unavailable | X could not be reached, so nothing was posted. | Wait a moment and send it again. |
| 413 | MEDIA_TOO_LARGE | The file is larger than X takes through us. | Images up to 5 MB, videos up to 5 GB. |
Yes. Every X post needs the X add-on. It works on any plan, Free included, and gives 200 X posts per billing month, at most 20 of them with a link. X posts do not count toward your plan's own posts.
Yes. With the X add-on, send a POST to https://status200uploads.com/api/v2/posts with platform x, as in the example on this page. You need no X developer account of your own.
X allows 280, and counts every link as 23 characters however long it is, and an emoji as 2. The dashboard counter and a dry run count the same way, so you see a post that is too long before it is sent.
Further X posts are refused with x_limit_reached until the add-on renews, and the message gives the renewal date. Your posts to other networks go on as before, and a second add-on would not add X posts.
X does not accept the same text twice in a row from one account. The answer is x_rejected with X's own status and reason; change the wording and post again. Send an Idempotency-Key so that a retry of the same request returns the first answer instead.
Yes. Set Who Can Reply in the dashboard, x.whoCanReply in the API or who_can_reply in the AI connector: everyone, the accounts you follow, the accounts you mention, your subscribers or verified accounts.
Yes, up to 365 days ahead, from the dashboard or with post.scheduledFor in the API request. Leave at least a minute between two X posts of the same account: the answer warns when two are due within 20 seconds.
X needs the X add-on: $9 a month on any plan, Free included, for 200 X posts per billing month, at most 20 of them with a link. X posts do not count toward the plan's own posts. Everything on this page was checked on 26 October 2026.