Openai Legacy Snapshot Pinning Shutdown Audit 2026
- Date: 2026-08-14
- Track: api-backed-poc
- Endpoints used:
GET https://api.openai.com/v1/models,POST https://api.openai.com/v1/responses - Account: one standard Effloow OpenAI API account (not organization-verified for restricted models)
- Purpose: check, against the live API rather than the docs page, (a) which snapshot IDs on OpenAI's two 2026 shutdown lists are still served today, and (b) what the undated aliases (
gpt-5,gpt-5-mini,gpt-5-nano,gpt-5-pro,o3) actually resolve to. - Safety boundary: prompts were the literal string
Reply with the single word: ok(and a repeated variant). No confidential, customer, credential, or private data was sent. No API key appears in this note or in the saved artifact. - Raw artifact:
data/lab-runs/openai-legacy-snapshot-pinning-shutdown-audit-2026.openai.json
Reference source
Deprecation dates, ID lists, and replacement mappings come from https://developers.openai.com/api/docs/deprecations, fetched 2026-08-14.
- Wave 1 shutdown 2026-10-23 (announced 2026-04-22): legacy GPT/o-series snapshots and fine-tuned variants.
- Wave 2 shutdown 2026-12-11 (announced 2026-06-11):
gpt-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-10.
Command 1 — list what this account can actually see
req = urllib.request.Request(
"https://api.openai.com/v1/models",
headers={"Authorization": f"Bearer {key}"},
)
ids = sorted(m["id"] for m in json.load(urllib.request.urlopen(req))["data"])
Result: 126 model IDs returned.
Presence check against the two shutdown lists:
| Model ID | Wave | Still listed 2026-08-14 |
|---|---|---|
gpt-3.5-turbo-0125 |
1 (2026-10-23) | yes |
gpt-4-0613 |
1 | yes |
gpt-4-1106-preview |
1 | no |
gpt-4-turbo |
1 | yes |
gpt-4.1-nano |
1 | yes |
gpt-4o-2024-05-13 |
1 | yes |
gpt-image-1 |
1 | yes |
o1-2024-12-17 |
1 | yes |
o1-pro-2025-03-19 |
1 | yes |
o3-mini-2025-01-31 |
1 | yes |
o4-mini-2025-04-16 |
1 | yes |
gpt-5-2025-08-07 |
2 (2026-12-11) | yes |
gpt-5-mini-2025-08-07 |
2 | yes |
gpt-5-nano-2025-08-07 |
2 | yes |
gpt-5-pro-2025-10-06 |
2 | yes |
o3-2025-04-16 |
2 | yes |
o3-pro-2025-06-10 |
2 | no |
Replacements gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna, gpt-image-2 are all present.
The bare string gpt-5.6 is not a valid ID on its own.
Command 2 — what do the undated aliases resolve to?
payload = {"model": "gpt-5", "input": "Reply with the single word: ok",
"max_output_tokens": 16, "reasoning": {"effort": "low"}}
# read response["model"] from the Responses API result
Requested model |
model field in the response |
On a shutdown list? |
|---|---|---|
gpt-5 |
gpt-5-2025-08-07 |
yes — 2026-12-11 |
gpt-5-mini |
gpt-5-mini-2025-08-07 |
yes — 2026-12-11 |
gpt-5-nano |
gpt-5-nano-2025-08-07 |
yes — 2026-12-11 |
gpt-5-pro |
gpt-5-pro-2025-10-06 |
yes — 2026-12-11 |
o3 |
o3-2025-04-16 |
yes — 2026-12-11 |
gpt-5-2025-08-07 |
gpt-5-2025-08-07 |
yes — 2026-12-11 |
gpt-5.6-sol |
gpt-5.6-sol |
no |
All five undated aliases in the gpt-5 / o3 families resolved, on this account on this date,
to exactly the dated snapshot scheduled for removal on 2026-12-11.
Requests with max_output_tokens: 16 returned status: "incomplete" on the reasoning models.
That is expected at that ceiling and does not affect the resolved model ID, which was the thing
under test.
Command 3 — token cost of the reasoning.mode: "pro" swap
gpt-5-pro-2025-10-06 and o3-pro-2025-06-10 are both documented as replaced by
gpt-5.6-sol with reasoning.mode: pro — a parameter, not a model. Same prompt,
same model ID, only the reasoning object differs:
| Prompt | Reasoning object | input_tokens | output_tokens |
|---|---|---|---|
Reply with the single word: ok (13 tok) |
{"effort": "low"} |
13 | 5 |
| same | {"mode": "pro"} |
1530 | 30 |
| same string repeated 20x (167 tok) | {"effort": "low"} |
167 | 5 |
| same repeated string | {"mode": "pro"} |
2145 | 30 |
Observed overhead on this account: +1,517 input tokens on the short prompt and +1,978 on the longer one. Two request pairs only. This is not a benchmark and says nothing about output quality.
Command 4 — error shapes an audit script must distinguish
| Requested model | HTTP | Error |
|---|---|---|
gpt-5-2025-08-08 (does not exist) |
400 | model_not_found — "The requested model 'gpt-5-2025-08-08' does not exist." |
o3-pro-2025-06-10 |
404 | "Your organization must be verified to use the model o3-pro-2025-06-10." |
The o3-pro failure is an entitlement message, not a deprecation message. A probe-based
audit cannot tell "retired" from "not entitled on this account" from the error alone.
What failed / could not be established
- Could not test
o3-pro-2025-06-10behaviour at all: this account is not organization-verified. - Cannot generalise the 126-model list beyond this account and date.
/v1/modelsis account-scoped. - No latency, quality, or cost-parity comparison between any retiring snapshot and its replacement was attempted. That remains [DATA NOT AVAILABLE].
- Fine-tuned models on retiring bases were not tested; this account holds none.
- Alias resolution is observed behaviour on 2026-08-14, not a documented contract. OpenAI can repoint an alias at any time, which is exactly why the observation is worth re-running rather than trusting.
Read the article
This note supports the public article and records what was actually checked.
Get the runs we publish next
One short weekly dispatch with new guides, tools, and what we actually tested. No spam, unsubscribe anytime.