← all posts
// models · openai

GPT-4o and GPT-4.1 shut down on January 14: GPT-6 Luna is cheaper, until it starts reasoning

On October 14, 2026, OpenAI notified developers that five GPT-4-series snapshots are deprecated and will be removed from the API on January 14, 2027. Every row in the deprecation table points to the same replacement: gpt-6-luna. Fine-tuned versions of these models follow the same schedule as their base models.

This matters most to teams that never moved off GPT-4o or GPT-4.1 because "it works": long-lived prompts, eval suites tuned against one model's quirks, and fine-tunes. On paper the migration is a 20x price cut. In practice Luna is a reasoning model that defaults to medium effort, can't be fine-tuned, and has a tool-calling restriction on Chat Completions. As of today (October 24) you have 82 days, and a holiday freeze sits inside them.

What actually shipped

From the deprecations page, entry dated 2026-10-14:

SnapshotShutdownReplacement
gpt-4o-2024-08-06, gpt-4o-2024-11-202027-01-14gpt-6-luna
gpt-4o-mini-2024-07-182027-01-14gpt-6-luna
gpt-4.1-2025-04-142027-01-14gpt-6-luna
gpt-4.1-mini-2025-04-142027-01-14gpt-6-luna

The undated aliases (gpt-4o, gpt-4.1 and so on) are not listed in that entry. All four model pages label the models "Deprecated", though. I'd treat the aliases as going away on the same day.

From the gpt-6-luna model page: 1,050,000-token context, 128,000 max output, knowledge cutoff May 18, 2026, image input supported, structured outputs and function calling supported, and fine-tuning not supported. Reasoning effort ranges from none to max, with medium as the default. One line is easy to miss: on Chat Completions, function calling is supported only when reasoning effort is none. The Responses API supports it in general.

Numbers that matter

List prices per 1M tokens, Standard tier, from the model pages and the pricing page:

ModelInputCached inputOutput
gpt-4o$2.50$1.25$10.00
gpt-4.1$2.00$0.50$8.00
gpt-4.1-mini$0.40$0.10$1.60
gpt-4o-mini$0.15$0.075$0.60
gpt-6-luna$0.10$0.01 (writes $0.125)$0.50

Luna's Batch/Flex rates are half of Standard and its Fast tier is double. Note that Luna bills cache writes at $0.125/M, which is above its uncached input price.

Illustrative cost example (my assumptions, not OpenAI's)

A request with 3,000 input tokens and 500 visible output tokens, no caching:

ModelInput + outputPer request
gpt-4o3,000 × $2.50/M + 500 × $10/M = $0.0075 + $0.0050$0.0125
gpt-4.1$0.0060 + $0.0040$0.0100
gpt-4.1-mini$0.0012 + $0.0008$0.0020
gpt-4o-mini$0.00045 + $0.00030$0.00075
gpt-6-luna, effort none$0.0003 + $0.00025$0.00055
gpt-6-luna, effort medium with 2,000 reasoning tokens (my guess at the count)add 2,000 × $0.50/M = $0.001$0.00155

The reasoning guide says reasoning tokens are billed as output tokens and count toward max_output_tokens. That changes the comparison. Against gpt-4o, Luna is about 8x cheaper on this shape even at medium effort. Against gpt-4o-mini, Luna at none saves $0.0002 per request. That headroom is gone after 400 reasoning tokens ($0.0002 ÷ $0.50/M). Above that, the "cheaper" replacement costs more than what you have now.

Against gpt-4o-mini, the headroom is gone after 400 reasoning tokens; above that, the "cheaper" replacement costs more than what you have now.

Technical meaning and trade-offs

This crosses model classes. GPT-4o and 4.1 don't reason. Luna does, unless you set effort to none. Prompts written for older models often include "think step by step" scaffolding that a reasoning model doesn't need. Leaving it in can inflate token counts or change output style. My read: run the first pass at none to see the drop-in behaviour, then raise effort only where evals show it pays.

Tool calling on Chat Completions is the trap. If your agent loop uses /v1/chat/completions with tools and you take Luna's default effort, you're outside what the model page says is supported. You have two options: pin reasoning.effort to none, or move to the Responses API. Moving to Responses is a bigger change than a model-ID swap. Budget for it separately. I covered effort-switching mechanics in GPT-6 Sol and Luna: effort without cache invalidation.

Fine-tunes have no like-for-like path. Fine-tuned 4o, 4o-mini, 4.1 and 4.1-mini models die on January 14, and Luna can't be fine-tuned. You have to rebuild that behaviour with prompting, few-shot examples, structured outputs or retrieval, and then prove it with evals. This is the long pole for most teams.

Truncation semantics change too. Reasoning tokens consume max_output_tokens, and the reasoning guide notes that a response can end incomplete before any visible output. Code that set max_tokens: 300 for a 4o classifier can now return empty answers. And caches go cold: a new model means new prompt-cache entries, and with Luna's write premium, the first days after cutover cost more than steady state.

What I'd do

Inventory today. Grep code, config and secrets for every 4o/4.1 snapshot and alias, including fine-tune IDs (ft:gpt-4o…), and pull 30 days of usage per model ID from billing so you know which call sites carry real traffic. Then freeze a golden set per call site: capture 200 to 500 real production inputs with current outputs before anything changes, because old-model outputs become unreproducible after January 14.

Run the eval harness at none first, then low/medium. For each, record task score, schema-validation pass rate, tool-call argument validity, p95 latency, and actual reasoning tokens from the usage field, then redo the cost arithmetic above with your numbers. Fix Chat Completions + tools explicitly: pin effort to none or migrate to Responses, and never ship the default by accident. Raise max_output_tokens wherever reasoning is on, and alert on incomplete responses.

Do fine-tunes first. Start the prompt-only rebuild now; it's the step most likely to need iteration. Target cutover for the week of December 7. Ship behind a flag with per-call-site rollback, and keep the old model live until the shutdown date. That leaves a margin for the holiday freeze. The general pattern is the same one I used for the GPT-5.6 family migration.

What I couldn't verify

I couldn't confirm whether the undated aliases (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini) are covered; the October 14 entry lists only dated snapshots. Typical reasoning-token counts for Luna at each effort level are unknown, since OpenAI doesn't publish them, and the 2,000 above is a placeholder. Whether Luna honours temperature/top_p at each effort level is open too; the model page and reasoning guide don't say. Nor is there any quality comparison between Luna and 4o/4.1 on your tasks. OpenAI recommends it as the replacement but publishes no head-to-head numbers on the deprecation page.

I'll revisit if OpenAI extends the date or adds fine-tuning to Luna.

Sources

Primary: OpenAI API: Deprecations; OpenAI API: Pricing; OpenAI API: GPT-6 Luna model page; OpenAI API: GPT-4o model page; OpenAI API: GPT-4o mini model page; OpenAI API: GPT-4.1 model page; OpenAI API: GPT-4.1 mini model page; OpenAI API: Reasoning guide.

#openai#migration#pricing