Reasoning in 2026: From none to max, plus pro and ultra modes
On this page
Status as of November 5, 2026. The GPT-6 family retains these levels, but
noneis accepted only by GPT-6.1 Terra, GPT-6 Sol, and GPT-6 Luna. GPT-6 Astra and GPT-6.1 Sol start atlow; sending a request withnoneto Astra returns an HTTP 400 error. Since September 3, you can also change the effort level mid-conversation without losing the cache, using aconfiguration_updateelement (Lesson 9).
Configurable reasoning effort didn’t start with GPT-5.6. Since GPT-5 launched in 2025, OpenAI models have reasoned more or less based on a parameter, replacing the old o-series. What changes between versions are the accepted values and the default setting. GPT-5.6 added the max level and the pro mode to the API, while ChatGPT received the “ultra” setting. These details matter: a changed default can alter your application’s latency and bill without a single line of code changing.
The six levels of GPT-5.6
On the three GPT-5.6 models, the reasoning.effort parameter accepts six levels. OpenAI’s guide describes their use cases as follows:
| Level | Use case |
|---|---|
none | Tasks where latency is critical and reasoning adds no value: voice, quick information lookup, classification |
low | Efficient reasoning for slightly higher latency: data analysis, drafting, executable code, customer support |
medium | Quality and reliability, planning, and judgment; the default for most use cases |
high | Difficult reasoning, complex debugging, deep planning, agentic work |
xhigh | Deep research and long agentic tasks, only if your evaluations show a net gain |
max | Maximum reasoning for the most complex tasks; compare against xhigh |
You set the level directly in the API call. Here, we ask Terra to debug a function with sustained effort, because a subtle logic error deserves more than a skim read:
response = client.responses.create(
model="gpt-5.6-terra",
input="Find the logic error in this function and fix it.",
reasoning={"effort": "high"},
)
If the same application then reformulates a commit message, nothing stops you from switching back to low for the next request. A router could also attempt a first pass at medium, detect an uncertain response, and retry the same request at high on the same model with the same prompt.
Accepted values vary by model
Model fact sheets, recorded on November 5, 2026, show how this parameter has evolved:
| Model | Accepted values | Default |
|---|---|---|
gpt-5 | minimal, low, medium, high | unspecified |
gpt-5.1 | none, low, medium, high | none |
gpt-5.4 | none to xhigh | none |
gpt-5.5 | none to xhigh | medium |
| GPT-5.6 Sol, Terra, and Luna | none to max | medium |
gpt-6-astra | low to max | unspecified |
gpt-6.1-sol | low to max | medium |
gpt-6.1-terra, gpt-6-sol, gpt-6-luna | none to max | medium |
Two pitfalls stand out in this table. The first concerns the default value: gpt-5.1 and gpt-5.4 did not reason if you specified nothing, whereas gpt-5.5, GPT-5.6, and the listed GPT-6 models start at medium. An application migrating from gpt-5.4 to GPT-5.6 without setting the effort will suddenly start reasoning, incurring higher latency and more billed tokens. The GPT-6 migration guide sums this up in one rule: preserve your effective effort when the new model accepts it, and write it explicitly. The second pitfall involves missing values: minimal exists on neither GPT-5.6 nor GPT-6 (start with low instead), and none is rejected by GPT-6 Astra and GPT-6.1 Sol.
Pro mode: More work, same per-token rate
GPT-5.6 introduced a second, independent setting: reasoning.mode, which defaults to standard or can be set to pro. In pro mode, the model performs more work before responding, suited for difficult tasks that tolerate higher latency. Tokens are billed at the model’s standard rate, but since more tokens are used, the total cost rises. This mode replaces the old “pro” models: the deprecations page recommends gpt-5.6-sol in pro mode instead of o3-pro and gpt-5-pro.
response = client.responses.create(
model="gpt-5.6-sol",
reasoning={"effort": "medium", "mode": "pro"},
input="Review this disaster recovery plan and flag any single points of failure.",
)
Max and ultra: Going further
The max level gives the model even more time than xhigh to reason, explore alternative paths, verify, and revise its approach. It exists in both the API and in ChatGPT Work and Codex, where you enable it in the settings.
Ultra, however, changes the execution mode entirely. According to the July 9 announcement, it coordinates four agents in parallel by default across simultaneous work streams. OpenAI also demonstrated configurations with sixteen agents for specific evaluations (BrowseComp, SEC-Bench Pro). The trade-off is clear: higher token consumption in exchange for better results and reduced completion time on heavy tasks. Ultra is available only in products: ChatGPT Work for Pro and Enterprise plans, and Codex starting at Plus at launch. There is no ultra value in the API; you achieve a comparable effect with the multi-agent function of the Responses API (in beta), which lets the model launch sub-agents in parallel within a single request. Reserve this for work that breaks down into independent chunks.
A method for setting effort
Don’t set these levels based on intuition. Take a representative sample of your real-world requests, run them at medium then high, compare quality, latency, and cost, and let the numbers decide the default for each task type. This is the same approach you should take with publisher benchmarks: your data decides, not general impressions.
Your turn
Find the right level for a task. Choose ten representative requests for a single task. Run them at low, medium, and high, then record the quality (using your own rubric), latency, and the number of reasoning tokens shown in usage. Keep the lowest level that satisfies you on nine out of ten requests, and write it explicitly in your code. Without API access, do the same exercise in ChatGPT using the reasoning selector in Chat mode.
Official sources: Reasoning models · Using GPT-6 · Multi-agent · Deprecations (OpenAI API documentation) · GPT-5.6 Announcement (OpenAI, July 9, 2026)
Key takeaways
- Configurable effort dates back to GPT-5; GPT-5.6 added the
maxlevel andpromode - Accepted values and defaults vary by model: always specify effort explicitly
- Pro mode makes the model work harder at the standard per-token rate; it replaces
o3-proandgpt-5-pro - Ultra, defaulting to four parallel agents, is reserved for ChatGPT Work and Codex; the API uses the multi-agent beta
- Set effort based on your evaluations, not intuition