Prompt caching: the 90% discount most teams leave on the table
Every request you send an LLM API re-sends everything the model needs: the system prompt, your few-shot examples, your tool definitions, maybe a whole document. Most of that is identical on every call โ and every major provider now bills that repeated prefix at roughly a tenth of the normal input price once it's cached.
What the discount looks like per vendor
| Vendor | Standard input | Cached input | Effective discount |
|---|---|---|---|
| OpenAI (GPT-5.6 Terra) | $2.00 | $0.20 | 90% |
| Anthropic (Claude Sonnet 5) | $2.00 | $0.20 | 90% |
| Google (Gemini 3.1 Pro) | $2.00 | $0.20 | 90% |
| DeepSeek (V4 Flash) | $0.14 | $0.0028 | 98% |
Mechanics differ โ OpenAI and Google cache automatically on repeated prefixes, Anthropic uses explicit cache_control breakpoints with a short TTL, DeepSeek caches transparently on disk โ but the billing shape is the same: prefix repeated โ prefix nearly free.
Worked example: a support chatbot
Say each request carries a 3,000-token system prompt + tools block, 500 tokens of fresh conversation, and produces 300 output tokens, at 30,000 requests/month on Claude Sonnet 5 ($2 in / $10 out, $0.20 cached).
With the 3,000-token prefix cached (โ86% hit): 3,000 ร $0.20/M + 500 ร $2/M + 300 ร $10/M = $0.0046 โ $138/month
Same model, same quality, 54% off โ from one architectural decision. The bigger and more stable your prefix, the closer you get to the full 90%.
Patterns that maximize hit rate
Put the stable stuff first. Caches match prefixes, so order your prompt: system โ tools โ few-shot examples โ documents โ the user's fresh input last. One dynamic token early in the prompt (a timestamp, a request ID) invalidates everything after it.
Freeze your prefix bytes. Even whitespace changes break the match. Template it once; never string-interpolate into the cached region.
Batch conversations, not just jobs. Multi-turn chats naturally re-send the whole history โ caching turns each turn's history into cheap tokens, which is why long conversations benefit most.
Watch the TTL. Caches expire in minutes on some vendors. Steady traffic keeps them warm; a trickle of requests spaced hours apart may never hit.
Caching vs batch โ and stacking them
The Batch API is the other big lever: ~50% off input and output for async workloads. Caching cuts repeated input; batch cuts everything but requires waiting. Bulk jobs with a shared prompt prefix can sometimes stack both โ vendor rules differ, so check docs before modeling it into your unit economics.
โ Model your cache hit rate in the calculatorDrag the cache slider and watch the 28-model ranking reorder in real time.
Prices last verified August 21, 2026. Caching mechanics summarized from vendor docs; behavior may change โ consult official documentation for implementation details.