Reasoning effort
Which reasoning_effort values each model accepts, and what they do.
reasoning_effort controls a model's thinking budget on
/v1/chat/completions. Omit it to keep thinking enabled,
which is the default, or pass "none" to switch thinking off.
{
"model": "glm-5.2",
"messages": [{ "role": "user", "content": "Explain database connection pooling." }],
"reasoning_effort": "none"
}The accepted values differ per model
There is no single value set that works everywhere. Each model accepts only
the values in the table below and rejects the rest with a 400. Check your
model before sending a value, especially if you switch models behind the same
code path.
What each model accepts
| Model | Accepted reasoning_effort values |
|---|---|
glm-5.2 | none · minimal · low · medium · high |
glm-5.2-caveman, -honey, -ponytail (and their -lite / -ultra variants) | none · minimal · low · medium · high |
kimi-k3 | none · minimal · low · medium · high |
kimi-k2.6 | none · minimal · low · medium · high |
kimi-k2.7-code | none · minimal · low · medium · high |
minimax-m2.5 | none · minimal · low · medium · high |
qwen3.5-397b-a17b | none · minimal · low · medium · high |
qwen3.6-35b-a3b | none · minimal · low · medium · high |
gemma4 | none · minimal · low · medium · high |
devstral-2-123b-instruct-2512 | none · minimal · low · medium · high |
deepseek-v4-flash-0731 | none · minimal · low · medium · high |
green-l, green-l-raw | none · low · medium · high |
gemma-3-27b-it | none · low · medium · high |
mistral-small-3.2-24b-instruct-2506 | none · low · medium · high |
qwen3-coder-30b-a3b-instruct | none · low · medium · high |
pixtral-12b-2409 | none · low · medium · high |
green-r, green-r-raw | low · medium · high |
gpt-oss-120b | low · medium · high |
holo2-30b-a3b | low · medium · high |
llama-3.3-70b-instruct | low · medium · high |
qwen3-235b-a22b-instruct-2507 | low · medium · high |
mistral-medium-3.5-128b | none · high |
voxtral-small-24b-2507 takes audio input and is not covered by this table.
green-r and green-l differ
green-r and green-r-raw reject "none", so thinking cannot be switched
off on them. green-l and green-l-raw accept it. If you need a
GreenPT-branded id with thinking off, use green-l or send "none" to
gemma4.
What the values do
none disables thinking where it is accepted, and this is visible in the
response. The same prompt to glm-5.2 reports several hundred reasoning tokens
without the parameter and exactly 0 with "none", cutting the answer from
roughly 580 completion tokens to 180.
The levels in between behave differently depending on the model, so it is worth knowing which of the two groups you are on:
green-r, green-r-raw and gpt-oss-120b scale with the level. Measured
on the same prompt, low to high is roughly a threefold difference in
generated tokens:
| Model | low | medium | high |
|---|---|---|---|
green-r | ~263 | ~408 | ~722 |
gpt-oss-120b | ~314 | ~488 | ~1036 |
On these three, the level is a real budget control and worth tuning. They are
also the models that reject "none", so thinking cannot be switched off, only
turned down to low.
On glm-5.2 and its compression variants the levels do not differentiate.
low, medium and high all mean "thinking enabled" and the run-to-run spread
is wider than the gap between them, so treat the choice there as on or off and
use "none" when you want it off.
Token counts above are averages of three runs on one prompt. They show the shape of the control, not a figure to budget against.
Not every model returns thinking as a separate field. glm-5.2 and its
compression variants, kimi-k3 and holo2-30b-a3b populate
reasoning_content and usage.completion_tokens_details.reasoning_tokens; the
others fold any reasoning into the normal answer, so "none" is accepted but
has nothing separate to remove.
Reading it from the response
"usage": {
"prompt_tokens": 24,
"completion_tokens": 115,
"completion_tokens_details": { "reasoning_tokens": 102 }
}Reasoning tokens are billed at the normal output rate. On glm-5.2 roughly a
third to a half of a typical answer is reasoning, which is why "none" is worth
sending on short, high-volume calls such as classification or routing.
Combining with compression models
reasoning_effort composes with the
compression models. The compression rulesets shorten the
visible answer but not the reasoning, so sending "none" alongside a
compression id removes the part they cannot reach:
{
"model": "glm-5.2-honey",
"messages": [{ "role": "user", "content": "Add retry with backoff to this fetch call." }],
"reasoning_effort": "none"
}