X posting

Post and schedule to X (Twitter)

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.

  • Checked on

X at a glance

What you can post
Text only, text with one image, text with up to 4 images, or text with one video.
The X add-on
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. Pricing
Largest video
5 GB per file. File limits of every network
Largest image
5 MB per image.
Text
Up to 280 characters, counted the way X counts them: every link counts as 23, an emoji as 2.
Scheduling
Schedule a post up to 365 days ahead, or send it now.
How it connects
You sign in on X itself (OAuth), so we never see your X password.
Your own X developer account
Not needed: posts go out through our X app, so you never pay for or apply for X API access yourself.

X settings you control

Who can reply

What you can post to X

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.

A post with an image

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.

A post with several images

Text with 2 to 4 images in one post, X's own limit, each of up to 5 MB.

A post with a video

Text with one video, up to 5 GB per file; X itself takes larger files, and we stop at the largest file we store.

X settings

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.

X settings in the dashboard, the REST API and the AI connector
SettingDashboardREST fieldAI connector optionWhat it does
Who can replyWho Can Replyx.whoCanReplywho_can_replyEveryone, the accounts you follow, the accounts you mention, your subscribers, or verified accounts.

What we change for you, and tell you

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.

Post to X your way

The same X post from the dashboard, the REST API, Python, n8n or an AI app.

From the dashboard

  1. Add the X add-on on the Pricing page, then connect X under Connections by signing in on X.
  2. In Schedule, write the post (the counter counts links and emoji the way X does) and add an image or a video if you want one.
  3. Pick X and post now or pick a time.

Connect X →

From the REST API

A text post to X, safe to send twice (POST /api/v2/posts)
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.

Full page →

From Python

A post with an image, replies limited to people you follow
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

Full page →

From n8n

  1. Put an HTTP Request node after the step that writes the text: POST https://status200uploads.com/api/v2/posts.
  2. Set Authorization to Bearer rl_your_key and Content-Type to application/json; an Idempotency-Key of {{ $json.id }}-x keeps a retry from posting the same text twice, which X would refuse as a duplicate anyway.
  3. Use the body below and check the length in an earlier node if your text can run past what X allows.
The HTTP Request body
{
  "post": {
    "accountId": "@yourprofile",
    "platform": "x",
    "content": { "text": "{{ $json.text }}" },
    "x": { "whoCanReply": "everyone" }
  }
}

Full page →

From an AI app

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.

Full page →

X errors you may see

The code in the answer, what it means and what to do. Each one is in the API reference.

X error codes
HTTPCodeWhat it meansWhat to do
403plan_requiredThe account has no X add-on. Nothing was sent.Add the X add-on on the Pricing page, then send the post again.
429x_limit_reachedThe 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.
429x_link_limit_reachedThe 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.
403x_rejectedX 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.
401x_rejectedX no longer accepts the saved sign-in.Reconnect X under Connections and send it again.
503x_unavailableX could not be reached, so nothing was posted.Wait a moment and send it again.
413MEDIA_TOO_LARGEThe file is larger than X takes through us.Images up to 5 MB, videos up to 5 GB.

X questions

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. Everything on this page was checked on 26 October 2026.