Last updated: August 31, 2026
The auto-recharge mechanic behind your first pay-per-use bill
X force-migrated the $200 Basic tier to pay-per-use on June 1, 2026. The migration is final and cannot be reversed. Once migrated, auto-recharge buys another $200 of credit whenever your balance drops below $10, capped at $400 per billing cycle. That cap is the only thing between a retry loop and your card.
This page is about the billing mechanic, not the rate card. If you want per-request prices, credit basics, and worked monthly cost examples, those are in X API pay-per-use explained. What follows is what happens to your card after migration, and the five settings that stop it.
Three facts about the migration
It was not optional. Basic closed to new signups in February 2026, and on June 1, 2026 X began moving every remaining subscriber, monthly and annual, onto pay-per-use. You did not opt in.
It is irreversible. There is no downgrade path back to Basic and no way to re-subscribe to it. Whatever you build now, you build on metered billing.
Your money came with you, in a different shape. Annual subscribers had the prorated remainder of their fee converted into pay-per-use credits. Nothing was confiscated. But a fixed $200 line item became a balance that drains at a rate set by your own code, and that is the entire problem.
Auto-recharge is on by default
You do not turn it on. It is the default behaviour of a pay-per-use account, and the first many people hear of it is the receipt.How a $200 tier becomes a $400 cycle
A worked timeline for a migrated account running an unchanged link-posting job.
Migration lands. Your prorated Basic remainder is sitting in the account as credit. Nothing looks different yet.
The RSS job that has been running for a year keeps posting 10 links a day. At $0.20 per link post that is $2 a day, $60 a month, against $0 marginal cost under Basic.
Balance crosses below $10. Auto-recharge fires and charges the card $200. You get an email about it after the charge.
Balance crosses below $10 again. Second $200 recharge fires. Cycle total is now $400.
The $400 per-cycle cap is reached. No further recharge. Balance hits zero and every API call starts failing.
The cap resets. If nothing changed in your code, the same sequence runs again.
Read the cap correctly
The $400 per-cycle cap genuinely limits the damage inside one cycle. It does not limit the damage across cycles, because it resets. An integration that hits the cap in June hits it again in July. Two cycles at the cap is $800, which is four months of the old Basic tier.Model your own workload with the X API cost calculator before you find out empirically.
Five settings to change on day one
- Set a spending limit in the Developer Console. Before you deploy anything. This is the only hard control you have, and the $400 cap is not it, because $400 a cycle is probably not your intended budget.
- Count your link posts. Any post containing a URL bills $0.20 against $0.015 for a plain post. For most migrated accounts this one number explains the entire bill. Ten links a day is $60 a month on its own.
- Replace polling with events where you can. Reads bill per post returned, not per request, so a search call returning 100 posts costs $0.50. Where an Activity API webhook event exists for what you are polling for, use it. post.delete and dm.sent are free.
- Never retry a permanent error. A 403 will still be a 403 on the fiftieth attempt, and every attempt may bill. This is the single most common way a migrated account reaches the cap.
- Alert on your own burn rate. The recharge email arrives after the charge. If you want a control rather than a notification, track spend in your own monitoring and page yourself on the slope, not the balance.
// The retry policy that matters most after migration.
// A permanent failure retried in a loop is how a $400 cycle happens.
const PERMANENT = new Set([400, 401, 403, 404, 422]);
async function postToX(body: unknown, attempt = 0): Promise<Response> {
const res = await fetch('https://api.x.com/2/tweets', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.X_USER_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(body),
});
if (res.ok) return res;
if (PERMANENT.has(res.status)) return res; // never retry, it will never succeed
if (attempt >= 2) return res; // bounded, not infinite
await new Promise((r) => setTimeout(r, 2 ** attempt * 1000));
return postToX(body, attempt + 1);
}When to stop managing a balance
Metered billing is the right model for some workloads and a permanent tax on others. The honest split is about links and reads.
If your app posts plain text a few times a day and reads nothing, stay on pay-per-use. Ten plain posts a day is about $4.50 a month, which no flat plan beats. Set a spending limit and get on with your work.
If your posts carry links, the math flips fast. Sixty link posts a month is $12, which is already more than the $11.99 OpenTweet Pro plan, and OpenTweet does not surcharge links at all. Add scheduling, threads, retries, and queue management, all of which you would otherwise build, and the comparison is not close. There is also no balance to watch, no recharge to be surprised by, and no developer account to maintain.
# No balance, no recharge, no per-link surcharge.
curl -X POST https://opentweet.io/api/v1/posts \
-H "Authorization: Bearer ot_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"text": "New post is up: https://example.com/blog/post",
"scheduled_date": "2026-09-05T15:00:00Z"
}'Full plan details on the pricing page, endpoint reference in the developer docs, and the feature-by-feature comparison in OpenTweet vs the X API.
7-day free trial. Cancel anytime.
Frequently asked questions
Can I go back to the X API Basic tier after migrating?
No. The migration from the $200 Basic tier to pay-per-use began on June 1, 2026 and it is final. Basic closed to new signups in February 2026 and remaining subscribers were moved automatically. There is no downgrade path and no way to re-subscribe.
How does X API auto-recharge work?
When your credit balance drops below $10, X automatically charges your card for another $200 of credit. This repeats within a billing cycle up to a $400 cap. Once the cap is hit, further recharges stop until the next cycle, and your API calls start failing on an empty balance.
What is the maximum X API auto-recharge can charge me in one cycle?
Auto-recharge is capped at $400 per billing cycle. That is two $200 top-ups. It is a real ceiling, but it resets every cycle, so a runaway integration can bill $400 in every consecutive cycle until you notice.
What happened to my remaining annual Basic subscription?
X converted the prorated remainder of annual Basic fees into pay-per-use credits at migration. So you did not lose the money, but you did lose the shape of it: a fixed monthly cost became a drawdown balance whose burn rate depends on what your code does.
Why did my X API bill go up after migration?
Because Basic was a flat fee and pay-per-use is not. The two things that most often blow the budget are link posts, which bill $0.20 each against $0.015 for a plain post, and reads, which bill per post returned rather than per request. A search call returning 100 posts costs $0.50.
How do I stop the X API from charging me unexpectedly?
Set a spending limit in the Developer Console on day one, before you write any code. Then cap retries in your own client, never retry a permanent error, and alert on your own spend rather than waiting for the recharge email. Auto-recharge is on by default and the $400 cycle cap is a ceiling, not a budget.
Is a flat-fee posting platform cheaper than pay-per-use?
It depends entirely on workload. If you post a handful of plain-text tweets a day, raw pay-per-use is cheaper than any flat plan. The math flips at roughly 60 link posts a month, because 60 times $0.20 is $12, which already exceeds the $11.99 OpenTweet Pro plan, and OpenTweet does not surcharge links at all.
Related guides
Rates, calculators, and the rest of the 2026 X API changes.
X API cost calculator
Model your exact posting and reading volume at current rates.
X API pay-per-use explained
Every rate, how credits work, and worked monthly cost examples.
X Activity API webhooks
Event types, scopes, and costs. Two events are free.
Likes and follows removed
The April 2026 write cut, and what is still callable.
Cheapest way to post via code
Flat fee vs pay-per-use, with the crossover point shown.
OpenTweet vs the X API
What each one does better, feature by feature.
No balance to watch
Flat monthly fee, no auto-recharge, no per-link surcharge, no developer account. Post and schedule through REST or a hosted MCP server.
7-day free trial. Cancel anytime.