TokenPad

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.

The message you are seeing

OpenAI
The model `gpt-5-turbo` does not exist or you do not have access to it.
Anthropic
not_found_error: model: claude-3-opus-20240229

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. 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. 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. 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. 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

  1. 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.
  2. 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.

  3. 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

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.