Docs
Update an article

Update an article

Change the title, content or cover of an article. Fields you leave out stay as they are.

POST/client/articles/update
Draft. The parameters on this page have not been checked against the API code yet. Make a test call before you build on it.

Your account, your proxy, your risk.

Account actions run with the session cookie of your own X account and go out through your own proxy. Use only accounts you control and follow X's rules. Automated posting, following or liking can get the account limited or suspended; that is between you and X. Treat the cookie like a password: it gives full access to the account. Trial keys cannot call these endpoints.

How to copy the cookie and which proxy to use: Your X session (cookie).

Send at least one of title, text, content_state, cover_media_id or remove_cover. text and content_state replace the whole content. Title, content and cover are saved one after the other, like on x.com; when one fails, its answer is returned and the rest is skipped. Billed as one call.

Parameters

  • cookiebody · string · required

    Cookie header of your own logged-in X session: auth_token=...; ct0=... (guest_id is used when present). How to copy it: /docs/x-session.

  • proxybody · string · required

    Your proxy, format http://user:pass@host:port. The requests to X go out through it. Used only for this request.

  • article_idbody · string · required

    Numeric ID of the article, from /client/articles.

  • titlebody · string · optional

    Title of the article.

  • textbody · string · optional

    Content as plain text, one paragraph per line. Send text or content_state, not both.

  • content_statebody · object · optional

    Content in the format of the x.com editor, {"blocks": [...], "entity_map": [...]}, as /client/articles/get returns it. Use it for headings, links and styles.

  • cover_media_idbody · string · optional

    Numeric media ID from /client/media or /client/media/video to use as the cover.

  • cover_media_categorybody · string · optional · default DraftTweetImage

    Type of the cover: DraftTweetImage, DraftTweetGif or AmplifyVideo (video).

  • remove_coverbody · boolean · optional

    true removes the cover. Not together with cover_media_id.

Body parameters are sent as a JSON object with Content-Type: application/json.

Notes

  • Needs X Premium on the account. Without it X refuses with error code 37 ("Twitter Blue claim is not enabled").
  • No simple format: with format=simple the answer is the usual {status_code, response} wrapper.
  • The cookie and proxy fields: Your X session (cookie).

Example request

curl -X POST 'https://api.twittrapi.com/client/articles/update' \
  --header 'X-API-KEY: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{"cookie":"auth_token=...; ct0=...","proxy":"http://user:pass@host:port","article_id":"1790000000000000000","title":"Hello, edited"}'

Base URL https://api.twittrapi.com, key in the X-API-KEY header. The SDKs do not wrap account actions, so the examples are plain HTTP calls.

Response

Wrapper built by the API: {"status_code": <X status>, "response": "<X response body as a string>"}. The HTTP status is X's status when X answered 4xx or 5xx, otherwise 200. Parse response a second time to get X's JSON.

Example response coming soon.

In the raw format, field names and nesting come from X and can change without notice. See Response format.

Errors

  • 400The body is not valid JSON.
  • 422A required field is missing (including proxy), an ID is not numeric, or the cookie has no ct0. Also: the account is suspended, X rejected the session, or the text was already posted.
  • 407The proxy is unreachable or timed out.
  • 422None of the fields to change is set, title or text is not a string, content_state is not an object with blocks and entity_map, or both text and content_state are sent, cover_media_id is not numeric, cover_media_category has another value, remove_cover is not true or false, or remove_cover is sent with cover_media_id.
  • X'sAny status X answers with (for example 401, 403, 404): passed through with X's body.

Errors every endpoint can return (401, 402, 403, 404, 408, 409, 429, 5xx), and which of them are charged, are on the Errors page. Calls that fail with 400, 407, 408, 409 or a 5xx error are refunded.