Why we made credits that never expire
Every SongAPI credit you buy is yours until you spend it. Buy $5 of credits today, use them next year — nothing lapses, nothing resets on the first of the month. This post is about why we set it up that way, because the industry default is the opposite, and the default is not an accident.
The quiet subscription
Most API credit systems expire unused balances monthly. The pitch is “flexibility”; the mechanics are a subscription wearing a pay-as-you-go costume. Expiring credits mean you’re not buying generation capacity — you’re renting the right to generate this month.
The revenue model this creates has a name in the gym industry: breakage. Sell capacity that a predictable fraction of customers won’t use, keep the difference. It works because usage is lumpy but billing is smooth. Developers are told to estimate their monthly volume, they estimate high to be safe, and the gap between the estimate and reality becomes margin.
Developer usage is lumpy. Pricing should survive that.
Almost nothing built on a music API generates at a constant rate:
- A game generates heavily during content production, then barely at all after launch.
- A side project gets a burst of weekend attention, then sits idle for a month.
- A campaign tool spikes before holidays and sleeps in between.
- An agency’s volume tracks whichever client project is active.
Monthly expiry punishes every one of these patterns. You either over-buy to cover peaks and forfeit the slack, or under-buy and hit a wall mid-burst. The pricing model transfers the cost of variance — which is inherent to real development — from the vendor to you.
What non-expiring credits change
Removing expiry sounds like a small policy detail. It changes the relationship:
Buying becomes rational. You can buy at the volume discount because the math is just price-per-credit — there’s no “will I use it this month?” discount-versus-forfeiture gamble. (This is also why our packs get cheaper per credit as they get bigger, not cheaper per month of commitment.)
Idle time is free. Shelving a project for a quarter costs nothing. Your balance is exactly where you left it, which means coming back to the project has no re-subscription friction either.
Our incentives point the right way. If your credits can’t expire, we only make money when you generate — so the pressure lands on us to keep the API fast, reliable, and worth using. Breakage-based pricing lets a vendor profit from an API you’ve stopped using. We’d rather not be able to.
The objection, answered honestly
The standard defense of expiry is that unredeemed balances are a liability — the vendor carries an obligation for capacity you might claim years later. That’s true, and we carry it anyway, because the liability is small and the trust is not. A $5 balance that sits for a year costs us almost nothing to honor. A pricing page full of asterisks costs a lot.
There’s one adjacent policy worth mentioning for completeness: auto top-up has a $50 minimum. That’s not breakage — nothing expires — it just keeps per-transaction payment costs from eating the small refills.
The whole pricing model, in one paragraph
Buy credits in packs from $5. Bigger packs cost less per credit. A generation costs 11 credits and includes two variations. Credits never expire, there’s no subscription, and the sandbox is free. That’s the entire model — details on the pricing page.
$5 gets you 1,000 credits — and they never expire.