I found it during a routine look at the cost dashboard. Unexpected frontier-model usage, tagged litellm-internal-health-check. The router pings every model it fronts to make sure it's alive — sensible — except it was doing it every 60 seconds, around the clock.
That's roughly 43,000 pings a month. Each one a real, paid API call to a frontier model.
Nobody chose that. It's just a default, and defaults don't send you an invoice explaining themselves.
The fix was one line
health_check_interval: 21600 # 6 hours — was 60 secondsA model that's up at 9:00 is overwhelmingly still up at 9:01. Checking it 360 more times before lunch tells you nothing new about its health — it just bills you for the question.
The arithmetic, from my own logs:
| Before | After | |
|---|---|---|
| Check interval | 60 seconds | 6 hours |
| Checks per month | ~43,200 | ~120 |
| Monthly cost | $20.09 | $0.06 |
Same reliability signal. 99.7% less spend. If a model goes down, I still find out — and in practice the user-facing failure surfaces instantly anyway, because real traffic is its own health check. The scheduled ping is a backstop, not a heartbeat monitor for a patient in intensive care.
$20 is not the point
Twenty dollars a month is not a scary number. That's exactly what makes it dangerous.
It only became visible because every call in my stack passes through one router and comes out the other side logged, tagged, and costed. The health checks carried their own environment tag, so the dashboard showed a line item that had no business being there. Thirty seconds of curiosity later, I had the culprit.
Without that visibility, the $20 would have sat in the bill forever — dissolved into "that's just what AI costs." Nobody audits a bill that's roughly what they expected.
Your stack has these too
Now scale the thinking. A typical team runs AI through a dozen tools — a chat product here, an embedding pipeline there, a vendor SDK with its own retry logic, agents that call tools that call APIs. Every one of them ships with defaults that were chosen for the vendor's convenience, not your budget:
- Retry storms that re-bill failed calls three times before surfacing the error
- Embedding jobs that re-process unchanged documents on every run
- Streaming endpoints held open by idle frontend tabs
- And yes — health checks interrogating a paid API every minute of every day
The waste isn't one $20 leak. It's not knowing how many of them you have.
The takeaway
You can't fix what you can't see. Per-call visibility isn't accounting hygiene — it's how you find out what your defaults decided for you while you weren't in the room.
One router in front of everything. Every call logged, tagged, costed. It's the same architecture that enforces the data boundary — and it pays for itself in found money.