Prompt caching survives OpenRouter for some providers and vanishes for others: on 2026-07-28 GLM-5 billed 75 percent less on a repeat call and MiniMax-M2.5 62 percent less, while DeepSeek, Kimi, GPT-4o and Claude showed zero cached tokens.
"Do routers kill prompt caching" turns out to be the wrong question. When we measured it, the answer split down the middle of the same run: two routed endpoints returned large cached-token counts with the discount visible in the billing record, and five returned nothing. The deciding variable is not the router as an abstraction. It is how each upstream provider integration is wired, which is something you verify per model instead of assuming either way.
Every figure below is a billed usage.cost value from the router's own response, captured on 2026-07-28 in a single region. Cached-token counts come from prompt_tokens_details.cached_tokens.
| Model (routed) | Cached tokens, repeat call | Billed, call A | Billed, call B | Change |
|---|---|---|---|---|
| GLM-5 (Z.ai) | 3,200 of 3,284 | $0.002388 | $0.000596 | -75% |
| MiniMax-M2.5 | 3,296 of 3,316 | $0.000530 | $0.000204 | -62% |
| DeepSeek V4-Flash | 0 | $0.000698 | $0.000696 | none |
| Kimi K2 (Moonshot) | 0 | $0.001901 | $0.001897 | none |
| GPT-4o (OpenAI) | 0 | $0.008410 | $0.008403 | none |
| Claude Sonnet 4.6 | 0 | $0.012066 | $0.012006 | none |
| Qwen3-235B (Alibaba) | 0 | $0.000726 | $0.000331 | not cache, see below |
Through OpenRouter on 2026-07-28, GLM-5 returned 3,200 cached tokens on a repeat call and its billed cost fell from $0.002388 to $0.000596, a 75 percent cut. MiniMax-M2.5 returned 3,296 cached tokens and fell from $0.000530 to $0.000204, a 62 percent cut. Both discounts appear in the router's own billing field.
We sent the same fixed ~1800-token prefix twice on 2026-07-28, two seconds apart, with a different one-line question appended to each call, temperature 0 and max_tokens 40. The prefix was a fictional API changelog, so no model could answer from memorized training data. Each provider's tokenizer counted the full request at roughly 3,300 tokens. All 17 calls in the run succeeded and total routed spend was $0.051. DeepSeek was additionally tested natively on api.deepseek.com; every other endpoint in this article was reached through OpenRouter, and those results need native re-verification before being treated as a property of the model rather than of the route.
The cheapest way to read the run is by what changed between call A and call B. GLM-5 went from 0 cached tokens and 4.01 seconds to 3,200 cached tokens and 2.26 seconds. MiniMax-M2.5 went from 32 cached tokens and 5.66 seconds to 3,296 cached and 3.06 seconds. Kimi K2 moved from $0.00190135 to $0.00189675, which is rounding noise on an identical prompt, and Claude Sonnet 4.6 moved from $0.012066 to $0.012006 on 3,887 prompt tokens both times.
Implicit caching is a server-side optimization that reuses an identical leading prompt prefix automatically, with no flag in the request body. Explicit caching is the opposite arrangement, where the caller marks a cache breakpoint itself. Our design sent plain requests only, so it can detect the implicit kind and nothing else.
That caveat matters for four rows in the table. The zeros next to Claude, GPT-4o, Kimi and Qwen describe default behavior through this route on this date. They are not a statement that those vendors lack caching. According to Anthropic's documentation, Claude's prompt cache is triggered by explicit cache_control breakpoints that our implicit-only test never sends, so a zero there is exactly what the design predicts. According to OpenAI's platform documentation, OpenAI applies automatic prompt caching on its own API for prompts at or above 1,024 tokens with a discounted cached-input rate, which we did not observe on the routed path and did not test natively.
The same distinction applies to the two Chinese vendors that showed nothing here. Moonshot AI builds Kimi K2, and according to Moonshot's platform documentation, context caching is offered on its native platform as a managed cache with its own storage pricing. Alibaba documents an implicit context cache for Qwen on the native DashScope and Model Studio endpoints. Neither surfaced through the route we measured.
Qwen3-235B billed $0.000726 on the first call and $0.000331 on the second, but reported zero cached tokens both times. That delta is not cache evidence. The second call matches Qwen's list price, roughly $0.00032 computed, while the first billed about twice list, so the gap tracks provider-price variance on the routed marketplace rather than any cache.
This is worth flagging because a naive reading of billed cost alone would have scored Qwen as a 54 percent cache saving. On a routing marketplace, the same model ID can be served by different upstream hosts at different prices between two consecutive calls. Billed cost is a noisy cache signal on its own. The cached-token counter is the one that actually tells you what happened.
DeepSeek V4-Flash hit 3,328 of 3,403 prompt tokens from cache on the native api.deepseek.com endpoint, 98 percent, cutting computed input cost from $0.000476 to $0.0000571 at official rates. The same model family routed showed zero cached tokens and paid full price on both calls. A third native call hit 3,328 tokens again.
According to DeepSeek's API documentation, cache-hit input tokens are billed at $0.014 per million against $0.14 per million for a miss, applied automatically. We computed the native input figures above from the measured hit and miss token split at those published rates rather than reading a billed field, because the native response does not return a cost object. The routed numbers, by contrast, are billed values.
Put the two side by side and the repeat call cost roughly one twelfth as much natively as it did through the router on that run. Native latency also fell from 1.43 seconds to 0.90 seconds on the cache hit, while the routed DeepSeek calls sat at 4.30 and 3.22 seconds. The latency comparison between routed and native endpoints covers that second effect in more detail.
Cache passthrough is a routing behavior that forwards an upstream provider's automatic prefix cache into the caller's billing record, and our run shows it is granted per provider integration, not per router. Z.ai's GLM-5 and MiniMax's M2.5 both kept it. DeepSeek did not, on this date, on this route.
So the practical rule is narrow. If your workload leans on a long stable prefix, a system prompt or a retrieved document set, measure the cached-token field on your actual model through your actual path before you budget. According to MiniMax's platform documentation, context caching is a documented feature of its models, and our routed measurement is consistent with that. For DeepSeek specifically, the cache discount economics are large enough that losing them silently to a router changes the build-versus-route decision outright.
Single region, single run, 2026-07-28. Provider integrations change without announcement, so treat this as a dated observation to re-run, not a permanent ranking.
Does OpenRouter support prompt caching? For some providers, yes. On 2026-07-28 we measured GLM-5 returning 3,200 cached tokens with a 75 percent billed discount and MiniMax-M2.5 returning 3,296 cached tokens with a 62 percent discount through the router. Five other endpoints returned zero cached tokens on the same test.
Why did DeepSeek show no cache through the router? We do not know the upstream cause and will not guess. What we can state is the measurement: 0 cached tokens and $0.000698 then $0.000696 billed on two identical-prefix calls, against 98 percent cache hits on the native endpoint minutes apart in the same run.
Does zero cached tokens mean Claude and GPT-4o cannot cache?
No. Our test sent plain requests with no cache markers, so it measures implicit caching only. Anthropic's cache requires explicit cache_control breakpoints, and OpenAI documents automatic caching on its own API. The zeros describe default behavior on this route, not capability.
Was the Qwen price drop a cache discount? No. Qwen3-235B reported zero cached tokens on both calls. Call B matched Qwen's list price while call A billed about twice list, so the difference reflects provider-price variance on the routing marketplace, not a cache hit.
How should I verify caching for my own workload? Send your real prefix twice and read the cached-token counter in the usage object, not the billed cost. Billed cost alone produced a false positive for Qwen in our run. Compare the routed path against the native endpoint before committing.
This page is one measurement inside a larger cache-behavior benchmark; the full cross-provider picture, including the native results and per-vendor documentation, lives on the prompt caching hub.
Author: Kevin Fan, Customer Success Manager. Benchmark run and figures verified 2026-07-28.