GPT-4 API Deprecation: Five Snapshots Retire in January
OpenAI's October 14 notice sets January 14, 2027 for five GPT-4 snapshots and their fine-tuned versions, with GPT-6 Luna as the recommended replacement.
The GPT-4 API deprecation notice dated October 14, 2026 sets January 14, 2027 as the shutdown date for five named GPT-4o and GPT-4.1 snapshots. OpenAI recommends GPT-6 Luna. Fine-tuned versions of the affected models share that deadline, making this a migration decision for customized applications as well as ordinary API callers.
GPT-4 API deprecation: which snapshots are covered?
The official API deprecations notice identifies these exact model IDs:
| Model family | Affected snapshot |
|---|---|
| GPT-4o | gpt-4o-2024-08-06 |
| GPT-4o | gpt-4o-2024-11-20 |
| GPT-4o mini | gpt-4o-mini-2024-07-18 |
| GPT-4.1 | gpt-4.1-2025-04-14 |
| GPT-4.1 mini | gpt-4.1-mini-2025-04-14 |
This is an announced API shutdown, not a report that those requests have stopped working today. Read the dated IDs before assigning a deadline to an application. A family name alone is too broad to determine which notice applies.
For example, consider two services described internally as “GPT-4o.” One selects the August snapshot and the other selects the November snapshot. Both exact IDs appear here, so they can share a deadline record. A third service with a different dated ID needs its own source check rather than inheriting the record because its display name sounds similar. This is an illustrative configuration review, not a report about tested services.
Keep this event separate from the earlier GPT-5.3-Codex API notice. A migration tracker organized only around the phrase “old OpenAI models” can lose the distinction between independently announced deadlines. Use a row tied to the actual model selection, not a single retirement date for the entire provider.
Trace a fine-tuned model to its base before choosing a path
A customized application needs two identifiers in its migration record: the model it actually requests and the base model used to create it. Retrieve the base information from the team’s training records or model metadata. A friendly name such as “billing-classifier” is not enough to establish which underlying model the application depends on.
Our suggested record has four fields: requested model, documented base snapshot, business behavior added through customization, and the person responsible for that behavior. The third field is the important addition. It turns a training dependency into a concrete product requirement that can be reviewed without assuming the next model reproduces it.
For an illustrative billing classifier, the learned behavior might be assigning a special escalation label when a customer disputes a charge across two workspaces. Document the exact example, the expected label, and the reason the exception exists. Include a nearby example that should receive the ordinary label. That pair exposes the decision boundary instead of preserving only a list of successful outputs.
Also separate learned behavior from application logic. If the application itself inserts an escalation label after checking a payment record, that rule belongs to the application. If the old model supplied the label from the message alone, its behavior needs evaluation in the replacement. This distinction prevents a team from attributing every difference to the model or rewriting a deterministic rule unnecessarily.
GPT-6 Luna is a replacement model, not a transferred fine-tune
The GPT-6 Luna model documentation lists fine-tuning as unsupported. Its recommendation as a replacement therefore does not establish that an existing customized model can be transferred to Luna with the same training configuration.
For a team using learned labels, style rules, or specialized exceptions, the practical question is which requirements can be expressed explicitly and which remain unresolved. Our proposed approach is to write a compact behavior contract before revising prompts. Name the allowed decision, the evidence it needs, and the case that must be handed to a person rather than guessed.
In the billing example, a proposed instruction could say: flag a cross-workspace charge dispute for review when the supplied message identifies both workspaces; do not invent a second workspace. Give the ordinary single-workspace case beside it. This is an original, untested prompt idea. It illustrates how to make one requirement visible; it is not evidence that prompting reproduces the previous fine-tune.
Preserve unsuccessful cases in that record. If the replacement identifies the dispute but fails to keep the workspace distinction, the unresolved requirement remains specific. A broad statement that “the new model is better” would not explain whether this application’s exception survived. Use the Luna model profile for specifications, and the Luna batch guide for the separate structured-output workflow.
Start the GPT-4.x comparison with the recommended effort
OpenAI’s GPT-4.x to Luna migration guidance recommends starting with reasoning effort set to none. It advises comparing representative workloads, then adjusting prompts, effort, and verbosity before gradually moving production traffic. This starting recommendation differs from simply accepting Luna’s default: the model page lists medium as its default effort.
For the customized classifier, begin by comparing the exception pair under that recommended starting setting. If a higher effort is worth testing, keep the input and expected decision unchanged so the comparison answers a particular question: did this setting preserve the cross-workspace exception more reliably? Changing the labels at the same time would instead create a different task.
A second illustrative case is a document extractor customized to retain a reference number from a footer while ignoring similar numbers in the body. Write down both candidate locations and the precedence rule. A result can be syntactically valid while selecting the wrong number. Here, the requirement is evidence selection, not merely valid JSON. The test needs the competing numbers, not a clean document with only one possible answer.
Treat these examples as application-specific evaluation ideas, not measured Luna performance. They are useful because the API notice covers customized models whose value may live in narrow exceptions. A replacement decision should account for those exceptions, rather than only checking whether a standard request returns text.
Keep unresolved customized behavior visible before the deadline
OpenAI’s migration guidance says to compare total task cost on the team’s own workload; token usage and reasoning settings can affect it. That is especially relevant when reproducing a learned rule requires a longer explicit instruction or extra review. Measure the configuration being considered, rather than treating a lower token rate as a guaranteed reduction in application cost.
For each customized requirement, record one of three outcomes: preserved in the evaluated configuration, moved into deterministic application logic, or still requiring human review. Attach the relevant input pair and observed result. A remaining review case then has an owner and a defined handling path, rather than disappearing into a general migration status.
The January deadline should drive that dependency decision. Replacing an exact snapshot and replacing a learned business exception are related tasks, but they are not the same task. The useful migration record names both, keeps the unresolved behavior visible, and makes clear which configuration the team has actually evaluated.