# Reasoning
Source: https://docs.getworg.com/reasoning
Some models can think before they answer. reasoning_effort turns that on or off, and the thinking comes back in reasoning_content.
## reasoning_effort
Set `reasoning_effort` at the top level of the request: `none`, `low`, `medium`, `high` or `max`. `minimal` is read as `low` and `xhigh` as `max`. Any other value gets `400 invalid_request` before the request reaches a lane.
cURL:
```bash
curl https://api.getworg.com/v1/chat/completions \
-H "Authorization: Bearer $WORG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8-27b:standard",
"messages": [{"role": "user", "content": "Is 221 a prime number?"}],
"reasoning_effort": "low",
"max_tokens": 1024
}'
```
Worg sends the effort to each lane in the form that lane accepts, so a combo behaves the same whichever lane answers. Clients that send a `reasoning` object instead are read the same way: `{"enabled": false}` as `none`, `{"effort": "low"}` as `low`.
## Defaults per lane
| Model ID | Without reasoning_effort |
| --- | --- |
| `deepseek-v4.1-flash:cached` | Answers without reasoning. |
| `deepseek-v4.1-flash:standard` | Answers without reasoning. |
| `qwen3.8-27b:standard` | Reasons. Send "none" to turn it off. |
## Where the reasoning appears
- In `message.reasoning_content`, next to the answer in `content`. Without reasoning the field is absent.
- In a stream, in `delta.reasoning_content`, before the answer.
- It is never part of `content`, so [JSON output](https://docs.getworg.com/structured-output) stays parseable with reasoning on.
## Billing
- Reasoning tokens are output tokens. They are counted inside `completion_tokens` and billed at the output rate.
- A higher effort does not always mean more tokens: on a short question the levels gave similar lengths in testing. The question decides most of it.
- Reasoning counts against `max_tokens`. With `"max_tokens": 30` and `high`, every lane spent all 30 tokens reasoning and returned an empty `content` with `finish_reason: "length"`. Leave room for the answer, or send `none`.
Next: [Structured output](https://docs.getworg.com/structured-output) · [Responses and usage](https://docs.getworg.com/responses)
View as Markdown
Reasoning
Some models can think before they answer. reasoning_effort turns that on or off, and the thinking comes back in reasoning_content.
reasoning_effort
Set reasoning_effort at the top level of the request: none, low, medium, high or max. minimal is read as low and xhigh as max. Any other value gets 400 invalid_request before the request reaches a lane.
cURL
curl https://api.getworg.com/v1/chat/completions \
-H "Authorization: Bearer $WORG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8-27b:standard",
"messages": [{"role": "user", "content": "Is 221 a prime number?"}],
"reasoning_effort": "low",
"max_tokens": 1024
}'Worg sends the effort to each lane in the form that lane accepts, so a combo behaves the same whichever lane answers. Clients that send a reasoning object instead are read the same way: {"enabled": false} as none, {"effort": "low"} as low.
Defaults per lane
| Model ID | Without reasoning_effort |
|---|---|
deepseek-v4.1-flash:cached | Answers without reasoning. |
deepseek-v4.1-flash:standard | Answers without reasoning. |
qwen3.8-27b:standard | Reasons. Send "none" to turn it off. |
Where the reasoning appears
- In
message.reasoning_content, next to the answer incontent. Without reasoning the field is absent. - In a stream, in
delta.reasoning_content, before the answer. - It is never part of
content, so JSON output stays parseable with reasoning on.
Billing
- Reasoning tokens are output tokens. They are counted inside
completion_tokensand billed at the output rate. - A higher effort does not always mean more tokens: on a short question the levels gave similar lengths in testing. The question decides most of it.
- Reasoning counts against
max_tokens. With"max_tokens": 30andhigh, every lane spent all 30 tokens reasoning and returned an emptycontentwithfinish_reason: "length". Leave room for the answer, or sendnone.