Paul's Programming Notes PostsRSSGithub

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:

InputOutputCost
11,235217$0.0364
13,949196$0.0443
22,2102,699$0.107
45,5121,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.