There’s a specific way AI-built apps fail that doesn’t show up as a crash or a breach — it shows up as an invoice. An endpoint that costs you money every time it runs, with nothing stopping anyone from running it as often as they like, is a bill waiting to scale with abuse instead of usage. People wake up to four-figure charges from a single bored script.
The shape of the disaster
It’s almost always the same recipe: an endpoint that triggers a paid action — an LLM call, an email, an SMS, an image generation — that is reachable without authentication, has no rate limit, and has no hard cap. One person (or one bot) loops it, and your provider happily bills you for every call. The app “works” the whole time. That’s the trap: nothing is broken, it’s just expensive.
Why AI-built apps ship without limits
Rate limiting is invisible on the happy path. While building, you call your own endpoint a handful of times and it works, so there’s nothing to prompt the AI — or you — to add a limit. Limits feel like a “later, when we have scale” problem. But the cost risk is there from the first deploy, and it’s at its worst before you have real traffic to notice it.
Where it hides
- AI/LLM proxy endpoints that forward to a paid model with no per-user cap.
- Email and SMS triggered by unauthenticated actions (signup, “contact us”, password reset) — spammable, and each one costs.
- Image or media generation, often the most expensive call in the app.
- No caching, so identical requests pay full price every time.
How to cap it
- Authenticate first. A costly endpoint should never be reachable anonymously.
- Rate-limit per user and per IP. A few requests per minute is plenty for real use and kills abuse.
- Set hard budgets at the provider. Most (OpenAI, Twilio, etc.) let you cap monthly spend — do it, so the worst case is a stopped service, not an unbounded bill.
- Cache and dedupe. Don’t pay twice for the same answer.
- Queue the expensive work so a flood can’t fan out into a flood of paid calls.
How to check
Open your app’s most expensive endpoint and ask: can I call it logged out? Can I call it in a loop? Is there anything — a limit, a cap, a budget — that stops the hundredth call in a minute? If not, you’re one curious visitor away from the bill.
Runaway cost is one of the classic vibe-coding killers precisely because it’s invisible until the invoice arrives. A seniorgrade audit maps every endpoint that costs money and tells you which ones are open to abuse — prioritized, with the fix. The free self-check asks about it too.