LLM API error · 404
Model not found (404)
The model name is wrong, retired, or not available to your account. How to tell which, and why pinned versions cause this months after they worked.
What it means
The model identifier in your request does not resolve to something your account can use. The wording deliberately covers two different situations, because the provider will not confirm whether a model exists to an account without access.
The most common version of this appears months after the code last worked, when a model reaches the end of its deprecation period.
Why it happens
Most likely cause first.
- 1
The model was retired
Deprecation windows are typically months, not years. Anything pinned to a specific version carries a scheduled expiry that most teams do not track.
- 2
A typo or an invented name
Model identifiers are inconsistent across providers and easy to half-remember. Names that sound plausible frequently do not exist.
- 3
The model requires access you do not have
Some models are gated by tier, region or an approval process. The error is deliberately identical to a non-existent model.
- 4
Wrong endpoint for the model type
Calling a chat model on a completions endpoint, or an embedding model on a chat endpoint, produces the same message on some providers.
How to fix it
Check the exact identifier against current documentation
Not against a blog post or an example from a year ago. The provider’s own model list is the only authority, and it changes.
LLM Model FinderSet a budget and a context requirement, get the shortlist. Sorted by your own input-to-output ratio.Check whether the model was deprecated
Providers publish deprecation schedules. If the code worked before and fails now with nothing changed on your side, this is the reason.
Migrate deliberately, not by renaming
A different model tokenizes differently, responds differently and prices differently. Re-measure your token counts and re-run your evaluations rather than swapping the string.
LLM Token CounterReal BPE tokenization, not characters ÷ 4. Shows which counts are exact and which are estimates.
Stopping it happening again
- Pin an explicit model version in production rather than a "latest" alias — an alias that moves under you changes behaviour and cost with no deployment on your side.
- Track deprecation announcements for the models you depend on, and treat migration as scheduled work rather than an incident.
- Keep an evaluation set so a forced migration can be validated in an afternoon instead of shipped on hope.
Tools that help
- LLM Model FinderSet a budget and a context requirement, get the shortlist. Sorted by your own input-to-output ratio.
- LLM Token CounterReal BPE tokenization, not characters ÷ 4. Shows which counts are exact and which are estimates.
- Evaluation Dataset BuilderCases with expected outputs and difficulty, exported three ways.
Frequently asked questions
- Why does the error not tell me whether the model exists?
- Deliberate. Confirming that a gated model exists would leak information about unreleased products, so the same message covers "no such model" and "no access for you".
- Should I use a "latest" alias to avoid this?
- It avoids this error and introduces a worse one: your model changes without a deployment, taking behaviour and cost with it. Pin the version and handle migration as planned work.