Claude Prompt Caching: How to Cut API Costs (2026) Anthropic's prompt caching feature reduces API costs by up to 90% by allowing Claude to reuse processed prompt prefixes across requests instead of reprocessing them. A RAG chatbot sending a 10,000-token context block 100 times daily would cost $3.00 without caching but only about $0.33 with caching, according to a developer's analysis. The feature works by marking cache breakpoints in system prompts, tool definitions, or document context blocks, with cached tokens expiring after five minutes. Originally published at kalyna.pro If your app sends the same large system prompt, tool definitions, or document context on every request, you're paying full price to re-process those tokens every single time. Prompt caching lets Claude reuse the processed representation of a prompt prefix across requests — cache hits cost 90% less than normal input tokens. This guide covers how caching actually works, the pricing math for writes vs reads, where to place cache breakpoints, and worked cost examples for RAG apps and agents. pip install anthropic See the Claude API Tutorial https://kalyna.pro/claude-api-tutorial/ if you're new to the Messages API, and Claude API Pricing Explained https://kalyna.pro/claude-api-cost/ for base per-model pricing. Caching works on prefixes . A request is processed top to bottom — system prompt, then tool definitions, then messages. You mark a cache breakpoint by adding "cache control": {"type": "ephemeral"} to a content block. Everything from the start of the prompt up to and including that block is cached as a unit. On the next request, if the prefix up to a breakpoint is byte-for-byte identical to a cached prefix, Claude reads the cached version instead of reprocessing it — you only pay full price for whatever comes after the last matching breakpoint. If anything before a breakpoint changes, that cache entry misses and gets rewritten. Using Claude Sonnet 4.6 $3 / $15 per 1M tokens, input/output as an example: The same multipliers apply to every model's base price — for Haiku 4.5 $0.25 / $1.25 per 1M a cache read costs $0.025 / 1M; for Opus 4.7 $15 / $75 per 1M it costs $1.50 / 1M. A RAG chatbot sends a 10,000-token retrieved-context block as the cached prefix, handling 100 requests/day at a steady pace. Without caching: 100 × 10,000 × $3.00/1M = $3.00/day With caching: first request writes the cache 10,000 × $3.75/1M = $0.0375 . The remaining 99 read from cache 99 × 10,000 × $0.30/1M = $0.297 . Total: ≈ $0.33/day — about an 89% reduction, compounding with every extra request. python from anthropic import Anthropic client = Anthropic LARGE SYSTEM PROMPT = open "knowledge base.md" .read 8,000+ tokens response = client.messages.create model="claude-sonnet-4-6", max tokens=1024, system= { "type": "text", "text": LARGE SYSTEM PROMPT, "cache control": {"type": "ephemeral"}, } , messages= {"role": "user", "content": "Summarize the refund policy."} , print response.usage Usage input tokens=12, cache creation input tokens=8000, cache read input tokens=0, ... The first call writes the cache. Send the same system prompt again within 5 minutes, and cache read input tokens=8000 , cache creation input tokens=0 — those tokens now cost 90% less. Tool schemas count as input tokens on every call, including every step of a tool-use loop https://kalyna.pro/claude-api-function-calling/ . Cache them by adding cache control to the last tool in the list: tools = {"name": "get stock price", "description": "...", "input schema": {...}}, {"name": "get exchange rate", "description": "...", "input schema": {...}}, { "name": "get current time", "description": "Get the current date and time in UTC.", "input schema": {"type": "object", "properties": {}}, "cache control": {"type": "ephemeral"}, }, This caches all tool definitions as one prefix block — high leverage for agents, since tools is resent unchanged on every loop step. response = client.messages.create model="claude-sonnet-4-6", max tokens=1024, messages= { "role": "user", "content": { "type": "text", "text": f"