The model does not exist or you do not have access to it

This error has one wording and four causes: the ID was retired, your project is not allowed to use it, you called the wrong API surface, or a gateway rewrote the name on the way through. The retirement calendar moved a lot in 2026, so start there.

By the Continuum team. We build a workbench that runs Claude Code, Codex, and their peers, so the model rates quoted here are the ones our own cost analytics ship with.

The short version

The classic form is a 404 with code: model_not_found reading The model \`X\` does not exist or you do not have access to it. On Anthropic the equivalent is a 404 not_found_error whose message is just model: claude-sonnet-4-20250514, and on Gemini it is model_not_found with a 404. The four causes are a retired or renamed ID, a project or org that lacks access to a model that does exist, the wrong API surface for that model, and a gateway model-name mapping problem. The last two are the ones that waste the most time, because the model genuinely exists and your ID is genuinely correct.

What you need to know
  • Check the retirement date first. 2026 retired a great deal, and a working ID can stop working overnight.
  • A 403 with code: model_not_found means the model exists and your project cannot use it. Different fix entirely.
  • Anthropic returns 404 not_found_error with the bare model string, not a 400.
  • gpt-5.6-cyber is Responses-only and approval-gated. Surface and entitlement are separate gates.
  • OpenRouter slugs are vendor/model, and aliases silently resolve, so a wrong-punctuation slug may work.
  • LiteLLM needs a provider prefix. Without one you get LLM Provider NOT provided, not a 404.
  • A base_url missing or doubling /v1 gives you a 404 with an HTML body. Not a model problem at all.

The model does not exist or you do not have access to it

One message, three providers, four causes. The message itself does not distinguish "no such model" from "not yours", which is the root of the confusion.

The OpenAI form. Long-standing and widely reproduced, though OpenAI does not document this row on its error-codes page.
{
  "error": {
    "message": "The model `gpt-5.2` does not exist or you do not have access to it.",
    "type": "invalid_request_error",
    "param": null,
    "code": "model_not_found"
  }
}
How each provider says it.checked aug 2026
ProviderStatusBody
OpenAI, unknown or retired ID404code: model_not_found, message as above
OpenAI, project lacks access403Project \`proj_id\` does not have access to model \`X\`, also code: model_not_found
Anthropic404{"type":"not_found_error","message":"model: claude-sonnet-4-20250514"}
Gemini (Interactions API)404code: "model_not_found", "The specified model was not found."
OpenRouter404{"error":{"message":"Model not found: openai/gpt-nope-9000","code":404}}
LiteLLM, no provider prefix400LLM Provider NOT provided... (a BadRequestError, not a 404)

Cause one: the ID was retired

This is the single most common cause in 2026, because all three providers retired a great deal of their previous generation. A retirement is not a soft failure: on the day, requests stop working. Our model directory keeps one card per live identity with its canonical id and known aliases, which is a faster way to confirm a replacement than reading three deprecation pages.

OpenAI

OpenAI shutdowns, checked 19 August 2026 against the deprecations page. Everything above the line already 404s.
ShutdownModelsReplacement
2026-07-23 (done)gpt-5-codex, gpt-5.1-codex, gpt-5.1-codex-max, gpt-5.2-codex, gpt-5-chat-latest, gpt-5.1-chat-latest, computer-use-preview-2025-03-11GPT-5.6 family
2026-08-10 (done)gpt-5.2-chat-latest, gpt-5.3-chat-latestgpt-5.6-sol
2026-08-26Assistants APIResponses and Conversations API
2026-09-28gpt-3.5-turbo-instruct, babbage-002, davinci-002, gpt-3.5-turbo-1106gpt-5.6-terra
2026-10-23gpt-4-turbo, gpt-4-0613, gpt-4o-2024-05-13, gpt-4.1-nano, o1-2024-12-17, o3-mini-2025-01-31, o4-mini-2025-04-16GPT-5.6 family
2026-12-11gpt-5-2025-08-07, gpt-5-mini-2025-08-07, gpt-5-nano-2025-08-07, gpt-5-pro-2025-10-06, o3-2025-04-16, o3-pro-2025-06-10gpt-5.6-sol / -terra / -luna

The current lineup is three text models: gpt-5.6-sol, gpt-5.6-terra, and gpt-5.6-luna, with gpt-5.6 aliasing to Sol. A change worth noting if your code pins snapshots defensively: the model pages list only bare IDs, with no dated snapshot variants of the GPT-5.6 family. Note also that the undated gpt-4o and gpt-4o-mini aliases are not on the deprecation list; only gpt-4o-2024-05-13 is.

Anthropic

Claude retirements. Requests to these fail today.
Model IDRetired
claude-opus-4-1-202508055 August 2026
claude-opus-4-2025051415 June 2026
claude-sonnet-4-2025051415 June 2026
claude-3-haiku-2024030720 April 2026
claude-3-7-sonnet-2025021919 February 2026
claude-3-5-haiku-2024102219 February 2026
claude-3-opus-202402295 January 2026

Current IDs are claude-fable-5, claude-opus-5, claude-sonnet-5, and claude-haiku-4-5-20251001. Two things to know: from the 4.6 generation onward the IDs are dateless but still pinned snapshots rather than evergreen pointers, and the nearest retirement floor on a currently active model is claude-sonnet-4-5-20250929, not before 29 September 2026. Anthropic commits to at least 60 days of notice for publicly released models, and Bedrock and Google Cloud run their own schedules that can differ.

Gemini

The 2.0 Flash family (gemini-2.0-flash, -001, -lite, -lite-001) shut down on 1 June 2026, replaced by 3.6 Flash and 3.1 Flash-Lite. gemini-3-pro-preview went on 9 March 2026 in favour of gemini-3.1-pro-preview, and the imagen-4.0-*-001 models went on 17 August 2026. Google's wording is worth internalising: the published dates "indicate the earliest possible dates on which a model might be retired", so treat them as a floor and not a promise.

Cause two and three: entitlement, and the wrong surface

The model exists. You still cannot call it. Two separate gates, and they are easy to confuse because both can produce a 404-shaped complaint.

Entitlement

  • Project-level model access. An OpenAI project can be restricted to a subset of models. Calling one outside it returns 403 with Project \`proj_id\` does not have access to model \`X\`. Fix it in the project's allowed-models setting, not in your code.
  • Approval-gated models. gpt-5.6-cyber and the Daybreak family are the clear current example: the docs say plainly that the model "requires separate approval and provisioning" and point at an application form. No amount of correct spelling gets you in.
  • Organization verification. OpenAI has historically gated some capabilities, streaming on frontier models among them, behind ID verification of the organization. The current GPT-5.6 model pages list no verification requirement, unlike Cyber which states its gate explicitly, so treat this as a possibility to check rather than a certainty.
  • Usage tier. Tiers move rate limits rather than model availability on the current lineup, but a very new model appearing for some accounts and not others is a normal rollout state, not a bug in your code.

The wrong API surface

A model can exist and simply not be served by the endpoint you called. On OpenAI all three GPT-5.6 text models work on /v1/chat/completions, /v1/responses, and /v1/batch, but gpt-5.6-cyber is Responses-only: the docs state that "only the v1/responses endpoint is supported".

There is a subtler version of the same thing that costs real capability rather than returning an error. On Chat Completions, OpenAI documents that function tools are "compatible with reasoning_effort: \"none\" only", while reasoning, persisted reasoning, and Pro mode live on Responses. A tool-calling agent left on Chat Completions therefore runs without reasoning and looks merely worse rather than broken, which is harder to notice than a 404.

Cause four: the gateway rewrote your model name

Every gateway maintains its own namespace, and the translation between yours and theirs is where the last category of these errors lives.

OpenRouter

  • Slugs are vendor/model, for example google/gemini-3.7-flash or anthropic/claude-haiku-4.5. The full list is public and unauthenticated at https://openrouter.ai/api/v1/models, which makes a startup validation check trivial.
  • Aliases resolve silently. The docs give the example of anthropic/claude-3-5-sonnet redirecting to the canonical anthropic/claude-3.5-sonnet. Useful, and a trap: a wrong-punctuation slug can work for months and then stop when the alias is retired.
  • Each model has a canonical_slug that never changes, distinct from the id you send. Pin against the canonical one if you need reproducibility.
  • Variants are suffixes on the slug: :free, :thinking, :batch. A missing suffix is a different model, not a formatting nicety. A leading ~ marks a floating "latest" pointer.
  • The typed error code is not_found with a 404. Other codes in the same family are worth knowing for a failover policy: provider_overloaded at 503, provider_unavailable at 502, and timeout at 504.

LiteLLM

LiteLLM does not return a 404 for an unrecognized name. It raises a BadRequestError because it could not work out which provider you meant, and the message is unusually helpful:

The exact string, from litellm/litellm_core_utils/get_llm_provider_logic.py.
LLM Provider NOT provided. Pass in the LLM provider you are trying to call.
You passed model=gpt-5.6-sol
 Pass model as E.g. For 'Huggingface' inference endpoints pass in
`completion(model='huggingface/starcoder',..)` Learn more:
https://docs.litellm.ai/docs/providers

Resolution runs in order: an explicit custom_llm_provider wins, then a split on the first / to take a provider prefix, then bare-name lookups in per-provider registries, then prefix rules, then a generalization fallback. Only after all of that does it raise. So the fix is nearly always to add the prefix: openai/gpt-5.6-sol rather than gpt-5.6-sol.

The base URL that is not a model problem at all

Worth its own paragraph because it produces a 404 and sends people straight to the model ID. The OpenAI SDK merges a request path onto the base URL's path rather than replacing it: the leading slash on /chat/completions is stripped and the result is appended. So base_url must include /v1.

Two ways to get a 404 that has nothing to do with your model.
# correct
OpenAI(base_url="https://gateway.example.com/v1")
#   -> https://gateway.example.com/v1/chat/completions

# missing /v1: 404
OpenAI(base_url="https://gateway.example.com")
#   -> https://gateway.example.com/chat/completions

# doubled /v1, because the gateway docs said to append it: 404
OpenAI(base_url="https://gateway.example.com/v1/v1")
#   -> https://gateway.example.com/v1/v1/chat/completions

The tell is the body. These 404s usually return HTML from a web server rather than a JSON error object, and the HTML then fails to parse as JSON, so what surfaces in your logs is often a decoding exception rather than a 404 at all.

A diagnostic in four requests

01

List the models your credential can actually see

# OpenAI
curl -sS https://api.openai.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY" | jq -r '.data[].id' | sort

# Anthropic
curl -sS https://api.anthropic.com/v1/models \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" | jq -r '.data[].id'

# OpenRouter, no auth needed
curl -sS https://openrouter.ai/api/v1/models | jq -r '.data[].id' | grep claude

If your ID is absent from the list, it is retired or misspelled. If it is present and the call still fails, you have an entitlement or surface problem and the next steps apply.

02

Read the HTTP status, not just the code

404 means gone or wrong. 403 means the model is live and your project is not allowed to use it. They share code: model_not_found on OpenAI, so the status is the only thing separating them.

03

Check the deprecations page against today

Three pages, one habit: OpenAI at developers.openai.com/api/docs/deprecations, Anthropic at platform.claude.com/docs/en/about-claude/model-deprecations, Google at ai.google.dev/gemini-api/docs/deprecations. Better still, put the models-list assertion in your startup path and never do this manually again.

04

If a gateway is involved, test the provider directly

One call straight to the upstream API with the upstream ID. Working there and failing through the gateway localizes the problem to the mapping layer in a single request, which beats any amount of reading configuration.

Questions people ask

What does model_not_found mean?

That the model ID you sent was not recognized, or was recognized and is not available to you. On OpenAI it comes back as a 404 with code model_not_found and the message "The model X does not exist or you do not have access to it." The four causes are a retired ID, a project that lacks access, the wrong API surface, and a gateway name-mapping problem.

Why did my model ID stop working overnight?

Almost certainly a retirement date. 2026 was heavy: OpenAI shut down the GPT-5 Codex family on 23 July and gpt-5.2-chat-latest and gpt-5.3-chat-latest on 10 August, Anthropic retired claude-opus-4-1-20250805 on 5 August, and Google shut down the Gemini 2.0 Flash family on 1 June. Check the provider deprecations page for the exact ID you are sending.

What is the difference between a 404 and a 403 model_not_found?

A 404 means the ID is wrong or the model is gone. A 403 means the model exists and is live, and the project you are billing to is not entitled to use it, with a body reading "Project proj_id does not have access to model X". Both carry code model_not_found on OpenAI, so the HTTP status is the only thing that tells them apart.

How do I find the correct model ID?

Ask the API rather than a blog post. GET /v1/models on OpenAI and Anthropic returns exactly what your credential can reach, and OpenRouter publishes its full catalogue unauthenticated. The best version of this is a startup assertion that every configured model ID appears in that list, which turns a production 404 into a deploy-time failure.

Why does OpenRouter say my model is not found when the model exists?

Usually the slug format. OpenRouter uses vendor/model and adds variant suffixes such as :free, :thinking, and :batch that are part of the identifier rather than optional decoration. It also resolves some aliases silently, so a slug with the wrong punctuation can work for a while and then stop. Check your slug against openrouter.ai/api/v1/models and pin the canonical_slug if you need stability.

What does "LLM Provider NOT provided" mean in LiteLLM?

LiteLLM could not work out which provider a bare model name belongs to. It resolves the provider from an explicit custom_llm_provider, then from a prefix before the first slash, then from per-provider registries, and raises this BadRequestError when all of them miss. The fix is nearly always to add the prefix, so openai/gpt-5.6-sol rather than gpt-5.6-sol. On a LiteLLM proxy, also check that the alias exists in model_list.

Sources

Every figure above was read from these pages on August 2026. Vendors reprice without notice; if you find a stale number, tell us.

  1. OpenAI deprecations shutdown dates and replacement models
  2. Claude model deprecations retirement dates and the 60-day notice policy
  3. Gemini API deprecations shutdown dates as earliest-possible floors
  4. GPT-5.6 Cyber model reference Responses-only support and the approval gate
  5. OpenRouter API errors the typed error codes including not_found
  6. LiteLLM proxy configuration model_list, model_name aliases, and litellm_params.model
Try it

Catch the rename
at boot, not at 3am.

Continuum drives Claude Code, Codex, and peers under your own subscriptions, with live quota gauges and spend by repo. The app is free. Mac is stable; Windows and Linux desktop are beta.

free app · your subscriptions · local-first