X errors
X (Twitter) posting errors: what each code means and what to do
An X post through Status 200 Uploads can be refused by us, by the X add-on's own limits, or by X itself. Our refusals carry a fixed code, such as plan_required or x_link_limit_reached, with a sentence saying what to do. X's own refusals arrive as x_rejected, with X's HTTP status in x_status and X's reason in the message. This page lists them all, with whether sending the same request again can work.
- Checked on
How to read an error
Posting to X needs the X add-on, which works on any plan, Free included. It has its own meter: 200 X posts per billing month, up to 20 of them with a link. X posts do not use your plan's posts, and the add-on's limits do not touch your other networks.
Every refusal is JSON with error.code and error.message. On X, one code covers everything X itself refused: x_rejected. Read x_status for X's HTTP status and the message for X's reason; a 401, or a 403 about the kind of sign-in, means X no longer accepts the saved sign-in, and the message then says to reconnect.
A post that reached the X step gets a row in History, also when it is refused, so you can read the reason later. A post refused before the X step, such as one refused with plan_required, leaves no failed post behind.
The X add-on
The add-on gives 200 X posts per billing month, at most 20 of them with a link. Its month runs from your billing date, not the calendar, and resets_at in the answer says when it renews.
| HTTP | Code | What it means | What to do | Send it again? | Where it shows |
|---|---|---|---|---|---|
| 403 | plan_required | The account has no X add-on, so posts to X are not included. error.required is x_addon, and error.upgrade_url is where to add it. Nothing was sent. | Add the X add-on, then send the post again. | never No. The same request cannot work: change it first. | API answer, AI app |
| 429 | x_limit_reached | The add-on's 200 X posts for this billing month are used. | Wait until resets_at. Your other networks are not affected, and a second add-on would not add posts. | after_reset Not before the time in resets_at. | API answer, History, AI app |
| 429 | x_link_limit_reached | The post has a link, and the add-on's 20 posts with a link for this billing month are used. error.detected_links lists the links found. | Remove the link and send the post again now, or wait until resets_at. | after_reset Not before the time in resets_at. | API answer, History, AI app |
When X answers
These codes come back from the X step, so the post shows in History as failed with the same message.
| HTTP | Code | What it means | What to do | Send it again? | Where it shows |
|---|---|---|---|---|---|
| 403 | x_rejected | X refused the post. X's own status (400, 401, 403, 404, 409 or 422) is in x_status, its title in x_title, and its reason in the message. | When the message says to reconnect, reconnect X under Connections. Otherwise change what X names and publish it again. | never No. The same request cannot work: change it first. | API answer, History |
| 503 | x_unavailable | X is not taking posts from Status 200 Uploads right now, for a reason that concerns our X app, such as X's rate limit, not your post. Nothing was posted. | Wait, then send the same request again. | wait_and_resend Yes: the same request after a wait (Retry-After, when the answer gives one). | API answer, History |
| 500 | platform_error | The X step failed without a code of its own: an X server error, an answer we could not read, or a sign-in that expired and could not be renewed. The message says which. | Read the message. If it says to reconnect, reconnect X under Connections; otherwise send it once more with the same Idempotency-Key. | resend_once_with_key Once, with the same Idempotency-Key. | API answer, History |
Images and videos
An image or video is uploaded to X before the post is made. When that upload fails, the post is not made.
| HTTP | Code | What it means | What to do | Send it again? | Where it shows |
|---|---|---|---|---|---|
| 413 | MEDIA_TOO_LARGE | The file is larger than X takes through us. The answer names the limits in max_image_bytes and max_video_bytes. | Send a smaller file, or check the limits on the file limits page. | never No. The same request cannot work: change it first. | API answer, History, AI app |
| 400 | bad_request | Uploading the file to X failed for another reason, such as a file that could not be downloaded from its address. The message says why. | Check that the file opens at its address, or upload it to your media library and post it by its mediaID. | never No. The same request cannot work: change it first. | API answer, History |
Codes any post can get
Not special to X: the request, the plan and the file in your library. The API reference lists every code.
| HTTP | Code | What it means | What to do | Send it again? | Where it shows |
|---|---|---|---|---|---|
| 401 | unauthorized | No API key, or a key that is not active. | Send Authorization: Bearer with an active rl_ key from the API page. | never No. The same request cannot work: change it first. | API answer |
| 403 | account_not_found | The accountId is not one of your profiles. The answer lists yours. | Use a profile id or "@name" from the list. | never No. The same request cannot work: change it first. | API answer, AI app |
| 404 | media_not_found | The mediaID is not in your library: never imported, deleted, or removed after 7 days. | Import or upload the file again and use the new id. | never No. The same request cannot work: change it first. | API answer, AI app |
| 409 | media_processing | The file is still importing. | Wait the Retry-After seconds and send the same request. | wait_and_resend Yes: the same request after a wait (Retry-After, when the answer gives one). | API answer, AI app |
| 429 | rate_limited | Less than 20 seconds since your last post to the same network. | Wait the Retry-After seconds and send the same request. | wait_and_resend Yes: the same request after a wait (Retry-After, when the answer gives one). | API answer, AI app |
| 429 | daily_limit_reached | Your plan's posts for today are used up. | Post after resets_at, or move to a larger plan. | after_reset Not before the time in resets_at. | API answer, AI app |
| 429 | monthly_limit_reached | The Free plan's posts for this month are used up. | Post after resets_at, or move to a paid plan. | after_reset Not before the time in resets_at. | API answer, AI app |
| 422 | idempotency_key_reused | The Idempotency-Key was already used with another body. | Use a new key for a new post. | never No. The same request cannot work: change it first. | API answer |
| 500 | server_error | Our side failed. | Send it once more with the same Idempotency-Key; without one, check History first. | resend_once_with_key Once, with the same Idempotency-Key. | API answer, AI app |
| 502 | upstream_unavailable | The request never left. Nothing was posted. | Send the same request again after a short wait. | wait_and_resend Yes: the same request after a wait (Retry-After, when the answer gives one). | API answer |
X's own errors
When X refuses a post with a 4xx, the answer is x_rejected with X's status in x_status and X's reason in the message. X's 429 is the exception: it is about our X app's limits, so it reaches you as 503 x_unavailable. An X server error reaches you as platform_error. The statuses below are X's; what they mean comes from X's developer documentation, read on .
400As the post is sent- X's words: "Invalid JSON, malformed query, missing required parameters". The first of X's listed reasons is passed on in the message. [X14]
- Read X's reason in the message, change the post and publish it again.
401As the post is sent- X's words: "Invalid or missing authentication credentials". The sign-in we hold for the account is no longer accepted. [X14]
- Reconnect X under Connections, then publish the post again.
403As the post is sent- X's words: "Valid auth but no permission for this resource or action". X's post reference also uses it for a video that is too long for the account: "This user is not allowed to post a video longer than 20 minutes." [X14, X1]
- Read X's reason in the message. For the video length, shorten the video.
429As the post is sent- X's words: "Rate limit or usage cap exceeded". X allows 100 posts per user in 15 minutes for the posting endpoint, and also limits each app per day. [X14, X13]
- Through Status 200 Uploads this arrives as 503 x_unavailable: wait, then send the same request again.
500As the post is sent- X's words: "Wait and retry; check status page". [X14]
- Send it again once, with the same Idempotency-Key, after a short wait.
503As the post is sent- X's words: "X is overloaded; wait and retry". [X14]
- Wait, then send it again once, with the same Idempotency-Key.
X error questions
Posting to X needs the X add-on, and the account has none. The add-on works on any plan, Free included, and gives 200 X posts per billing month, up to 20 with a link. Add it on the Pricing page, then send the post again; nothing was sent.
x_limit_reached means all 200 X posts of the add-on's billing month are used: wait until resets_at. x_link_limit_reached means the post has a link and the 20 link posts are used: remove the link and send it again now, or wait until resets_at.
No. A second add-on does not add posts, so the answer to x_limit_reached never offers one. The add-on renews on its billing date, which resets_at gives, and your other networks keep posting meanwhile.
X itself refused the post. The answer keeps X's HTTP status in x_status and X's reason in the message, and the post shows in History as failed. When the message says to reconnect, reconnect X under Connections; otherwise change what X names.
X answered that it is not taking posts from our X app right now, for example because of its rate limit. That concerns our app rather than your post, so we answer 503 x_unavailable instead of passing X's answer on. Nothing was posted. Wait, then send the same request again.
X says the sign-in is valid but has no permission for the action. X's post reference also uses it for a video longer than the account may post: "This user is not allowed to post a video longer than 20 minutes."
More on X
X's pages this rests on
Sources read on 15 October 2026.
- X1X API: Create Post (no date shown)
- X13X API: Rate limits (no date shown)
- X14X API: Response codes and errors (no date shown)
Start posting to X
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. This page was checked on 26 October 2026.