---
title: "Post a tweet"
method: POST
path: "/client/create"
tags: ["Account actions"]
---

# Post a tweet

`POST /client/create`

## Request

- Base URL: `https://api.twittrapi.com`
- URL: `https://api.twittrapi.com/client/create`
- Auth: API key in header `X-API-KEY`

Post a tweet, quote tweet, long tweet, poll, community tweet or scheduled tweet from your account.

Poll example: {"text": "Tabs or spaces?", "poll": {"choices": ["Tabs", "Spaces"], "duration_minutes": 1440}}.

Reference: https://www.twittrapi.com/docs/account-actions/client-create

## Query parameters

- `format` 'raw' | 'simple'

## Request body

- object
  - `cookie` 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.
  - `proxy` string, required: Your proxy, format http://user:pass@host:port. The requests to X go out through it. Used only for this request.
  - `text` string, required: Tweet text. Over 280 characters it is sent as a long post (note tweet).
  - `media_ids` string[]: Media IDs from /client/media or /client/media/video.
  - `possibly_sensitive` boolean: Mark the media as sensitive.
  - `conversation_control_mode` string: Who can reply: only_follows, only_verified or only_mentioned. Not used for community tweets.
  - `quote_url` string: URL of a tweet to quote.
  - `community_id` string: Post into this community.
  - `is_note_tweet` boolean: Force a long post even for short text.
  - `schedule_time` integer: Unix time in seconds. When set, the tweet is scheduled instead of posted; only text and media are used.
  - `poll` string: {choices, duration_minutes}: adds a text poll. choices: 2 to 4 strings, each 1 to 25 characters. duration_minutes: 5 to 10080 (7 days), default 1440 (1 day). Cannot be combined with media_ids, quote_url, schedule_time or community_id, and the text must stay within 280 characters (no long post).

## Response `200`

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.

With format=simple: {data: Tweet}: the tweet you just posted. With schedule_time: {data: {success: true, scheduledTweetId}}. When X reports an error inside the wrapper (for example a tweet that is already liked), the usual wrapper is returned unchanged.

- RawPassthrough: X's own JSON (raw format, the default), passed through unchanged. The shape is X's and can change; see https://www.twittrapi.com/docs/response-format.

## Other responses

- `400`: The body is not valid JSON.
- `401`: Missing or unknown API key. Not charged.
- `402`: No balance left, or the trial expired. Not charged. Top up in the dashboard.
- `403`: Key deactivated, or the endpoint is not in your plan (trial keys and account actions). Not charged.
- `407`: The proxy is unreachable or timed out.
- `422`: A 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. poll is not an object with only choices and duration_minutes, has fewer than 2 or more than 4 choices, an empty choice or one over 25 characters, a duration outside 5 to 10080 minutes, is combined with media_ids, quote_url, schedule_time or community_id, or the text is over 280 characters or is_note_tweet is true.
- `429`: Rate limit for your key exceeded. Not charged. No Retry-After header: back off exponentially.
- `500`: Something failed on our side or between us and X. Refunded (400, 407, 408, 409 or a 5xx error are refunded). Retry with backoff.
- `502`: Poll only: X created no poll card ("X did not return a card_uri for the poll"). Refunded.
- `default`: Any status X answers with (for example 401, 403, 404): passed through with X's body.

---

[API](https://skmtc.dev/twittrapi/apis/twittrapi-api.md) · [All operations](https://skmtc.dev/twittrapi/apis/twittrapi-api/llms.txt) · [OpenAPI document](https://skmtc.dev/twittrapi/apis/twittrapi-api/revisions/0618e38b54c2?raw)
