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.
"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.
| Model | Default | Effort levels | Can disable |
|---|---|---|---|
| anthropic-claude-fable-5 | Thinking on (high) | max xhigh high medium low | No |
| anthropic-claude-fable-5-1 | Thinking on (high) | max xhigh high medium low | No |
| anthropic-claude-opus-4-8 | Thinking off | max xhigh high medium low | Yes |
| anthropic-claude-opus-5 | Thinking on (high) | max xhigh high medium low | Yes |
| anthropic-claude-sonnet-5 | Thinking on (high) | max xhigh high medium low | Yes |
| deepseek-v4-flash | Thinking on (high) | xhigh high | Yes |
| deepseek-v4-flash-0731 | Thinking on (high) | max high low | Yes |
| deepseek-v4-pro | Thinking on (high) | xhigh high | Yes |
| deepseek-v4.1-flash | Thinking on (high) | max high low | Yes |
| gemini-3.5-flash | Thinking on (medium) | high medium low minimal | No |
| gemini-3.7-flash | Thinking on (medium) | high medium low | No |
| gemini-3.8-flash | Thinking on (medium) | high medium low | No |
| glm-4.7 | Thinking on | - | Yes |
| glm-4.7-flash | Thinking on | - | Yes |
| glm-5 | Thinking on | - | Yes |
| glm-5.1 | Thinking on | - | Yes |
| glm-5.2 | Thinking on (high) | xhigh high | Yes |
| glm-5.3 | Thinking on (max) | max high low | No |
| glm-5.3-flash | Thinking on (max) | max high low | No |
| gpt-5.6-luna | Thinking on (medium) | max xhigh high medium low none | Yes |
| gpt-5.6-sol | Thinking on (medium) | max xhigh high medium low none | Yes |
| gpt-5.6-terra | Thinking on (medium) | max xhigh high medium low none | Yes |
| gpt-6-astra | Thinking on (medium) | max xhigh high medium low | No |
| gpt-6-astra-pro | Thinking on (medium) | max xhigh high medium low | No |
| grok-4.5 | Thinking on (high) | high medium low | No |
| grok-4.6 | Thinking on (high) | xhigh high medium low | No |
| inkling | Thinking on (high) | max high medium low minimal none | Yes |
| kimi-k2.6 | Thinking on | - | Yes |
| kimi-k3 | Thinking on (max) | max high low | Yes |
| mercury-2.5 | Thinking on (medium) | high medium low none | Yes |
| minimax-m2.7 | Thinking on | - | No |
| muse-glimmer-30b | Thinking on (medium) | xhigh high medium low | No |
| muse-spark-1.2 | Thinking on (medium) | xhigh high medium low minimal | No |
| muse-spark-1.3 | Thinking on (medium) | max xhigh high medium low minimal | No |
| nex-n2.5-mini-free | Thinking on (high) | high medium none | Yes |
| qwen3.6-27b | Thinking on | - | Yes |
| qwen3.7-max | Thinking on | - | Yes |
| qwen3.8-2.4t-a95b | Thinking on (xhigh) | xhigh medium low | No |
| qwen3.8-27b | Thinking 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