All posts

What X killing its free API tier actually cost me, and what broke

2026-07-14

X removing its free API tier in February 2026 did not cost me a subscription fee, it cost me a launch post that half-published and a morning of figuring out why one channel was empty.

The free tier is gone. Posting programmatically now runs on pay-per-use, about $0.15 a post at my volume. The number is not the story. The way it broke is.

What actually broke first?

Not billing. A scheduled job. My social pipeline batches a post out to several channels at once, and one of them returned CreditsDepleted halfway through the batch. The other channels had already gone out. X had not. There was no error in my inbox, no red banner, just a launch announcement that existed everywhere except the one place I most wanted it, and a log line I did not read until the next morning.

The spend cap was set to a default I had never looked at. The first real batch after the tier change walked straight into it.

Why did I not just raise the cap and move on?

Because paying per post quietly changes the question. When posting was free, "should this go to X" was never asked. The pipeline just sent everything. At $0.15 a post, sending everything to a channel I had already deprioritized is paying rent on a habit. So the fix was not a bigger cap. The fix was to stop treating X as an automated channel at all.

What did I build instead?

X is now a manual channel in the pipeline. The draft still gets written, scored against the voice rules, and staged in the queue like any other post. The difference is the last step. Instead of an API call, the queue renders a copy button. If I decide the post is worth it, I paste it myself. If I do not, it dies in the queue at a cost of exactly nothing.

The pipeline already knew how to model this, because "manual channel" is just a config flag, not a special case in the code. Flipping X from auto to manual was a one-line change plus the copy button that already existed for other channels.

What is the actual lesson?

A free tier is a load-bearing assumption you did not write down. When it disappears, the cost is not the new invoice, it is every place your system quietly assumed the old price. Mine assumed posting was free in exactly one spot, a batch loop with no per-channel spend awareness, and that spot failed in the worst possible moment.

If your automation depends on a free tier that could vanish, the useful exercise is not budgeting for the new price. It is asking what breaks the day the price stops being zero.

If you are wiring up automation that has to survive a vendor changing the rules, I do this for a living.

Work with me

If this sounds like your Tuesday, I set these up for a living. Work with me

Get the weekly note

One email a week: what I built, what it cost, what it returned. Real receipts. Unsubscribe anytime.