What Chinese LLM APIs actually cost in 2026 (measured per 1M tokens)
Prices for Chinese LLM APIs are quoted per million tokens, which is the least useful unit if you have never billed a request. A $0.01 model and a $2.45 model are not two points on one line: they are two different products, and the cheap one usually fails differently.
This is the table we measured on 2026-10-28 across the models our gateway serves. Every number below is the charged rate, per 1M tokens, in USD.
model input / 1M output / 1M
doubao-seed-2-0-lite $0.0100 $0.0300
doubao-seed-2-0-pro $0.0100 $0.0400
doubao-seed-2-1-pro $0.0120 $0.0500
glm-5.3-flash $0.0686 $0.2400
deepseek-v4.1-flash $0.1286 $0.5143
glm-5.3 $0.1500 $0.6000
qwen3.7-plus $0.3300 $1.3100
deepseek-v4-pro $0.9800 $1.9600
kimi-k2.7-code $1.0600 $4.4100
deepseek-v4-pro-thinking $1.2000 $2.4000
kimi-k3 $2.0000 $1.3400
qwen3.7-max $2.4500 $7.3500
Two rows deserve a second look, because they break the assumption that output costs more than input.
`kimi-k3` charges $2.00 in and $1.34 out. `deepseek-v4-pro-thinking` charges $1.20 in and $2.40 out. If you estimate cost by multiplying input price by total tokens, you will be wrong on both, in opposite directions.
List price is not your bill
A price table multiplies tokens by rate. Your bill also depends on three things the table cannot show you.
**Cached input.** Some providers charge a fraction of list for a repeated prefix. A long system prompt that is billed once instead of forty times changes the arithmetic more than switching models does.
**Reasoning tokens.** A reasoning model can emit thousands of internal tokens before it writes anything. They are billed, they are not in your output, and they are the reason "why did this one-shot query cost ten times what I expected" has an answer.
**Failures.** A request that returns 200 with an empty `choices[0].message.content` still costs whatever was generated. In an early version of our own gateway we billed it as zero, and our margin silently inflated, because the only thing we counted was the response body.
The one line that shows your real number
Ask the API, not the pricing page. On an OpenAI-compatible endpoint, the response usually carries usage:
curl -s https://flintapi.ai/v1/chat/completions \
-H "Authorization: Bearer $FLINT_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"deepseek-v4.1-flash","messages":[{"role":"user","content":"Say OK"}],"max_tokens":64}' \
| python3 -c 'import json,sys; d=json.load(sys.stdin); print(d.get("usage"))'
If `usage` comes back `null`, that provider is not telling you what it charged, and no price table will save you. This is not hypothetical: it is one of the first things we had to fix, because a gateway that cannot report usage cannot be audited by its own customer.
What actually decides your monthly cost
Not the per-token price. These three, in this order.
1. **Which model you call by default.** The gap between the cheapest and the most expensive row above is 245× on input. Nothing else you can change in one afternoon moves the number that much.
2. **How much you send in the prompt.** At $0.01/1M input, a 50,000-token context costs half a cent. At $2.45/1M it costs twelve cents. Same prompt, different order of magnitude.
3. **How often you retry.** A retry loop against a model that times out under load doubles your spend and gives you nothing to show for it.
That is the argument for routing rather than picking: the right model is per-request, not per-company. If the cheap model answers your classification step correctly, paying 245× for the expensive one is not caution, it is waste. And when the cheap one fails the check, you want the fallback in the same request, not in a retry you wrote yourself.
How to read this table honestly
These are the rates we charged on 2026-10-28. They move, and they move without notice when a provider reprices. The live values are at `/pricing` and in `/v1/models`; the table above is dated on purpose, because a price article without a date is a rumour.
If you want the current numbers:
curl -s https://flintapi.ai/v1/models | python3 -m json.tool | head -40
And if you want to know what a specific prompt costs before you send it, run it once with a small `max_tokens` and read `usage` from the response. That number is the only one that is about you.
---
*Related: [How one API key covers twelve Chinese models](/blog/why-unified-ai-api), and [what actually broke when we put four providers behind one endpoint](/blog/what-breaks-chinese-llm-gateway).*