o3 vs o3-mini: Costs, Shutdown Dates and What to Use Now
o3-mini shut down Oct 23, 2026 and o3 goes on Dec 11. Per-request costs with reasoning tokens, GPT-6 prices and effort levels, and how to test a switch.
o3 costs $2.00 per million input tokens and $8.00 per million output tokens. o3-mini cost $1.10 and $4.40 until OpenAI shut it down, together with o4-mini, on October 23, 2026. The o3 snapshot follows on December 11, 2026. If your code still names o3-mini, its calls are failing now; the sections below show what the replacements cost.
Below: what each model costs per request once reasoning tokens are counted, what OpenAI's current reasoning models charge for the same work, and how to test a switch. Prices, effort settings and dates were checked on OpenAI's pricing, models, reasoning and deprecations pages on October 24, 2026. All prices are standard rates per million tokens.
Where o3, o3-mini and o4-mini stand today
| Model | Input | Cached input | Output | Shutdown date | OpenAI's recommended replacement |
|---|---|---|---|---|---|
| o3 | $2.00 | $0.50 | $8.00 | December 11, 2026 (snapshot o3-2025-04-16) | gpt-5.6-sol |
| o3-mini | $1.10 | $0.55 | $4.40 | October 23, 2026 | gpt-5.6-sol |
| o4-mini | $1.10 | $0.275 | $4.40 | October 23, 2026 | gpt-5.6-terra |
o3-mini and o4-mini are deprecated, and so is o3-2025-04-16, the default and only snapshot listed on the o3 model page. In OpenAI's terms, a deprecated model has a shutdown date and is no longer accessible after it. As of October 12, that leaves 11 days for o3-mini and o4-mini and 60 days for o3.
Until then, work that can wait costs half as much through the Batch API: $1.00 input and $4.00 output for o3, and $0.55 and $2.20 for o3-mini and o4-mini. Current per-token prices are on the o3 price page.
Reasoning tokens are the cost the price list hides
Reasoning models think before they answer. OpenAI's reasoning guide says reasoning tokens are not visible through the API, but they take up context window space and are billed as output tokens. Depending on the problem, a model can generate anywhere from a few hundred to tens of thousands of them. Each response reports the exact count in its usage object, under output_tokens_details.reasoning_tokens.
A worked example. Assume a request with 2,000 input tokens that produces 3,000 reasoning tokens and a 500-token visible answer. These token counts are assumptions for the arithmetic, not measurements. Billed output is 3,000 + 500 = 3,500 tokens.
- o3-mini: input 2,000 × $1.10 / 1,000,000 = $0.0022. Output 3,500 × $4.40 / 1,000,000 = $0.0154. Total $0.0176.
- o3: input 2,000 × $2.00 / 1,000,000 = $0.0040. Output 3,500 × $8.00 / 1,000,000 = $0.0280. Total $0.0320.
If you priced the same request from the visible answer alone, o3-mini would come to $0.0022 + (500 × $4.40 / 1,000,000) = $0.0022 + $0.0022 = $0.0044, and o3 to $0.0040 + (500 × $8.00 / 1,000,000) = $0.0040 + $0.0040 = $0.0080. The real cost is 4 times that estimate on both ($0.0176 / $0.0044 = 4 and $0.0320 / $0.0080 = 4). At 100,000 requests a month, the real figures are $1,760 on o3-mini and $3,200 on o3, a gap of $1,440.
One trap: max_output_tokens caps everything the model generates, reasoning included. A request that hits the cap comes back incomplete, and you can pay for input and reasoning tokens with no visible answer. OpenAI suggests reserving at least 25,000 tokens for reasoning and output when you start.
The same decision on OpenAI's current models
OpenAI's models page now points to GPT-6 Astra for complex reasoning and coding, GPT-6.1 Sol to balance intelligence and cost (near-Astra performance at a lower cost, in OpenAI's words), and GPT-6 Luna for cost-sensitive, high-volume work. The GPT-5.6 family, which the deprecation notices point to, splits the same way: Sol is the flagship, Terra roughly corresponds to the mini tier of earlier GPT-5 families and Luna to the nano tier.
| Model | Input | Cached input | Output | reasoning.effort values | Default effort |
|---|---|---|---|---|---|
| GPT-6 Astra | $10.00 | $1.00 | $50.00 | low, medium, high, xhigh, max | not stated on its page |
| GPT-6.1 Sol | $2.00 | $0.10 | $10.00 | low, medium, high, xhigh, max | medium |
| GPT-6 Luna | $0.10 | $0.01 | $0.50 | none, low, medium, high, xhigh, max | medium |
| GPT-5.6 Sol | $4.00 | $0.40 | $20.00 | none, low, medium, high, xhigh, max | medium |
| GPT-5.6 Terra | $2.00 | $0.20 | $12.00 | none, low, medium, high, xhigh, max | medium |
| GPT-5.6 Luna | $0.20 | $0.02 | $1.20 | none, low, medium, high, xhigh, max | medium |
These are short-context prices. Prompts over 272K input tokens cost 2 times the input and cache rates and 1.5 times the output rate. All six models bill cache writes at 1.25 times the input price. GPT-5.6 Sol's price is promotional, available at least through November 21, 2026. Batch and Flex are half of standard. Current numbers are on the GPT-6.1 Sol and GPT-6 Luna price pages.
Here is the example request again, at the same 2,000 input and 3,500 output tokens:
| Model | Input cost | Output cost | Per request |
|---|---|---|---|
| GPT-6 Luna | $0.0002 | $0.00175 | $0.00195 |
| o3-mini or o4-mini | $0.0022 | $0.0154 | $0.0176 |
| o3 | $0.0040 | $0.0280 | $0.0320 |
| GPT-6.1 Sol | $0.0040 | $0.0350 | $0.0390 |
| GPT-5.6 Terra | $0.0040 | $0.0420 | $0.0460 |
| GPT-5.6 Sol | $0.0080 | $0.0700 | $0.0780 |
| GPT-6 Astra | $0.0200 | $0.1750 | $0.1950 |
Every row uses the same arithmetic. For GPT-6.1 Sol: 2,000 × $2.00 / 1,000,000 = $0.0040, plus 3,500 × $10.00 / 1,000,000 = $0.0350, for $0.0390.
Two things follow. First, OpenAI's recommended replacement for o3-mini, gpt-5.6-sol, costs $0.0780 at these token counts against o3-mini's $0.0176, about 4.4 times as much ($0.0780 / $0.0176 = 4.43). A straight swap can raise the bill. Second, real models do not hold token counts fixed: the same prompt uses a different number of reasoning tokens on each model and effort level. OpenAI says GPT-6 Astra reached stronger results with substantially fewer output tokens in several of its evaluations, and that its estimated cost per task was lower than earlier models despite the higher per-token price. That is OpenAI's claim. Your own usage numbers are the test.
Effort level is now the main dial
With o3 and o3-mini, the choice was mostly which model. With the GPT-6 and GPT-5.6 models, it is as much which effort level on one model. Lower effort favors speed and fewer tokens; higher effort makes the model think more completely. GPT-6 Astra and GPT-6.1 Sol do not accept none (Astra returns HTTP 400 for it), and GPT-6.1 Sol also rejects minimal.
OpenAI's model-selection guide pairs models with effort levels. It suggests Luna at low effort for fine-grained edits, well-scoped problem-solving and simple data extraction, GPT-6.1 Sol at medium for complex technical work, and Astra at extra high for demanding analysis with exacting requirements. Its advice is to compare settings on the same inputs and keep the lightest one that meets your quality bar.
Effort is easy to price. Every 1,000 reasoning tokens costs $0.05 on GPT-6 Astra (1,000 × $50 / 1,000,000), $0.01 on GPT-6.1 Sol (1,000 × $10 / 1,000,000) and $0.0005 on GPT-6 Luna (1,000 × $0.50 / 1,000,000). If a lower setting cuts 2,000 reasoning tokens per request on GPT-6.1 Sol, 100,000 requests a month save 100,000 × 2,000 × $10 / 1,000,000 = $2,000.
GPT-6 models can also change effort mid-conversation: a configuration_update item raises effort for a hard follow-up or lowers it for routine turns while keeping the prompt prefix cached.
Migration notes from OpenAI
OpenAI's GPT-6 guide lists these checks when you move to gpt-6-astra, gpt-6.1-sol or gpt-6-luna:
- Keep your current effective reasoning effort where supported. Astra and GPT-6.1 Sol have no none setting, so use low. If you used minimal, start with low and compare results on representative tasks.
- Tool calling on Astra and GPT-6.1 Sol requires the Responses API. GPT-6 Luna supports function calling in Chat Completions only with reasoning_effort set to none.
- When effort is not none, remove temperature, top_p and top_logprobs.
A routing framework you can test
- Measure first. Log input, reasoning and output tokens and the cost of every request, grouped by task type. Without the reasoning token count you are guessing.
- Keep on the stronger model by default: multi-step math, hard debugging, plans with many constraints, and anything where a wrong answer is costly and hard to spot. Move these only after a test says you can.
- Try a cheaper model or lower effort first on work with checkable answers: extraction into a schema, classification, short rewrites, and code that runs against tests.
- Test on a sample. Replay a few hundred real requests per task type through the candidate model and effort level. Score them with automatic checks where you can (schema valid, tests pass, label matches) and read a sample by hand. Compare cost per request from the usage object, not price per token.
- Move one task type at a time and keep checking after the move. Run the test again when OpenAI changes a price or schedules a shutdown.
o3-mini and o4-mini shut down on October 23, so if your code still calls them, step 4 is urgent: those calls are failing now. o3 follows on December 11. For the same method across providers, see the LLM routing guide. For other OpenAI cost fixes such as caching, Flex and output caps, see OpenAI API Cost Too High? Six Fixes, Ordered by Effort.
Where PromptUnit fits
PromptUnit checks each request and uses a cheaper model when one is just as good for that request. Otherwise the request goes to the model you asked for. Setup is two settings: your app's API base URL and your PromptUnit key. Your own OpenAI key stays. The dashboard shows each request with the model you asked for, the model that answered, the cost and the saving.
Optional side-by-side checks, off by default and paid on your own provider keys within a daily budget you set, run step 4 for you: cheaper models answer a sample of your real requests, and the model you asked for judges whether each answer is as good. A step of your app moves only after at least 20 judged checks with 9 in 10 as good and at least 10% lower cost, and moves back if fewer than 7 in 10 stay as good. PromptUnit is free until it has saved you money, then it takes 20% of what it saves. Create an account to see what your reasoning requests cost.