Skip to content
Nilay Kabariya

Entry No.059·AI·Updated ·4 min read

OpenAI Oct 23 model shutdown: the 404, list, replacements

gpt-3.5-turbo, gpt-4, o1, o3-mini and more stopped working on October 23, 2026. The real error, tested after the shutdown, and a check that misleads.

The error, verbatim

Jump to the fix ↓
NotFoundError: 404 The model `gpt-3.5-turbo` has been deprecated, learn more here: https://platform.openai.com/docs/deprecations

Tested on

openai (npm)
7.32.0
API key
new project, $0 credit balance
Node / OS
24.14.0 / Windows 11 Pro
Date
October 11, 23 and 25, 2026
Contents
  1. What your app gets now01
  2. Which models, and what replaces them02
  3. models.retrieve still lists the dead models03
  4. Why a key with no credits still shows the 40404
  5. What I couldn’t test05
  6. How this was tested06

On October 23, 2026, OpenAI shut down a long list of models, including the ones most old tutorials and side projects still call: gpt-3.5-turbo, gpt-4, gpt-4-turbo, o1, o3-mini and o4-mini. More follow on December 1 and December 11. The dates and replacements below are from OpenAI’s deprecations page.

I called these models every 15 minutes through the shutdown, from a new API project with no credits at all. Here’s what changed, and when.

What your app gets now

Every call to a shut-down model fails with a 404:

NotFoundError: 404 The model `gpt-3.5-turbo` has been deprecated, learn more here: https://platform.openai.com/docs/deprecations

In the SDK it’s a NotFoundError, with status 404 and code model_not_found. On October 25, I got exactly this for gpt-3.5-turbo, gpt-3.5-turbo-0125, gpt-4, gpt-4-turbo, gpt-4o-2024-05-13, gpt-4.1-nano, o1, o1-pro, o3-mini and o4-mini. client.responses.create() with o3-mini returned the same 404, so moving to the Responses API doesn’t bring a model back.

All of them stopped at once. At 17:10 UTC on October 23 (10:10 AM in San Francisco), each call still got past the model check and failed only on my missing credits. At the next check, at 17:25 UTC, every one returned the 404.

Before the shutdown, gpt-4, gpt-4-turbo and o1-pro gave a different 404 to my new project: does not exist or you do not have access to it. Now they say has been deprecated too.

The 404 says What it means
has been deprecated, learn more here OpenAI shut the model down for everyone
does not exist or you do not have access to it Your project can’t use it: a typo, no access, or a model it never had

Which models, and what replaces them

These are OpenAI’s own recommended replacements:

Shut down October 23 Replacement
gpt-3.5-turbo, gpt-3.5-turbo-0125 gpt-5.6-terra
gpt-4, gpt-4-0613, gpt-4-1106-preview gpt-5.6-sol
gpt-4-turbo, gpt-4-turbo-2024-04-09 gpt-5.6-sol
gpt-4o-2024-05-13 gpt-5.6-sol
gpt-4.1-nano, gpt-4.1-nano-2025-04-14 gpt-5.6-luna
o1, o1-2024-12-17, o3-mini gpt-5.6-sol
o1-pro gpt-5.6-sol with reasoning.mode: pro
o4-mini gpt-5.6-terra
gpt-image-1 gpt-image-2.5-sunburst or gpt-image-2.5-flare

Swapping is a one-line change where your code names the model:

model: 'gpt-5.6-terra', // was 'gpt-3.5-turbo'

Fine-tuned models built on these (ft-gpt-3.5-turbo, ft-gpt-4, ft-gpt-4.1-nano, ft-o4-mini, ft-babbage-002, ft-davinci-002) were shut down the same day.

Then on December 1: gpt-image-1-mini, gpt-image-1.5 and chatgpt-image-latest. On December 11: the dated gpt-5-2025-08-07, gpt-5-mini, gpt-5-nano and gpt-5-pro snapshots, plus o3 and o3-pro.

models.retrieve still lists the dead models

This version of the post recommended a free check with models.retrieve, which reads a model’s details without generating anything. After the shutdown, that check is wrong. On October 25, models.retrieve still returned gpt-3.5-turbo, o1, o3-mini, o4-mini and gpt-4.1-nano as if nothing had happened, and models.list still included them. Only a real call showed they were gone.

Check with a call instead. One message with a tiny max_completion_tokens costs almost nothing, and on a key with no credits it costs nothing:

import OpenAI from 'openai';
const client = new OpenAI({ maxRetries: 0 });

for (const model of ['gpt-3.5-turbo', 'o3-mini', 'gpt-5.6-terra']) {
  try {
    await client.chat.completions.create({ model, messages: [{ role: 'user', content: 'OK' }], max_completion_tokens: 16 });
    console.log(`works  ${model}`);
  } catch (e) {
    console.log(e.status === 404 ? `GONE   ${model}` : `exists ${model} (${e.status})`);
  }
}

Run it with the key your production app actually uses. Before the shutdown, my new project already couldn’t see gpt-4 while older projects still used it.

Why a key with no credits still shows the 404

OpenAI checks a request in this order: first whether the model exists for your project, then whether you have credits, and only then the parameters. With a $0 balance, every call to a model that exists failed with 429 You have no credits remaining, even one with temperature: 5 or a made-up parameter. Calls to a missing or shut-down model failed with the 404 instead.

That order matters when you’re debugging. A 429 credit_balance_exhausted doesn’t prove your parameters are right, and it hides parameter errors until there’s money in the account.

What I couldn’t test

Whether your code keeps working after you swap the name. OpenAI only validates parameters like max_tokens, temperature or functions after the credit check, so a free key can’t show which of them the new models reject, or how their answers differ. Try the switch on a staging key with a small budget.

How this was tested

A new OpenAI API project with no credits, openai 7.32.0 on Node 24.14.0, Windows 11 Pro. On October 11, every model was checked with models.list, models.retrieve and a one-message Chat Completions call. From October 22 to 23, a script made the same call to each shut-down model every 15 minutes and logged every change with its UTC time. On October 25, I repeated all three checks. The shutdown dates and replacements are OpenAI’s, quoted from its deprecations page. No credits were spent. The scripts and the full log are public.

— N.K., end of entry No.059

Useful? Pass it on:Post on XFollow @EmotionalMatter

Related entries

  1. No.060

    Claude "temperature is deprecated for this model" (400)

    Switching to Claude Sonnet 5.5, Haiku 5.5 or Opus 4.7 breaks code that sets temperature, even temperature: 0. Every case tested, in Node and Python.

    > BadRequestError: 400 {"type":"error","error":{"type":"invalid_request_error","message":"`temperature` is deprecated for this model."}}

    AI4 min
  2. No.088

    Responses.create() unexpected keyword argument: new names

    max_tokens, messages, response_format, seed: their names in OpenAI's Responses API, tested. Plus the 'proxies' TypeError from httpx 0.28.

    > TypeError: Responses.create() got an unexpected keyword argument 'max_tokens'

    AI6 min
  3. No.049

    Gemini 2.5 Flash "no longer available to new users": the fix (404)

    New Gemini API keys get a 404 on 2.5 Flash and Pro. Which model names answer instead, tested, and why December 1 quietly moves old keys to Flash-Lite.

    > {

    AI5 min

Post card · Every Sunday

What broke this week.

One email on Sundays: the Node, TypeScript, Python and AI SDK releases that broke builds that week, each one reproduced, with a link to the fix that worked. Never shared, and you can leave any time.

— Nilay

or follow by RSSor on X

By subscribing you agree to the privacy note. One click to leave.

tip: paste the exact error text