Skip to content
cheapxapi
All endpoints

Upload media

POST/twitter/upload_media_v2

Uploads an image or video (multipart/form-data, field file, at most 100 MB) and returns a media_id to use in Post a tweet or reply. Large videos can take up to a minute.

Price: $0.0006 per request.

Request body

Send as multipart/form-data.

  • filefilerequired

    The file to upload.

  • proxystringrequired

    Proxy for this X account, in the form scheme://user:pass@host:port where scheme is http, https, socks5 or socks4. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended.

  • login_cookiesstringrequired

    The login_cookies value returned by Log in to an X account. Send the same value with every action for that account.

  • is_long_videoboolean

    Set to true for videos longer than 140 seconds (needs X Premium).

Example request

curl -X POST "https://api.cheapxapi.com/twitter/upload_media_v2" \
  -H "x-api-key: YOUR_KEY" \
  -F "proxy=<proxy>" \
  -F "login_cookies=<login_cookies>" \
  -F "file=@image.jpg"

Response

Charged. "status": "success" means the action was done; "status": "error" means X rejected it and message says why.

FieldType
media_idstring
statusstring
messagestring

Status codes

200
Charged. "status": "success" means the action was done; "status": "error" means X rejected it and message says why.
400
Missing or invalid fields (not charged). The message names the field; your values are never echoed back.
401
Missing or invalid API key (not charged).
402
Insufficient balance (not charged).
405
Wrong HTTP method (not charged).
413
Request body too large (not charged).
429
Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the Retry-After header.
503
Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.