--- title: "Twitter Post API: Publish Tweets for $0.0016 a Call" description: "Publish tweets, replies and quote tweets from code for $0.0016 a call, with no surcharge for links. One POST, one Bearer key, no X developer account." canonical: https://www.twitterapis.com/twitter-post-api generator: md-live-route generated: 2026-11-06T08:43:55.695Z --- # Twitter Post API: Publish Tweets for $0.0016 a Call 1. [Home](https://www.twitterapis.com/) 2. / Twitter Post API PUBLISH TWEETS # Twitter Post API: Publish Tweets for $0.0016 a Call Updated July 2026 What is the Twitter post API? The Twitter post API is a REST call that publishes a tweet from your code. On TwitterAPIs it is `POST /twitter/tweet/create`: send the text as JSON, optionally add image IDs, a reply target or a quoted tweet, and get back the new tweet ID and URL for $0.0016. A post with a link costs the same as a post without one. Flat $0.0016 per call, read from the billing configuration. No monthly plan, no X developer app, no extra charge for a URL in the body. Per our own API records, 125 endpoints share this one Bearer key and one prepaid balance. Start with the [quickstart](https://www.twitterapis.com/quickstart), compare [every price](https://www.twitterapis.com/pricing), or connect an agent through the [MCP server](https://www.twitterapis.com/mcp). [Start Free](https://www.twitterapis.com/signup)[Read the docs](https://docs.twitterapis.com/docs/reference/write-actions/tweet-create) By the numbers ## What publishing costs right now One number is ours, two are from X's own 2026 pricing announcement. - TwitterAPIs bills $0.0016 to publish a tweet, with or without a link. [(TwitterAPIs pricing, 2026)](https://www.twitterapis.com/pricing) - The official X API bills $0.015 per request for a plain post since April 20, 2026. [(X Developer Community, 2026)](https://devcommunity.x.com/t/x-api-pricing-update-owned-reads-now-0-001-other-changes-effective-april-20-2026/263025) - The official X API bills $0.20 per request for any post carrying a URL. [(X Developer Community, 2026)](https://devcommunity.x.com/t/x-api-pricing-update-owned-reads-now-0-001-other-changes-effective-april-20-2026/263025) - Per our billing data, paying customers made 484,424 tweet-returning read calls over October 22 to 28, 2026 (UTC), on the same keys and the same per-call billing as this endpoint. [(TwitterAPIs measured yield, 2026)](https://www.twitterapis.com/twitter-api-pricing) ## The endpoint behind the Twitter post API Everything below is one route. A plain tweet, a reply and a quote tweet are the same call with different fields set, so there is no second endpoint to learn and no separate reply path to bill. The table is generated from our published OpenAPI document, which is the same file the API reference is built from. ### POST /twitter/tweet/create Post a new tweet as the account behind your registered session. Supports plain text, up to 4 image media\_ids (from a prior media/upload), a reply (reply\_to), and a quote (quote). Requires a registered session. Billed at $0.0016 per call. | Parameter | Where | Required | Purpose | | --- | --- | --- | --- | | text | body | Yes | The tweet body. | | media\_ids | body | No | Up to 4 media IDs from media/upload, as a comma-separated string or JSON array. Omit for a text-only tweet. | | reply\_to | body | No | ID of the tweet to reply to (send it as a string; X IDs are 19 digits). Omit for a top-level tweet. | | quote | body | No | ID of the tweet to quote (send it as a string; X IDs are 19 digits). | ## Sample response from POST /twitter/tweet/create A successful call returns three fields and nothing else. There is no tweet object to parse, because you wrote the text yourself. Store `tweet_id` if you plan to read the post back, delete it or reply to it later, and treat the URL as a convenience for logs and notifications. Create Tweet Copy ``` { "ok": true, "tweet_id": "1759123456789012345", "url": "https://x.com/i/status/1759123456789012345" } ``` | Field | What it tells you | | --- | --- | | ok | True when X accepted the post. Anything else arrives as a non-200 status with an error body. | | tweet\_id | The new tweet's numeric ID as a string. X IDs run to 19 digits, so keep it a string in JavaScript. | | url | A permalink for the new tweet, ready to drop into a log line, a Slack alert or a dashboard. | ## Quickstart: publish your first tweet Reads work on a Bearer key alone. A post has to come from somebody, so a write needs one extra step that you do once per X account, and that step is free. 1. Create a key at [signup](https://www.twitterapis.com/signup). No card is needed and the key works immediately. 2. Register the X account you want to post from with `POST /twitter/customer/session`, sending its `auth_token` and `ct0` cookies. This call is free and the session stays stored against your key. 3. Send the request below with your key in the Authorization header. The response carries the new `tweet_id`. cURL Python JavaScript Copy ``` curl -X POST "https://api.twitterapis.com/twitter/tweet/create" \ -H "Authorization: Bearer $TWITTERAPIS_KEY" \ -H "Content-Type: application/json" \ -d '{"text": "Shipping cursor-paginated bookmarks today."}' ``` ``` import os import requests resp = requests.post( "https://api.twitterapis.com/twitter/tweet/create", headers={"Authorization": f"Bearer {os.environ['TWITTERAPIS_KEY']}"}, json={"text": "Shipping cursor-paginated bookmarks today."}, ) resp.raise_for_status() data = resp.json() print(data) ``` ``` const resp = await fetch("https://api.twitterapis.com/twitter/tweet/create", { method: "POST", headers: { Authorization: `Bearer ${process.env.TWITTERAPIS_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ text: "Shipping cursor-paginated bookmarks today." }), }); const data = await resp.json(); console.log(data); ``` ## What the Twitter post API costs per 1,000 tweets A write yields exactly one post per call, so the fill is always 1 and the per-1,000 figure is simply the call price times 1,000. There is no empty-page effect to average in, and no tier to climb. The image row adds one upload call, which is priced on its own page. | Action | Per call | Per 1,000 | | --- | --- | --- | | Publish a tweet, reply or quote tweet | $0.0016 | $1.60 | | Publish a tweet with one uploaded image | $0.0024 | $2.40 | | Register the X session | Free | Free | Prices come from the biller's own rows, and the signup credit of $0.50 covers 312 posts. See [all endpoint prices](https://www.twitterapis.com/pricing). ## Twitter post API options compared Three things decide this choice for most teams: what a post with a link costs, what you must set up before the first call, and whether you pay for a plan you may not fill. The rates below are each vendor's published figures, read on the date this page was last updated. | Option | Cost per post | Setup | Commitment | | --- | --- | --- | --- | | TwitterAPIs | $0.0016, same with a link | Bearer key plus one registered session | None, prepaid credit | | Official X API | $0.015 plain, $0.20 with a URL | Developer account, app, OAuth user context | Prepaid credits | | Outstand | $0.007 after the included 3,000 | API key plus your own X app credentials | $19 per month | | Browser automation | Proxy and compute costs | Headless browser and a selector you maintain | Your engineering time | ## Why a link changes the bill on the official API X split posting into two price bands on April 20, 2026. A plain post stayed at the standard write rate and any post containing a URL moved to its own band, close to 13 times higher. The classifier is binary, so one link anywhere in the body flips the whole post, whether it is a blog announcement or a tracking URL. That single line is what makes an automated news feed, a release bot or a newsletter cross-post expensive to run on the first-party route. We bill the call and do not read the body for pricing, so a feed that always carries a link costs the same as one that never does. The [X API pricing breakdown](https://www.twitterapis.com/twitter-api-pricing) walks through the full rate card if you are modelling a larger workload. ## Replies and quote tweets use the same call Set `reply_to` to a tweet ID and the post lands as a reply in that conversation. Set `quote` to a tweet ID and it lands as a quote tweet. Leave both out and you get a normal top-level post. Each of these bills the same rate, which makes support bots and auto-responders simple to budget. - Replies. Send the parent ID as a string. It usually arrives from a [mentions feed](https://www.twitterapis.com/twitter-mentions-api), a webhook or a search result. - Quote tweets. X withdrew quote-posting through API writes from its self-serve tiers in April 2026, so this field is a real difference on budgets that cannot reach an enterprise contract. - Images. Pass up to four IDs in `media_ids`. They come from the [media upload endpoint](https://www.twitterapis.com/twitter-media-upload-api), which is a separate call made first. ## Handling errors and retries safely A post is not an idempotent call, so a blind retry can publish twice. When a request times out, read the account's latest tweets before you send it again. X also refuses an exact duplicate of a recent post, so a retry that fails with a 403 may mean the first attempt landed. The other statuses are plain to act on. A 401 is a bad or missing key, a 402 means your balance ran out, a 403 means X refused the action for this account or session, and a 429 means slow down and try again. Each one comes back as JSON, and the [REST API guide](https://www.twitterapis.com/twitter-rest-api) documents the error contract shared by every route. ## Scheduling and drafts sit next to this endpoint If you want a post to go out later, `POST /twitter/scheduled/create` hands the timing to X so your server does not have to stay awake. `POST /twitter/draft/create` saves the text without publishing it. Both are documented in the [API reference](https://docs.twitterapis.com/docs/reference/write-actions/tweet-create), and our guide to [scheduler tools against an API](https://www.twitterapis.com/blogs/auto-post-to-twitter-scheduler-tools-vs-api-2026) helps you decide which one a workflow needs. ## Publish a thread by chaining replies A thread is not a separate object on X. It is a series of posts where each one replies to the post before it, so you build one by reading `tweet_id` from each response and passing it as `reply_to` on the next call. The example below publishes three posts in order and stops at the first failure, which leaves a clean partial thread rather than a gap in the middle. Each post in the chain bills as one create call, so a five-post thread costs five times the single-post rate. Keep a short pause between calls if you publish long threads, and save each `tweet_id` as you go so a crash can resume from the last post that landed. The same loop drives a [reply bot](https://www.twitterapis.com/answers/how-to-build-a-twitter-auto-reply-bot-api), where the first `reply_to` is someone else's tweet. Python Copy ``` import os import time import requests API = "https://api.twitterapis.com/twitter/tweet/create" HEADERS = {"Authorization": f"Bearer {os.environ['TWITTERAPIS_KEY']}"} parts = ["First post in the thread.", "Second post.", "Third and last."] previous = None for text in parts: body = {"text": text} if previous: body["reply_to"] = previous resp = requests.post(API, headers=HEADERS, json=body, timeout=30) resp.raise_for_status() previous = resp.json()["tweet_id"] time.sleep(2) ``` ## Worked budgets for common posting jobs Posting volumes are usually small, which is why the link band matters more than the base rate. A release bot that posts ten times a day sends about 300 posts a month, which bills $0.48 here. The same feed on the official API costs $4.50 if none of the posts carry a link and $60 if all of them do, at the published $0.015 and $0.20 rates. Multiple accounts do not change the arithmetic, because the price is per call and not per seat. One key can drive many X accounts, because a session can be registered ahead of time or passed on the request, so an agency can run many brands from a single balance. Our answer on [using multiple X accounts with one API key](https://www.twitterapis.com/answers/how-to-use-multiple-x-accounts-with-one-api-key) shows how to pick the acting account on each request. - Getting a key. The [API key page](https://www.twitterapis.com/twitter-api-key) covers how keys are issued and rotated, and it takes under a minute. - Reading what you posted. A [tweet by ID lookup](https://www.twitterapis.com/twitter-tweet-by-id-api) returns the counters on your post, so you can measure each one. - Watching for replies. A [webhook](https://www.twitterapis.com/twitter-webhook-api) tells you when an account you watch posts, and it is free to call. - Other write actions. Likes, reposts and bookmarks live on the [Twitter engagement API](https://www.twitterapis.com/twitter-engagement-api), and follows on the [follow API](https://www.twitterapis.com/twitter-follow-api). ## Keeping the posting session healthy Every write depends on the session you registered, so a posting job needs a small health check of its own. Logging out of X on the browser that issued the cookies can end the session, and so can a password change or a security challenge. When that happens, writes start failing while reads carry on working, which is easy to miss if your alerts only watch the read side. Call `GET /twitter/customer/session/status` before a scheduled batch and alert a person when it reports a problem. Register fresh cookies with the same call you used the first time, and remove a session you no longer need with `POST /twitter/customer/session/delete`. Treat `auth_token` and `ct0` like passwords: keep them in a secret store, never in source control, and limit who can read them. The [authentication guide](https://www.twitterapis.com/answers/how-to-authenticate-with-the-twitter-api) covers how the key and the session fit together. - Log every post. Store the `tweet_id`, the text and the time, so you can audit what a bot published and delete a mistake quickly. - Separate test and live accounts. Point development at a throwaway account, since a post from a test run is public the moment it lands. - Add a kill switch. Keep one config flag that stops all automated posting without a deploy, for the day a feed goes wrong. ## Post from an AI agent through the MCP server The same action is available to Claude, Cursor and other MCP clients as a tool, so an agent can draft a post and publish it on the account you registered. Keep a human approval step in front of it if the account matters, because the tool publishes immediately. The [MCP page](https://www.twitterapis.com/mcp) lists every tool and client config. - `twitter_create_tweet` calls POST /twitter/tweet/create Install the MCP server Copy ``` npx -y @twitterapis/mcp@latest ``` ## Twitter post API questions ### How do I post a tweet with the Twitter API? Register the X account once with POST /twitter/customer/session, then send POST /twitter/tweet/create with your Bearer key and a JSON body containing text. The call costs $0.0016 and returns the new tweet\_id and its URL. ### Do I need an X developer account to post tweets? No. You need a TwitterAPIs key and a session for the X account you are posting from. The session is the account's auth\_token and ct0 cookies, sent once to POST /twitter/customer/session. You do not create an app or go through OAuth approval. ### Does a tweet with a link cost more? Not here. We bill $0.0016 for the call regardless of what the body contains. The official X API moved posts containing a URL to $0.20 per request in April 2026, so link-heavy feeds see the largest gap between the two. ### Is automated posting allowed on X? Posting to an account you control, with content you authored, is ordinary API use. Bulk unsolicited replies and duplicate spam are what platform rules target, and X enforces against them whichever tool sent the post. Keep automated accounts clearly labelled and post at a human pace. ### How much does it cost to post a tweet through an API? On TwitterAPIs it is $0.0016 a post, which is $1.60 per 1,000 posts, with no monthly fee. On the official X API a plain post is $0.015 and a post carrying a URL is $0.20 since April 20, 2026. ### Can I post a reply or a quote tweet with the same endpoint? Yes. Add reply\_to with the parent tweet ID for a reply, or quote with the quoted tweet ID for a quote tweet. Both go through POST /twitter/tweet/create and bill the same rate as a plain post. ### Can I attach images to a tweet through the API? Yes. Upload each image first with POST /twitter/media/upload, which returns a media\_id, then pass up to four of those IDs in the media\_ids field of POST /twitter/tweet/create. ### How do I delete a tweet I posted through the API? Call POST /twitter/tweet/delete with id set to the tweet\_id the create call returned. If you are clearing many posts at once, the bulk delete guide on this site covers the pacing that keeps an account out of trouble. ### Publish your first tweet in a few minutes Create a key, register one X session for free and send the call. The signup credit covers 312 posts. [Start free](https://www.twitterapis.com/signup)[See every price](https://www.twitterapis.com/pricing) ## Next read Continue exploring related pages: [ Twitter API use cases 14 use cases from sentiment analysis to lead generation. ](https://www.twitterapis.com/twitter-api-usecases)[ Twitter API answers Short, sourced answers to the most common Twitter and X API questions. ](https://www.twitterapis.com/answers)[ Twitter timeline API Pull an account's full posting history over one REST endpoint. ](https://www.twitterapis.com/twitter-timeline-api)[ Twitter list API Read list members and list timelines with the same Bearer key. ](https://www.twitterapis.com/twitter-list-api) [ TwitterAPIs ](https://www.twitterapis.com/) The cheapest pay-as-you-go Twitter and X API. $0.0008 per call, which works out to $0.04 per 1,000 tweets on a full 20-tweet page. No subscriptions and no developer account. ## Product / API - [Pricing](https://www.twitterapis.com/pricing) - [Cost Calculator](https://www.twitterapis.com/twitter-api-cost-calculator) - [Rate Limits](https://www.twitterapis.com/twitter-api-rate-limits) - [MCP Server](https://www.twitterapis.com/mcp) - [Integrations](https://www.twitterapis.com/integrations) - [Language Clients](https://www.twitterapis.com/sdk) - [Changelog](https://www.twitterapis.com/changelog) - [Status](https://www.twitterapis.com/status) ## Developers - [Documentation](https://docs.twitterapis.com/docs) - [API Reference](https://docs.twitterapis.com/docs/reference/search/tweet-advanced-search) - [User Info](https://docs.twitterapis.com/docs/reference/user-reads/user-info) - [User Tweets](https://docs.twitterapis.com/docs/reference/user-reads/user-tweets) - [Advanced Search](https://docs.twitterapis.com/docs/reference/search/tweet-advanced-search) - [Verified Followers](https://docs.twitterapis.com/docs/reference/follower-graph/user-verified-followers) ## Resources / Compare - [Answers](https://www.twitterapis.com/answers) - [Reviews](https://www.twitterapis.com/reviews) - [Free Tools](https://www.twitterapis.com/tools) - [Twitter ID Finder](https://www.twitterapis.com/tools/twitter-id-finder) - [Get a Twitter API Key](https://www.twitterapis.com/twitter-api-key) - [Official X API Comparison](https://www.twitterapis.com/twitter-api-pricing) - [Twitter API Use Cases](https://www.twitterapis.com/twitter-api-usecases) - [Twitter API Alternatives](https://www.twitterapis.com/twitter-api-alternatives) - [Twitter Unofficial API](https://www.twitterapis.com/twitter-unofficial-api) - [Twitter Free API](https://www.twitterapis.com/twitter-free-api) - [TwitterAPIs vs twitterapi.io](https://www.twitterapis.com/twitterapis-vs-twitterapi-io) - [TwitterAPIs vs GetXAPI](https://www.twitterapis.com/twitterapis-vs-getxapi) - [TwitterAPIs vs TweetAPI](https://www.twitterapis.com/twitterapis-vs-tweetapi) - [TwitterAPIs vs TwexAPI](https://www.twitterapis.com/twitterapis-vs-twexapi) - [TwitterAPIs vs RapidAPI](https://www.twitterapis.com/twitterapis-vs-rapidapi) ## Legal - [About](https://www.twitterapis.com/about) - [Security](https://www.twitterapis.com/security) - [Trust](https://www.twitterapis.com/privacy-and-data-handling) - [Terms of Service](https://www.twitterapis.com/terms-of-service) - [Affiliates](https://www.twitterapis.com/affiliates) - [Contact](https://www.twitterapis.com/contact) - [Jobs](https://www.twitterapis.com/jobs) © 2026 TwitterAPIs. All rights reserved. TwitterAPIs is an independent third-party API for developers and researchers. Not affiliated with, endorsed by, or sponsored by X Corp. All systems operational