Kimi K3's cache discount doesn't survive OpenRouter
I wrote recently that every LLM tool call re-sends your entire conversation, and that prompt caching brings the re-read down to about a tenth of full price. There is a lot of buzz around Kimi K3 at the moment, so I tried it in opencode, paying per token through OpenRouter and expecting caching to absorb most of the re-reads. Thirteen prompts in, the billing page said otherwise.
Four rows from the OpenRouter activity log:
| Input | Output | Cost |
|---|---|---|
| 11,235 | 217 | $0.0364 |
| 13,949 | 196 | $0.0443 |
| 22,210 | 2,699 | $0.107 |
| 45,512 | 1,194 | $0.104 |
Subtract the first two rows and you get the input rate: 2,714 extra tokens for $0.0079, or $2.91 per million. That is K3’s list price, so nothing was cached.
Moonshot does cache automatically, with no cache_control breakpoints to place like Anthropic’s API. The discount just doesn’t survive the trip through OpenRouter, and you can confirm that before spending anything: every K3 endpoint on OpenRouter reports supports_implicit_caching: false.
curl -s https://openrouter.ai/api/v1/models/moonshotai/kimi-k3/endpoints \
| jq '.data.endpoints[] | {provider_name, supports_implicit_caching}'
Input ended up 73% of my spend, nearly all of it conversation I had already paid for once. Shorter sessions trim that, but every turn still re-reads its whole history at full price.
That leaves two ways out: go to Moonshot’s API directly, where the discount does apply, or pick a model whose caching survives the trip. Moonshot’s plans are behind a waitlist at the moment, so I took the second one. Run the same endpoints check against any candidate and look for a cache_read price.
K3 is good, and noticeably more concise than Opus, which likes to narrate what it is about to do before doing it. I would still reach for it on a hard problem.
I only run any of this when Claude’s rate limits hit, so this is a first pass rather than a verdict. The cheapest thing that has held up so far is GPT-5.6 Terra, which caches and is on sale at the moment:
"model": "openrouter/openai/gpt-5.6-terra:online"
Cache reads run a tenth of the input price. Over a long session that is the number that decides the bill.