Skip to content

OpenAI model_not_found: the model was retired, so change the model ID

If a request that worked last week now fails with HTTP 404 and error code model_not_found, check the model field first. Per OpenAI's deprecations page (checked 2026-10-27), OpenAI shut down o4-mini, o3-mini, o1, gpt-4-turbo, gpt-4 and gpt-3.5-turbo, among others, on October 23, 2026. Nothing in your key, billing or network changed: the ID in your request no longer names a model, and retrying will not bring it back. This page explains the error, shows what Router One, a unified LLM API gateway, returns for a retired ID, and walks through listing the live models and changing the model field.

What does model_not_found mean?

It means the model ID in your request does not name a model your key can call. On the official OpenAI API it comes back as HTTP 404 with error type invalid_request_error and code model_not_found, and the message names the ID you sent. A typo or wrong capitalization in the ID produces the same error, but if the ID used to work, the usual cause after October 23, 2026 is a retirement. A typical body:

response.json
{
  "error": {
    "message": "The model `o4-mini` does not exist or you do not have access to it.",
    "type": "invalid_request_error",
    "param": null,
    "code": "model_not_found"
  }
}

Which models did OpenAI retire on October 23, 2026?

OpenAI announced these shutdowns on April 22, 2026, and turned access off on October 23, 2026 (OpenAI's deprecations page, checked 2026-10-27). Fine-tuned models follow the shutdown date of their base model. The table lists the substitute OpenAI names for each ID and the ID to send on Router One:

Which models did OpenAI retire on October 23, 2026?
Retired IDOpenAI's substituteRouter One model ID
o4-minigpt-5.6-terraopenai/gpt-5.6-terra
gpt-3.5-turbogpt-5.6-terraopenai/gpt-5.6-terra
o3-minigpt-5.6-solopenai/gpt-5.6-sol
o1gpt-5.6-solopenai/gpt-5.6-sol
gpt-4-turbogpt-5.6-solopenai/gpt-5.6-sol
gpt-4gpt-5.6-solopenai/gpt-5.6-sol

What does Router One return for a retired model?

Also a 404, and it does not pick a model for you. In our test at 2026-10-27 23:43:27 Beijing time (UTC+8), requests for openai/o4-mini and gpt-4-turbo both came back as HTTP 404 with code RESOURCE_NOT_FOUND and the message below; neither request was mapped to a newer model. The fix is the same as on the official API: send a model ID from the live catalog.

response.json
{
  "error": {
    "message": "model 'openai/o4-mini' not supported, check /v1/models for available models",
    "type": "invalid_request_error",
    "code": "RESOURCE_NOT_FOUND"
  }
}

How do I list the models I can call?

Call the models endpoint with your Router One key. Every id it returns is a value you can put in the model field; the /models page shows the same catalog in the browser. Copy IDs exactly, because they are case-sensitive.

terminal.sh
curl https://api.router.one/v1/models \
  -H "Authorization: Bearer sk-your-router-one-key" \
  | jq -r '.data[].id'

How do I change the model field?

Replace the retired ID with one from the list and keep the rest of the request as it is. With an OpenAI SDK pointed at Router One, change only the model argument; the same change with curl:

terminal.sh
curl https://api.router.one/v1/chat/completions \
  -H "Authorization: Bearer sk-your-router-one-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5.6-terra",
    "messages": [{"role": "user", "content": "hello"}]
  }'

Where else can the old model ID hide?

  • Environment variables and config files, such as a MODEL or OPENAI_MODEL setting in .env, a deployment secret or a YAML config.
  • Defaults inside your own wrappers or framework settings, which keep the old ID even after the main code path changes.
  • Fallback lists: a retired ID in second place only fails when the first model errors, so it can stay hidden for days.
  • Fine-tuned models: they stop when their base model is shut down, so retrain on a current model.
  • Search the codebase before deploying, for example: grep -rnE "o4-mini|o3-mini|gpt-4-turbo|gpt-3\.5-turbo" .

What should I test after switching?

A newer model is a different model. Re-run your own evaluation prompts, check output length and format, and recheck any parameter the old model needed, such as reasoning settings or max tokens, before you send production traffic to the new ID.

FAQ

Is model_not_found a key or billing problem?

No. A key problem returns 401 and a billing problem returns its own error. model_not_found means the model ID in the request does not name a model your key can call, which since October 23, 2026 usually means a retired OpenAI model.

Does Router One map o4-mini to a newer model automatically?

No. In our test at 2026-10-27 23:43:27 Beijing time, a request for openai/o4-mini returned HTTP 404 with code RESOURCE_NOT_FOUND and was not routed to another model. You choose the replacement and put its ID in the model field.

Which Router One model ID should replace o4-mini or gpt-4-turbo?

OpenAI names gpt-5.6-terra as the substitute for o4-mini and gpt-5.6-sol for gpt-4-turbo. On Router One those are openai/gpt-5.6-terra and openai/gpt-5.6-sol; confirm them in /v1/models before you deploy.

Can a gateway keep serving a model OpenAI retired?

Not through OpenAI's own API: once OpenAI shuts a model down there, a request for it fails whichever gateway sends it. Cloud platforms that host OpenAI models set their own retirement dates, but Router One's catalog does not list these retired IDs, so on Router One a request for one returns HTTP 404 with code RESOURCE_NOT_FOUND.

How do I catch the next retirement before it breaks production?

Watch OpenAI's deprecations page, which lists each shutdown date months ahead, and check the model IDs your code sends against Router One's /v1/models before each deploy.