Reasoning controls
Set reasoning effort per request, bound to the ticket and validated against each model.
Some models can spend extra effort reasoning before they answer. AnonRouter exposes a single, provider-neutral way to control that effort, and it validates your choice against what the target model actually attests.
Setting effort
Send one of two request fields on both the ticket and the completion:
reasoning_effort: a string, one ofminimal,low,medium,high,xhigh,max, ornoneto turn reasoning off.reasoning: an object{ "enabled": boolean, "effort": "..." }for the same control in structured form.
{
"model": "deepseek/deepseek-v3.2",
"max_completion_tokens": 512,
"reasoning_effort": "high"
}Omitting both fields uses the model's own default. Setting reasoning_effort
to none (or reasoning.enabled: false) disables reasoning where the model
allows it.
Check the model first
Reasoning fields only apply to models that attest reasoning support. Read
capabilities.reasoning from GET /v1/models to confirm supported,
effort_configurable, and the supported_efforts list before sending an
effort.
Reasoning is bound to the ticket
The reasoning selection is part of what a ticket authorizes. Set the same
reasoning fields when you issue the ticket and when you send the completion. If
they differ, the request is rejected with ticket_reasoning_mismatch so a
redemption cannot quietly change the reasoning behavior you paid for.
# Issue a ticket that authorizes high-effort reasoning.
curl "$ANONROUTER_BASE_URL/inference/tickets" \
-H "Authorization: Bearer $ANONROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek/deepseek-v3.2",
"max_completion_tokens": 512,
"reasoning_effort": "high"
}'Validation
AnonRouter validates the selection against the model's attested capabilities and
returns a 400 when it does not fit:
| Code | Meaning |
|---|---|
reasoning_conflict | The flat and structured fields disagree, or an effort was combined with a disable signal. |
reasoning_not_supported | An effort was requested on a model that does not reason. |
reasoning_effort_not_configurable | The model reasons but does not expose a configurable effort. |
reasoning_effort_unsupported | The requested level is not in the model's supported efforts. |
reasoning_not_disableable | Reasoning was disabled on a model that always reasons. |
The effort is passed to the model as a normalized field. AnonRouter does not add any provider-specific reasoning knobs beyond the controls above.