---
title: "Thinking and reasoning"
description: "Choose reasoning effort or a thinking budget, and understand the token and cost impact."
canonical_url: "https://minirouter.sh/docs/reasoning"
markdown_url: "https://minirouter.sh/docs/reasoning.md"
last_updated: "2026-09-13"
---

# Thinking and reasoning

Reasoning models can spend extra tokens working through a problem before
answering. Choose the control supported by your model.

## Set your key

Create an [API key](https://minirouter.sh/key), save its recovery link, and
[add credits](https://minirouter.sh/dashboard/billing). Replace the placeholder
below and run it in your terminal before running the examples on this page.

```sh
export MINIROUTER_KEY='paste-your-api-key-here'
```

Examples use paid models. For free requests, follow the
[Auto Free guide](https://minirouter.sh/docs/free-inference).

## Choose a reasoning level

This Chat Completions example requests high reasoning effort. Run it after
setting your key.

```sh
curl https://api.minirouter.sh/v1/chat/completions \
  -H "Authorization: Bearer $MINIROUTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "openai/gpt-6-astra",
  "messages": [
    {
      "role": "user",
      "content": "What is the smallest positive integer divisible by every integer from 1 through 10? Explain briefly."
    }
  ],
  "max_completion_tokens": 4096,
  "reasoning": {
    "effort": "high"
  }
}'
```

The final answer is in `choices[0].message.content`. Reasoning text, when
returned, is separate from the answer and varies by model.

## Supported controls

Check the model's `reasoning_options` in the
[public catalog](https://minirouter.sh/api/v1/models). It describes an effort
list, a token budget, or a toggle. Use the model's listed values and limits.

| Control | Chat Completions field |
| --- | --- |
| Effort level | `reasoning: {"effort":"high"}` using one of the model's listed levels |
| Alternative effort syntax | `reasoning_effort: "high"`; do not also send `reasoning` |
| Reasoning token budget | `reasoning: {"max_tokens":2048}` for a budget-based model |
| Disable reasoning | `reasoning: {"effort":"none"}` only when the model supports disabling it |
| Hide returned reasoning | `reasoning: {"effort":"high","exclude":true}` where supported; this does not disable reasoning or its cost |
| Model default | Omit the reasoning fields |

Effort names can include `none`, `minimal`, `low`, `medium`, `high`,
`xhigh`, and `max`. Each model supports its own subset. More effort can
increase latency and cost; it does not guarantee a better answer.

## Thinking with the Messages API

Messages uses `thinking`, with `output_config.effort` for models that support
adaptive thinking. Include the Messages version header.

```sh
curl https://api.minirouter.sh/v1/messages \
  -H "Authorization: Bearer $MINIROUTER_KEY" \
  -H "Content-Type: application/json" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
  "model": "anthropic/claude-opus-5",
  "max_tokens": 4096,
  "thinking": {
    "type": "adaptive"
  },
  "output_config": {
    "effort": "high"
  },
  "messages": [
    {
      "role": "user",
      "content": "Compare two approaches to caching API responses."
    }
  ]
}'
```

For a model with a fixed thinking budget, use
`thinking: {"type":"enabled","budget_tokens":2048}` instead of adaptive
thinking. The budget must be below `max_tokens` and within the model's supported
range. Use `thinking: {"type":"disabled"}` only where the model allows it.
For Responses, use `reasoning: {"effort":"high"}` with `input` and
`max_output_tokens`; do not send the Chat Completions or Messages field names.

## Read streamed reasoning

On Chat Completions streams, a model may return `delta.reasoning_content`,
`delta.reasoning`, or `delta.reasoning_details` separately from
`delta.content`. Messages streams can include thinking blocks and
`thinking_delta` events. Not every model exposes its reasoning.

Preserve provider-issued thinking blocks and signatures when continuing a
Messages conversation. Do not replace them with a reconstruction of the text.
See [streaming](https://minirouter.sh/docs/streaming) for event handling and cost.

## Tokens and cost

Reasoning tokens can count toward billed output even when hidden. Allow room
for both reasoning and the visible answer. Reasoning requests may require a
larger temporary balance hold than a request without reasoning; reducing the
visible output limit alone may not reduce that hold. Check the final cost in
`usage.cost` or Activity.
