Per-Model Details
How specific model families handle parameters differently from the defaults in Parameter Support by Model. All parameters below are top-level request fields unless noted — you can send them through any API format. The router normalises them automatically, so you generally don't need to know these details; they're here for when you want precise control.
GPT-5 series
GPT-5 models apply strict parameter sanitisation:
| Parameter | Behaviour |
|---|---|
max_tokens |
Automatically converted to max_completion_tokens. GPT-5 and Codex models need a value of at least 16. |
temperature |
Accepted only when = 1.0, or when reasoning_effort = "none" on GPT-5.1, 5.2, 5.4 and 5.5 (non-Codex). |
presence_penalty, frequency_penalty, stop, logit_bias |
Always dropped. |
logprobs, top_logprobs, top_p |
Accepted only when reasoning_effort = "none" on GPT-5.1, 5.2, 5.4 and 5.5 (non-Codex); dropped on other GPT-5 models. |
parallel_tool_calls |
Dropped when reasoning_effort = "minimal". |
reasoning_effort |
Supported on all GPT-5 variants. A value the model does not take is mapped to the nearest one it does (for example minimal becomes low on GPT-5.1 and later). |
response_format |
With json_object, the prompt must contain the word "JSON". |
On /v1/chat/completions, GPT-5.6 and later (including GPT-6 models) reject function tools unless
reasoning_effort is "none" — the request returns 400. Set reasoning_effort to "none" or
use /v1/responses.
Claude 4+
The router normalises the thinking parameter to match the target Claude model — clients
don't need to know which mode a model uses. thinking.type = "enabled" is accepted on every
Claude model.
Adaptive thinking models (Claude 4.6 and newer: Sonnet 4.6, Opus 4.6, Opus 4.7, Opus 4.8, the Claude 5 line, and Fable):
| Parameter | Behaviour |
|---|---|
thinking.type = "enabled" |
On Claude 4.7 and newer, converted to "adaptive"; budget_tokens is ignored. On Sonnet 4.6 and Opus 4.6, budget_tokens is honoured. |
thinking.type = "adaptive" |
Passed through directly. |
thinking.type = "disabled" |
Turns thinking off. On adaptive-only models (the Fable family) the field is dropped and the model uses its adaptive default. |
reasoning_effort |
Mapped to thinking.type = "adaptive" plus an effort level. xhigh applies on Claude 4.7 and newer and is treated as high on earlier models; none sends no thinking field. |
Non-adaptive thinking models (Claude Haiku 4.5, Sonnet 4.5, Opus 4.5):
| Parameter | Behaviour |
|---|---|
thinking.type = "enabled" |
Needs budget_tokens. |
thinking.type = "adaptive" |
Converted to "enabled" with a default budget. |
reasoning_effort |
Mapped to a budget_tokens value for the effort level (low / medium / high → increasing token counts). |
budget_tokens |
A value below 1024 is raised to 1024. If max_tokens leaves no room above the budget, the router raises it. |
Sampling parameters. Send only one of temperature and top_p. Claude 4.7 and newer ignore
temperature (other than 1), top_p and top_k. On earlier models, turning thinking on sets
temperature to 1 and drops top_k and any top_p below 0.95.
Prefill. Claude 4.6 and newer do not accept a trailing assistant message — see
Assistant Prefill.
All Claude models support tools, tool_choice, parallel_tool_calls, max_tokens, and
response_format. With json_object, a reply may be wrapped in a Markdown code fence; use
json_schema for bare JSON.
Gemini
| Parameter | Behaviour |
|---|---|
thinking / reasoning_effort |
Accepted on all Gemini models; silently ignored on models without thinking support. On Gemini 3.x the value is forwarded unchanged as the thinking_level tier; on Gemini 2.5 it maps to a token budget — see below. |
frequency_penalty, presence_penalty |
Not available on preview or Gemini 3 models. |
top_k |
Not a standard top-level field — pass via extra_body; forwarded when supported natively. |
thinking_level support (Gemini 3.x only). Gemini 3.x models take a thinking_level tier instead of a token budget — the router forwards the tier you send unchanged, so an unsupported tier (e.g. minimal on gemini-3.1-pro-preview) returns 400. none is the one value translated: Gemini 3.x has no "off" tier, so none sends the lowest tier the model takes (minimal on Flash models, low on Pro models) and the model may still reason a little. When you send no reasoning setting, the model runs at Google's own default (the Default column below). Gemini 2.5 models don't use tiers at all; control them via reasoning.max_tokens / effort instead (xhigh and max are ignored there; see Reasoning & Thinking).
| Model | Code | Supported thinking_level values |
Default |
|---|---|---|---|
| Gemini 3.1 Flash-Lite | gemini-3.1-flash-lite |
minimal, low, medium, high |
minimal |
| Gemini 3 Flash Preview | gemini-3-flash-preview |
minimal, low, medium, high |
high |
| Gemini 3.1 Pro Preview | gemini-3.1-pro-preview |
low, medium, high (no minimal) |
high |
| Gemini 3.1 Flash Image | gemini-3.1-flash-image |
minimal, medium, high |
minimal |
| Gemini 3.1 Flash-Lite Image | gemini-3.1-flash-lite-image |
minimal, high (other tiers not confirmed) |
minimal |
| Gemini 3 Pro Image | gemini-3-pro-image |
high only — the model always reasons; any value you send is ignored |
high |
| Gemini 3.5 – 3.8 Flash and Flash-Lite | gemini-3.5-flash, gemini-3.5-flash-lite, gemini-3.6-flash, gemini-3.7-flash, gemini-3.8-flash |
minimal, low, medium, high (as for other Flash models; not individually confirmed) |
Google's default |
Google's own docs also list plain Gemini 3 Pro and Gemini 3.1 Pro (
low/medium/high, defaulthigh) as distinct model names — SIRAYA's catalog currently only exposes the preview build (gemini-3.1-pro-preview) on the text side.gemini-2.5-pro,gemini-2.5-flash, andgemini-2.5-flash-litearen't in this table because the 2.5 series doesn't usethinking_leveltiers at all (token-budget based, see above). See Nano Banana → extra_body for the image-model parameter details.