CodexHowSupport Us

Cache Writes Cost More, Not Less, on GPT-5.6

The mistake

Treating prompt caching as a pure discount on GPT-5.6 and GPT-6 models, the way it behaved on every model before them. On older models, writing a new prefix into the cache cost nothing extra: you paid the ordinary input rate to send it, and any later hit was simply cheaper. Carry that assumption onto GPT-5.6 Sol, Terra or Luna, or any GPT-6 model, and you'll under-budget a workload that writes many prefixes it rarely reads back.

Why this happens

From GPT-5.6 on, a cache write has its own price — 1.25x the uncached input rate for the default lifetime, and 2.5x for the 12-hour lifetime added in October — and that rate replaces the input rate for the written tokens rather than being added to it. Earlier models' tables simply have no cache-write column, so there was nothing to notice changing. Migrate a caching-heavy workload up a generation without re-reading the new model's price row and the surcharge arrives unannounced.

Why it matters

A write now costs more than not caching, so caching pays only once a prefix is read back. On the published rates the break-even is under a single read with the default lifetime — slightly lower on GPT-6.1 Sol and GPT-6.1 Terra, whose reads are the cheapest relative to input — and further out with the 12-hour one. Either way, a prefix written and never reused is a pure loss. Short-lived sessions, constantly changing context and per-request cache keys that partition your cache all produce exactly that pattern, and the bill won't say why.

The fix

On GPT-5.6 and later, use explicit-only caching for workloads with volatile tails: set prompt_cache_options.mode to explicit and place breakpoints only after content you expect to reuse. Content after the last breakpoint then bills as ordinary input, with no write charge. Keep the longer lifetime for the stable material that genuinely gets reused across hours; give everything else the default, per breakpoint if need be. Check each model's break-even in the prompt-caching reference, and price your own prefix and read count with the savings calculator.

Spotting it in your own traffic

Every response reports cache_write_tokens beside cached_tokens, under usage.input_tokens_details. On a healthy cached workload, reads pile up against each write; when writes keep pace with reads, the surcharge is being paid without the discount being collected. The Prompt Caching dashboard tracks cache reads per write over time, which makes the pattern visible across a whole workload instead of one request at a time.

See also

Inside a ChatGPT plan the rule differs: Codex credit billing has no separate cache-write charge at all.

Verified 2026-10-28 against CodexHow facts module (src/data/facts/) — see /about/#accuracy.