Reasoning Control

Reasoning models generate "thinking" tokens before they answer, and those tokens bill as output. The reasoning parameter sets how hard a model thinks, or turns thinking off. What happens when you say nothing differs per model: Kimi K3, for one, thinks at maximum effort by default.

How thinking tokens are billed

Thinking tokens are part of completion_tokens and bill at the model's output rate. The breakdown is in usage.completion_tokens_details.reasoning_tokens on the response. A one-word answer preceded by a few hundred tokens of thinking bills for all of them.

Example usage block
"usage": {
  "prompt_tokens": 113,
  "completion_tokens": 43,
  "completion_tokens_details": {
    "reasoning_tokens": 26
  }
}

The thinking itself arrives in message.reasoning_content (delta.reasoning_content when streaming), separate from the answer in content. It bills whether or not you display it.

The reasoning parameter

Add a reasoning object to a /v1/chat/completions request. Set either effort or max_tokens, not both.

Set an effort level

effort accepts none, minimal, low, medium, high, xhigh and max. Which values a model accepts is listed in the table below; an unsupported value returns 400.

curl https://api.fastmetal.ai/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kimi-k3",
    "messages": [{"role": "user", "content": "..."}],
    "reasoning": {"effort": "low"}
  }'

Turn thinking off

enabled: false stops the model thinking. For classification, extraction and other short-answer work this is faster and cheaper. It has no effect on models that always think ("Can disable" is No in the table).

{
  "model": "kimi-k3",
  "messages": [{"role": "user", "content": "..."}],
  "reasoning": {"enabled": false}
}

Cap the thinking tokens

max_tokens caps how many tokens the model may spend thinking (Anthropic style). It cannot be combined with effort.

{
  "model": "kimi-k3",
  "messages": [{"role": "user", "content": "..."}],
  "reasoning": {"max_tokens": 2000}
}

About reasoning_effort

The OpenAI-style top-level reasoning_effort string is ignored on some models. On 2026-09-03 a kimi-k3 request with reasoning_effort: "none" still produced thinking tokens as normal. It does work on the GPT-5 family, but on FastMetal use the reasoning object, which works on every OpenRouter-routed model that has the control. Claude on Bedrock (anthropic-claude-*) and the Japan-hosted routes (japan-*, llm-jp, gpt-oss-120b) are not covered yet and are absent from the table below.

Per-model defaults

What each model does when reasoning is not set. Served models that expose thinking controls are listed.

ModelDefaultEffort levelsCan disable
anthropic-claude-fable-5Thinking on (high)
max
xhigh
high
medium
low
No
anthropic-claude-fable-5-1Thinking on (high)
max
xhigh
high
medium
low
No
anthropic-claude-opus-4-8Thinking off
max
xhigh
high
medium
low
Yes
anthropic-claude-opus-5Thinking on (high)
max
xhigh
high
medium
low
Yes
anthropic-claude-sonnet-5Thinking on (high)
max
xhigh
high
medium
low
Yes
deepseek-v4-flashThinking on (high)
xhigh
high
Yes
deepseek-v4-flash-0731Thinking on (high)
max
high
low
Yes
deepseek-v4-proThinking on (high)
xhigh
high
Yes
deepseek-v4.1-flashThinking on (high)
max
high
low
Yes
gemini-3.5-flashThinking on (medium)
high
medium
low
minimal
No
gemini-3.7-flashThinking on (medium)
high
medium
low
No
gemini-3.8-flashThinking on (medium)
high
medium
low
No
glm-4.7Thinking on-Yes
glm-4.7-flashThinking on-Yes
glm-5Thinking on-Yes
glm-5.1Thinking on-Yes
glm-5.2Thinking on (high)
xhigh
high
Yes
glm-5.3Thinking on (max)
max
high
low
No
glm-5.3-flashThinking on (max)
max
high
low
No
gpt-5.6-lunaThinking on (medium)
max
xhigh
high
medium
low
none
Yes
gpt-5.6-solThinking on (medium)
max
xhigh
high
medium
low
none
Yes
gpt-5.6-terraThinking on (medium)
max
xhigh
high
medium
low
none
Yes
gpt-6-astraThinking on (medium)
max
xhigh
high
medium
low
No
gpt-6-astra-proThinking on (medium)
max
xhigh
high
medium
low
No
grok-4.5Thinking on (high)
high
medium
low
No
grok-4.6Thinking on (high)
xhigh
high
medium
low
No
inklingThinking on (high)
max
high
medium
low
minimal
none
Yes
kimi-k2.6Thinking on-Yes
kimi-k3Thinking on (max)
max
high
low
Yes
mercury-2.5Thinking on (medium)
high
medium
low
none
Yes
minimax-m2.7Thinking on-No
muse-glimmer-30bThinking on (medium)
xhigh
high
medium
low
No
muse-spark-1.2Thinking on (medium)
xhigh
high
medium
low
minimal
No
muse-spark-1.3Thinking on (medium)
max
xhigh
high
medium
low
minimal
No
nex-n2.5-mini-freeThinking on (high)
high
medium
none
Yes
qwen3.6-27bThinking on-Yes
qwen3.7-maxThinking on-Yes
qwen3.8-2.4t-a95bThinking on (xhigh)
xhigh
medium
low
No
qwen3.8-27bThinking on (xhigh)
xhigh
medium
low
Yes

A model missing from the table either has no thinking controls or the catalog has not been refreshed for it yet. Each model's detail page shows the same information under Reasoning Configuration.

In the chat

When you pick a model with thinking controls, a Thinking selector appears next to the model picker. The default is the lowest effort the model accepts, and your choice is remembered in the browser. Open the chat