What the -latest Model Aliases Actually Resolve To
Pointing your code at claude-sonnet-latest instead of a version number feels like the responsible choice: you get fixes automatically and never ship against a deprecated model. We resolved all 19 -latest aliases in the OpenRouter catalogue on 2026-09-15 and found three things worth knowing before you rely on one. None of them are callable under the name you would guess — z-ai/glm-flash-latest returns is not a valid model ID. Every one resolves to a specific pinned model, and the response tells you which. And three of them carry a catalogue price that differs from the model they resolve to — by up to 48% on output. We tested which price you actually pay.
An alias is a promise that something else will be kept current on your behalf. Worth checking what the promise resolves to.
The tilde is not optional
Every alias in the catalogue is listed with a leading tilde — ~z-ai/glm-flash-latest, ~openai/gpt-astra-latest, and so on. That tilde is part of the model ID, and dropping it does not degrade gracefully:
model: "z-ai/glm-flash-latest" -> 400 "z-ai/glm-flash-latest is not a valid model ID"
model: "~z-ai/glm-flash-latest" -> 200 response says model: "z-ai/glm-5.3-flash"
So the natural guess fails outright, which is at least a loud failure rather than a silent one. And the successful response carries the resolution in its model field — the API tells you which concrete model served the request, which is the single most useful habit to build: log that field.
All 19, resolved
Resolved by calling each alias with a trivial prompt and reading back the model field, at 2026-09-15T23:25:39Z. Aliases are pointers, so this table is a snapshot with a shelf life.
| Alias | Resolves to |
|---|---|
~anthropic/claude-fable-latest | anthropic/claude-fable-5.1 |
~anthropic/claude-opus-latest | anthropic/claude-opus-5 |
~anthropic/claude-sonnet-latest | anthropic/claude-sonnet-5 |
~anthropic/claude-haiku-latest | anthropic/claude-haiku-4.5 |
~openai/gpt-astra-latest | openai/gpt-6-astra |
~openai/gpt-latest | openai/gpt-5.6-sol |
~openai/gpt-sol-latest | openai/gpt-5.6-sol |
~openai/gpt-terra-latest | openai/gpt-5.6-terra |
~openai/gpt-luna-latest | openai/gpt-5.6-luna |
~openai/gpt-mini-latest | openai/gpt-5.4-mini |
~google/gemini-flash-latest | google/gemini-3.8-flash |
~google/gemini-pro-latest | google/gemini-3.1-pro-preview |
~deepseek/deepseek-flash-latest | deepseek/deepseek-v4.1-flash |
~deepseek/deepseek-v4-flash-latest | deepseek/deepseek-v4-flash-0731 |
~deepseek/deepseek-pro-latest | deepseek/deepseek-v4-pro-0813 |
~z-ai/glm-latest | z-ai/glm-5.3 |
~z-ai/glm-flash-latest | z-ai/glm-5.3-flash |
~x-ai/grok-latest | x-ai/grok-4.6 |
~moonshotai/kimi-latest | moonshotai/kimi-k3 |
Three price mismatches, and which one bills
Each alias carries its own price in the catalogue. For 16 of the 19 it matches the model it resolves to. For three it does not:
| Alias | Alias price in / out | Target's price in / out | Output gap |
|---|---|---|---|
~z-ai/glm-latest | $0.877 / $2.97 | $1.40 / $4.40 | +48% |
~moonshotai/kimi-latest | $2.10 / $10.95 | $2.648 / $13.28 | +21% |
~deepseek/deepseek-v4-flash-latest | $0.04 / $0.10 | $0.055 / $0.11 | +10% |
A catalogue showing two prices for the same call is not a rounding question, so we sent the identical request down both routes and read the reported cost.
Both routes billed exactly the same: 22 input tokens, 30 output tokens, cost: $0.0001628, whether we called ~z-ai/glm-latest or z-ai/glm-5.3 directly. Reconstruct it at the target's price and it lands precisely: 22 × $1.40 + 30 × $4.40 per million = $0.0001628. Reconstruct it at the alias's listed price and you get $0.0001084, which is not what was charged.
So the practical rule is reassuring and the catalogue entry is not: you are billed at whatever the alias resolves to. If you budgeted from the alias row for ~z-ai/glm-latest, your output cost is 48% higher than you planned. This is the same class of error we keep finding on price pages — see why every LLM price needs a date attached.
Four traps in the mapping
~google/gemini-pro-latestresolves to a preview model. If “latest” reads to you as “stable”, this one is the opposite.- Two DeepSeek aliases that read alike point somewhere very different.
~deepseek/deepseek-flash-latestgives you v4.1-flash;~deepseek/deepseek-v4-flash-latestgives you a dated0731checkpoint. One tracks forward, one is effectively pinned. - Two aliases resolve to the same model.
~openai/gpt-latestand~openai/gpt-sol-latestboth land on gpt-5.6-sol, so the generic “gpt-latest” is not the newest OpenAI model — GPT-6 Astra sits behind~openai/gpt-astra-latestinstead. - Aliases move without telling you.
~google/gemini-flash-latestnow points at Gemini 3.8 Flash, which on our benchmark costs 38% more than 3.7 Flash at the same list price for an identical score. Anyone on that alias absorbed the increase without a deploy.
Pin or alias
- Pin in production. A model swap underneath you changes cost, latency and behaviour with no change on your side, and the Gemini Flash case shows it is not hypothetical.
- Log the
modelfield on every response. It is the only place the resolution is visible, and it costs nothing. - Use aliases for evaluation, not billing. They are a convenient way to always grab a vendor's current flagship for testing.
- Never budget from an alias row. Three of nineteen were wrong on the day we checked.
How we resolved them
Every alias in the catalogue was called once with a two-word prompt at temperature 0 and max_tokens 12, and the model field of the response recorded. Prices come from the same catalogue snapshot, captured 2026-09-15. The billing comparison sent one identical prompt via the alias and via the resolved model and compared the usage.cost field returned by the API. All of it goes through OpenRouter; the mapping is a property of that catalogue, not of the model vendors. Our benchmark methodology is separate and lives on the methodology page.
What we did not test
- Every alias's billing. We reconstructed the cost arithmetic for
~z-ai/glm-latest, where it matched the target exactly, and confirmed identical charges for~moonshotai/kimi-latestvia both routes. We did not reconstruct all nineteen. - Other providers' aliases. This is the OpenRouter catalogue. Calling a vendor API directly is a different namespace.
- How often they move. We have one snapshot, not a history.
- Whether the catalogue prices get corrected. Three were wrong on 2026-09-15; they may not be tomorrow.
FAQ
What does claude-sonnet-latest resolve to? anthropic/claude-sonnet-5, as of 2026-09-15.
Why does my -latest model ID return an error? The catalogue IDs carry a leading tilde. z-ai/glm-flash-latest is invalid; ~z-ai/glm-flash-latest works.
Do I get billed at the alias price or the real model price? The real model. We sent the same request both ways and both cost $0.0001628, which reconstructs exactly at the target's rate.
Is gpt-latest the newest OpenAI model? No. It resolves to gpt-5.6-sol. GPT-6 Astra is behind ~openai/gpt-astra-latest.
Should I use aliases in production? We would not. Pin the version and log the model field, so a swap underneath you is visible rather than silent.
Evidence: dated measurements and catalogue fields; method, latency statistics and limitations. Measurements describe these runs, not all providers or future versions.
DataLLM Lab