# Prompt Caching Changed at OpenAI and Anthropic This Week

> Source: <https://www.digitalapplied.com/blog/prompt-caching-changes-openai-anthropic-september-2026>
> Published: 2026-09-24 00:00:00+00:00

Prompt caching is the line item that decides whether a long-running agent is affordable. Between September 22 and 24, 2026 OpenAI and Anthropic both changed how it works. OpenAI published a new caching system for the GPT-6 family with a 30-minute reuse window, a dashboard, a miss-diagnostics tool, explicit breakpoints, and a way to change reasoning effort mid-conversation without losing the cache. Anthropic took cache diagnostics out of beta, allowed tools to be defined inside a mid-conversation system message without invalidating the cache, and started billing three categories of refusal that were previously free.

This post covers only what changed this week. Our general guides to [cutting LLM costs with prompt caching](https://www.digitalapplied.com/blog/prompt-caching-2026-cut-llm-costs-engineering-guide) and [cache-first agent architecture](https://www.digitalapplied.com/blog/prompt-caching-economics-cache-first-agent-architecture-2026) explain the mechanics. Every parameter and header name below is copied from the vendor's documentation as read on September 25.

1. 01OpenAI's GPT-6 cache now keeps a prefix eligible for 30 minutes after its last write or reuse.The guide states the TTL setting has one supported value, 30m, which is also the default, and that OpenAI may retain entries longer. Cached input reads are discounted up to 90%.
2. 02You can now place cache breakpoints yourself and change reasoning effort without a miss.Explicit mode uses prompt_cache_options.mode and a prompt_cache_breakpoint marker, up to four cache writes per request. A configuration_update input item changes effort while the cached prefix survives.
3. 03Anthropic's cache diagnostics are GA and tools can be added mid-conversation without breaking the cache.The diagnostics field now appears on every Messages response. Under the inline-tools-2026-09-15 beta header, a tool_addition block carries a full tool definition inside a system message.
4. 04From September 24, Anthropic bills pre-output refusals in three categories.Refusals with stop_details.category of bio, frontier_llm or reasoning_extraction are charged like any other request at the model's rates. Other pre-output refusals stay unbilled; fallback credit is unchanged.

## 01 — The tableSide by side: what changed, where, and what to do

| Change | OpenAI (GPT-6 family) | Anthropic (Claude API) | 
|---|---|---|
| Cache lifetime | Eligible for 30 minutes after the most recent write or reuse; prompt_cache_options.ttl accepts only 30m, its default. Announced September 22. | Unchanged this week: 5-minute default, 1-hour option per cache_control block. | 
| Diagnosing a miss | New Prompt Caching Dashboard plus a diagnostics tool that compares a request with a recent response and reports the reason and the tokens affected. | Cache diagnostics out of beta on September 23; opt in with a diagnostics object on the request, no beta header needed. Every Messages response now carries a diagnostics field. | 
| Choosing what to cache | Explicit breakpoints: set prompt_cache_options.mode to explicit and mark blocks with prompt_cache_breakpoint. Up to four cache writes per request; content after the last marker is not written. | Unchanged: cache_control markers on content blocks. | 
| Changing reasoning effort | Append a configuration_update input item; leave request-level reasoning.effort as it was. The cached prefix is preserved. | Per-message effort exists under a separate beta; no change this week. | 
| Changing the tool list | Keep the tools array stable; use allowed_tools to restrict which are callable, or set tool_choice to none, rather than removing definitions. | September 22 beta, header inline-tools-2026-09-15: a tool_addition block in a mid-conversation system message can carry a full definition or reference, add, change or remove a tool without editing tools or invalidating the cache. | 
| Warming the cache | Set prompt_cache_options.prewarm to true on a Responses request to write the prefix without generating output; billed at the standard cache-write rate. | No equivalent announced. | 
| Billing change | None this week. | From September 24, pre-output refusals in the bio, frontier_llm and reasoning_extraction categories are billed like any other request. | 

The two vendors now solve the same three problems, sometimes with mirror-image mechanics. Both give you a reason code for a miss. Both let you change a tool set without throwing away the cached prefix, OpenAI by masking tools and Anthropic by appending definitions. And both accept that agents change effort mid-conversation and have made that free of a cache penalty.

## 02 — OpenAIOpenAI: a 30-minute window, breakpoints, and a dashboard

OpenAI's [announcement of September 22](https://openai.com/index/better-prompt-caching-for-gpt-6/) describes an improved caching system launched with the GPT-6 family that gives higher hit rates by default and discounts on eligible shared prefixes reused within a 30-minute window. The [prompt caching guide](https://developers.openai.com/api/docs/guides/prompt-caching) adds the details that matter for an agent loop.

- Lifetimeprompt_cache_options.ttl has one supported value, 30m, which is the default. A prefix stays eligible for 30 minutes after its most recent write or reuse; OpenAI may keep it longer.
- 30 minutes
- Minimum cacheable prefix1,024 tokens for GPT-5.6 and later; hidden system content does not count.
- 1,024 tokens
- Cached input discountThe guide's wording is "discounted up to 90%"; the announcement says discounts of up to 90% on cached input tokens.
- Up to 90%
- Explicit breakpointsSet prompt_cache_options.mode to explicit and add prompt_cache_breakpoint with mode explicit to a supported content block. With no markers placed, the request neither uses nor writes the cache.
- 4 writes per request
- Implicit modeOpenAI places a breakpoint at the end of the latest eligible message. Explicit markers can be added on top; the implicit one uses one of the four write slots.
- Default
- Effort without a missAppend a configuration_update input item to change reasoning effort between responses and keep request-level reasoning.effort unchanged, because changing that can rewrite hidden instructions.
- configuration_update
- Miss diagnosticsSet prompt_cache_options.comparison_response_id to an earlier response's id; the new response then carries a prompt_cache_diagnostics object with a type, a reason such as tools_changed, and an estimate of the tokens not reused.
- Reason per miss

The announcement carries customer figures, all vendor-published: GitHub's chief product officer is quoted saying the share of prompt tokens needing fresh processing fell by more than half across billions of requests; two agent companies report hit rates moving from roughly 85% to above 90% and from 83% to 91% after adopting explicit breakpoints. Treat those as the vendor's case studies, not as what your workload will do.

## 03 — AnthropicAnthropic: diagnostics out of beta, tools inside the conversation

Anthropic's changes arrived as three [release-note entries](https://platform.claude.com/docs/en/release-notes/overview) on consecutive days. On September 22, alongside the Claude Opus 5.5 launch, tools became definable inside a mid-conversation system message, in beta under the inline-tools-2026-09-15 header. A tool_addition block can carry a tool's full definition, so an agent can add a tool, change its schema or move a server tool to a newer version without editing the tools array or invalidating the prompt cache. The same header covers adding and removing tools by reference, and with the MCP connector's mcp-client-2026-09-15 header the definition can be an MCP toolset, with each server's fetched tool list recorded in an mcp_tool_listing block that pins the list when sent back.

On September 23, cache diagnostics left beta. The cache-diagnosis-2026-04-07 header is no longer needed; a request opts in by including a diagnostics object, and every response from the Messages endpoint now includes a diagnostics field, null when the request did not ask for it. For an agent team that has been guessing why a long session's cache-read ratio dropped, that is the same capability OpenAI shipped the day before, from the other direction.

The cached prefix on the Claude API runs from the start of the request through the tools array, the system prompt and the messages. Editing the tools array invalidates the entire cache. Defining or changing a tool inside a later system message leaves the earlier prefix intact, which is the difference between a cache hit and a full re-read on every turn where an agent's tool set changes.

## 04 — The billThe refusal line: what Anthropic now charges for

The September 24 entry is a billing change rather than a caching one, and it belongs in the same cost review. Anthropic now bills refusals that arrive before any output when stop_details.category is bio, frontier_llm or reasoning_extraction, which it describes as the categories where it measures low volumes of false positives. Mid-stream refusals were already billed. The newly billed refusals are charged like any other request, at the rates of the model that ran, on all platforms. Pre-output refusals in other categories are still not billed, and fallback credit is unchanged.

For most workloads the line will be small. For a pipeline that probes near a safeguard, or that retries a refused request on another model, it is a new cost that a caching dashboard will not show. Log stop_details.category, count the three billed values per day, and watch whether the retry path multiplies them.

## 05 — The patternsThree agent patterns to apply this week

##### Stable tool list, masked at call time

Send the same tools array on every turn. On OpenAI, restrict what is callable with allowed_tools or set tool_choice to none. On the Claude API, add or change a tool through a tool_addition block in a system message rather than editing the array. In both cases the cached prefix, tool definitions included, stays intact.

##### Append-only context with the changing part last

Place an explicit breakpoint after instructions and tool definitions, another after reference material, and leave the volatile suffix uncached. Content after the last marker is processed at the uncached rate without a cache-write charge, so churn at the end no longer writes junk to the cache.

##### Prewarm before a fan-out

Before spawning parallel sub-tasks that share a prefix, send one request with prompt_cache_options.prewarm set to true. It writes the prefix without output, at the cache-write rate, so the fan-out starts on a warm cache within the 30-minute window.

We make no claim about savings beyond the vendors' stated discounts. The only reliable number is your own hit rate, which both vendors now report per request. Our [AI transformation practice](https://www.digitalapplied.com/services/ai-transformation) starts every agent cost review by reading it.

## 06 — ConclusionBoth vendors now tell you why a cache missed; the work is to act on it

### Turn on diagnostics on both APIs, move tool changes out of the tools array, and add the refusal categories to the daily cost report

None of this week's changes cuts a list price. The caching changes alter how much of a long session is charged at the cached rate, which for an agent is the price that matters.
