5 min read · updated 2026-10-18 · reviewed

OpenAI API "model not found" error: causes and fixes

"The model does not exist or you do not have access to it" is one of the most common API errors, and it almost never means the model is gone. It means this request, with this key, sent to this URL, named an ID the server cannot call. Work through the checks below in order: most cases end at step one or two.

Editorial note

Written by Model.sale Engineering and reviewed against first-party documentation on 2026-10-18. Comparisons use the billing rules visible on the linked sources and do not claim universal model equivalence.

What the error actually says

The server received your request and understood the key, then could not find a callable model under the name you sent. On an OpenAI-compatible API it is an HTTP 404 with the code model_not_found. On Model.sale the message reads: The model '<id>' does not exist or is not available. GET /v1/models lists callable models.

Tell it apart from neighbours. 401 invalid_api_key is a key problem. 403 model_not_allowed means the key exists but is restricted to other models. 404 on a path such as /v1/response (a typo in the endpoint) is a URL problem, not a model problem. Reading the status and the code first saves most of the debugging.

1. Copy the ID from the list, not from memory

Model IDs are exact strings: lowercase, hyphens, no spaces. gpt-6-sol works, "GPT-6 Sol", gpt6-sol and gpt_6_sol do not. Names shown in a UI or an article are display names. Ask the server what it can call: curl https://api.model.sale/v1/models -H "Authorization: Bearer $MODEL_SALE_KEY" returns the live IDs, and the model pages on the site show the same strings.

Aggregators often add a vendor prefix such as openai/gpt-6-sol. Model.sale IDs have no prefix, so a name copied from an OpenRouter example needs the prefix removed. The reverse also applies: a bare ID sent to a prefix-based service is not found.

2. The model may be temporarily unavailable

Models are routed to upstream capacity that can fail. Model.sale checks every model continuously and removes one from GET /v1/models while its checks fail; a request for it returns this same 404 until it is restored. If a model that worked yesterday is missing from the list, it is usually this, not a typo. Switch to a sibling model (for example gpt-6-sol instead of gpt-6.1-sol) and retry later.

Old snippets are the other source of this. A tutorial or an agent config that hard-codes an ID from a few months ago keeps failing after that ID is renamed or retired. Use the list as the source of truth and keep the ID in one config value, not scattered through the code.

3. Check what the key is allowed to call

A scoped key can carry an allowed-model list. A request for any other model fails with 403 model_not_allowed, and some clients show that as "model not found". Open Dashboard, API keys, and compare the key's allowed models with the ID you send. This is the usual cause when one project works and another, using a different key, does not.

Also confirm the key belongs to the account you funded. A key from an old test account can authenticate and still have nothing it may call.

4. Make sure the request goes to the right base URL

The classic mistake is a client that ignores your base URL and talks to the default endpoint. The default server then looks up gpt-6-sol, does not know it and answers model not found. Check that the base URL is https://api.model.sale/v1 and that the tool really uses it: print the URL in your SDK debug logging, or call the endpoint with curl first.

Per client: the official SDKs read OPENAI_BASE_URL, older wrappers read OPENAI_API_BASE, Cursor needs Override OpenAI Base URL turned on, and Codex CLI needs a custom provider with base_url and wire_api = "responses". Cursor and similar editors also keep their own model list, so add the custom model name there as well. The base URL guide in the blog walks through each client.

5. Match the endpoint to the model

Models list the endpoints they support, usually /v1/responses and /v1/chat/completions. A client that insists on one endpoint, such as an older plugin that only speaks Chat Completions, may fail on a model that only has the other. The model page on the site shows the validated endpoints; pick a model that supports the one your tool uses.

A 30-second checklist

First, read the status and code. Second, call GET /v1/models with the same key and confirm the ID is in the list, character for character. Third, check the key's allowed models in the dashboard. Fourth, confirm the request really reaches api.model.sale. Fifth, retry with a tiny prompt such as "Say hello" before blaming the model.

If the ID is in the list, the key allows it and the URL is right, and you still get 404, keep the request ID from the x-model-sale-request-id response header and contact support with it. Do not paste your key or prompts into the message.

Sources and further reading

Checked on 2026-10-18. These links support the factual comparisons in this article; pricing and terms may change.

Use the numbers on your own workload

Open the cost calculator, choose a live model and enter a representative input/output mix before deciding.

Open cost calculator
← All guides