How much does the X (Twitter) API actually cost in 2026?
X's pay-per-use API pricing explained: $0.015 per post, $0.20 per post with a URL, credits, the media.write scope trap, and how to budget for programmatic posting without surprises.
X's API pricing has been through several eras — free, then tiered subscriptions, and now, for new developer accounts, pay-per-use. The current model is simple on paper and surprising in practice. Here's what posting to X programmatically actually costs in 2026, and the setup traps that produce mysterious 403s before you've spent a cent.
The pricing model
For new developer accounts, posting is metered per write:
Action
Price
Publish a post
$0.015
Publish a post containing a URL
$0.20
Two things stand out. First, you pre-buy credits in the X Developer Console — publishing fails once credits run out, so treat the balance like any other production quota and monitor it. Second, that URL multiplier is brutal: a post with a link costs 13× more than one without. If your content strategy is "caption + link," X is pricing you toward alternatives — which is exactly why the link-in-first-reply pattern exists.
At scale the arithmetic is straightforward: 1,000 plain posts a month is $15; the same volume with URLs is $200.
The setup traps that look like billing problems
Most "the X API doesn't work" complaints in 2026 aren't about money — they're about app configuration:
Your app must be attached to a Project. A standalone pay-per-use app is refused with client-not-enrolled, an error that says nothing about Projects. Create the Project first, attach the app, then authorize.
media.write is its own scope. The v2 chunked media upload endpoints require it. A token authorized without it still posts text happily — and returns HTTP 403 only when you try to upload media.
Scopes are baked into the token at authorize time. Adding media.write to your app later does nothing for existing connections; those accounts must disconnect and reconnect to get a token with the new scope. If media uploads 403 for old users but work for new ones, this is why.
The full scope set for a posting integration: tweet.read tweet.write users.read media.write offline.access.
Token lifecycle: short and rotating
X access tokens live 2 hours, paired with single-use rotating refresh tokens — every refresh consumes the old refresh token and issues a new one. Persist the new token atomically after each refresh: a crash between "used the old one" and "saved the new one" strands the account, and the user has to reconnect. This is the part of an X integration most likely to produce support tickets.
Media has one more wrinkle: X doesn't fetch media from URLs the way Meta does. You upload the bytes yourself through the chunked upload flow (up to 4 images or 1 video per post, 280 characters of text).
Budgeting for it — or routing around it
If X is a must-have channel, the honest budget line is: per-post credits + the engineering time for OAuth, rotating refresh tokens, chunked media upload, and credit-balance monitoring.
Chirio treats X as an optional, transparently priced add-on: connect an account via hosted OAuth and X becomes one more target in the same publish call you already use for Instagram and Threads — token rotation, media upload, and scope handling included. X's per-post cost is passed through rather than hidden, and because Chirio only bills writes that actually happen, a failed post costs nothing:
And if the URL surcharge offends you, put the link in the first comment: firstComment posts it as a reply after the main post publishes — the caption stays clean and the post is billed at the plain rate.
The takeaway
X's API in 2026 is neither free nor expensive — it's metered, and the real costs are the $0.20 URL multiplier and the engineering time lost to client-not-enrolled, missing media.write, and rotating refresh tokens. Budget for the writes, design links into first replies, and decide deliberately whether the integration itself is where you want to spend your maintenance hours.