---
title: "Create Draft Tweet"
method: POST
path: "/draft/create"
tags: ["Write Actions"]
---

# Create Draft Tweet

`POST /draft/create`

## Request

- Base URL: `https://api.twitterapis.com/twitter`
- URL: `https://api.twitterapis.com/twitter/draft/create`
- Auth: HTTP bearer

Save a draft tweet on the account behind your registered session. A draft is private to that account and is never published: it appears in X's own composer under Drafts until you post or delete it. Accepts text, up to 4 media_ids, a reply_to and a quote, exactly like tweet/create. Billed at $0.0016 per call. Cost: $0.0016 per call.

## Request body

- object
  - `text` string, required: The draft body. A draft with no text is refused with 400.
  - `media_ids` string: Up to 4 media IDs from media/upload, as a comma-separated string or a JSON array. Omit for a text-only draft.
  - `reply_to` string: ID of the tweet this draft replies to (send it as a string; X IDs are 19 digits).
  - `quote` string: ID of the tweet this draft quotes (send it as a string; X IDs are 19 digits).

## Response `200`

Save a private draft on your own account. Nothing is posted.

- object
  - `ok` boolean: True when X returned an id for the new draft.
  - `draft_tweet_id` string, nullable: Numeric ID of the saved draft, or null when X refused the create. A null here answers 422 and is not billed.

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `402`: Insufficient credits
- `403`: Forbidden
- `404`: Not found
- `429`: Rate limited
- `5XX`: Server error

---

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