Capability matrix
Every table on this page is generated from the code that serves requests and from the production model policy, so it cannot say something the router doesn't do. Where a cell says a parameter is dropped, the response header X-MindsHub-Dropped-Params will name it at request time; where it says clamped, X-MindsHub-Clamped-Params will. The rule behind both is in Core concepts.
Legend
| Cell | Meaning |
|---|---|
yes | Honored on every model behind this API. |
per model | Honored where the target model takes it, dropped and named in X-MindsHub-Dropped-Params where it doesn't. The models table says which. |
partial | Honored with a limitation stated in the row's notes. |
no | Accepted and ignored. The request succeeds and the feature silently doesn't happen. |
400 | Refused with a 400 naming the field, because serving the request would answer a different question than the one asked. |
no field | This API's wire format has no field for it. |
| forwarded / adapted / conditional / ignored / rejected | The parameter table's own vocabulary: relayed as sent; honored with translation; honored per model; accepted and ignored; refused with a 400. |
Features by API
One row per feature, one column per request format. Spellings differ by API; the semantics are the same because all three reach the same service.
| Feature | Chat Completions | Responses | Messages | Notes |
|---|---|---|---|---|
| Streaming | yes · stream | yes · stream | yes · stream | |
| Tool calling | yes · tools | yes · tools | yes · tools | |
| Parallel tool calls | per model · parallel_tool_calls | per model · parallel_tool_calls | per model · tool_choice.disable_parallel_tool_use | |
| Structured output (JSON schema) | per model · response_format | per model · text.format | per model · output_config.format | The one parameter refused rather than dropped when the model can't honor it. |
| Schema-less JSON mode | partial | partial | no field | json_object is a 400 on the Claude family, which has no schema-less mode. |
| Reasoning effort | per model · reasoning_effort | per model · reasoning.effort | per model · output_config.effort | |
| Extended thinking object | no field | no field | per model · thinking | |
| Reasoning carried across turns | no field | per model · include: reasoning.encrypted_content | no field | |
| Web search | yes | yes | yes | Native or external per model; the models table says which. On a model without search the web tools are dropped. |
| Images in | yes | yes | yes | Accepted on every model; a model without vision returns its provider's own error. |
| PDF / file input | partial | no | no | A Chat Completions file part reaches OpenAI-transport models only; Responses input_file parts and Anthropic Files API references are dropped. |
| Automatic prompt caching | yes | yes | yes | |
| Explicit cache breakpoints | no field | no field | partial | Block-level cache_control is honored on Claude-family targets; the top-level auto-caching switch is ignored. |
| Server-side conversation state | no · store | yes · store | no field | store and previous_response_id; 30-day retention, chains walked 25 turns back. |
| Stored-response operations | no field | yes | no field | GET/DELETE /v1/responses/{id}, input_items, cancel. |
| Token counting endpoint | no field | no field | yes | POST /v1/messages/count_tokens, free and unmetered. |
Legacy functions / function_call | yes · functions | no field | no field | |
web_search_options | yes · web_search_options | no field | no field | |
Sampling (temperature, top_p) | per model · temperature | per model · temperature | per model · temperature | |
seed and repetition penalties | per model · seed | no field | no field | |
verbosity | per model · verbosity | per model · text.verbosity | no field | |
Conversations API (conversation) | no field | 400 · conversation | no field |
Request parameters by API
One row per parameter concept. Each cell shows how that API treats it (forwarded, adapted, conditional on the model, ignored, or rejected with a 400) and the spelling that API uses. The same tables, filtered to one API, appear on each API reference page.
| Group | Parameter | Chat Completions | Responses | Messages |
|---|---|---|---|---|
| Structure | model | adapted · model | adapted · model | adapted · model |
| Structure | conversation so far | adapted · messages | adapted · input | forwarded · messages |
| Structure | system prompt | adapted · messages[role=system] | adapted · instructions | forwarded · system |
| Structure | stream | forwarded · stream | forwarded · stream | forwarded · stream |
| Structure | stream_options | adapted · stream_options | ignored · stream_options | no field |
| Generation | max_tokens | conditional · max_tokens | conditional · max_output_tokens | conditional · max_tokens |
| Generation | max_completion_tokens | adapted · max_completion_tokens | no field | no field |
| Generation | temperature | conditional · temperature | conditional · temperature | conditional · temperature |
| Generation | top_p | conditional · top_p | conditional · top_p | conditional · top_p |
| Generation | top_k | conditional · top_k | no field | conditional · top_k |
| Generation | stop_sequences | conditional · stop | no field | conditional · stop_sequences |
| Generation | seed | conditional · seed | no field | no field |
| Generation | presence_penalty | conditional · presence_penalty | no field | no field |
| Generation | frequency_penalty | conditional · frequency_penalty | no field | no field |
| Generation | verbosity | conditional · verbosity | conditional · text.verbosity | no field |
| Reasoning | reasoning_effort | conditional · reasoning_effort | conditional · reasoning.effort | adapted · output_config.effort |
| Reasoning | thinking | no field | no field | conditional · thinking |
| Reasoning | include | no field | conditional · include | no field |
| Tools | tools | adapted · tools | adapted · tools | adapted · tools |
| Tools | tool_choice | adapted · tool_choice | adapted · tool_choice | adapted · tool_choice |
| Tools | parallel_tool_calls | conditional · parallel_tool_calls | conditional · parallel_tool_calls | adapted · tool_choice.disable_parallel_tool_use |
| Tools | web_search_options | adapted · web_search_options | no field | no field |
| Tools | functions | adapted · functions | no field | no field |
| Tools | function_call | adapted · function_call | no field | no field |
| Output shape | response_format | conditional · response_format | conditional · text.format | adapted · output_config.format |
| Storage and chaining | store | ignored · store | adapted · store | no field |
| Storage and chaining | previous_response_id | no field | adapted · previous_response_id | no field |
| Storage and chaining | background | no field | ignored · background | no field |
| Accepted and ignored | metadata | ignored · metadata | ignored · metadata | ignored · metadata |
| Accepted and ignored | user | ignored · user | ignored · user | no field |
| Accepted and ignored | safety_identifier | ignored · safety_identifier | ignored · safety_identifier | no field |
| Accepted and ignored | service_tier | ignored · service_tier | ignored · service_tier | ignored · service_tier |
| Accepted and ignored | prompt_cache_key | ignored · prompt_cache_key | ignored · prompt_cache_key | no field |
| Accepted and ignored | prompt_cache_retention | ignored · prompt_cache_retention | ignored · prompt_cache_retention | no field |
| Accepted and ignored | n | ignored · n | no field | no field |
| Accepted and ignored | logprobs | ignored · logprobs | no field | no field |
| Accepted and ignored | top_logprobs | ignored · top_logprobs | ignored · top_logprobs | no field |
| Accepted and ignored | logit_bias | ignored · logit_bias | no field | no field |
| Accepted and ignored | prediction | ignored · prediction | no field | no field |
| Accepted and ignored | modalities | ignored · modalities | no field | no field |
| Accepted and ignored | audio | ignored · audio | no field | no field |
| Accepted and ignored | truncation | no field | ignored · truncation | no field |
| Accepted and ignored | max_tool_calls | no field | ignored · max_tool_calls | no field |
| Accepted and ignored | cache_control (top-level) | no field | no field | ignored · cache_control |
| Accepted and ignored | container | no field | no field | ignored · container |
| Accepted and ignored | inference_geo | no field | no field | ignored · inference_geo |
| Refused | conversation | no field | rejected (400) · conversation | no field |
| Refused | prompt | no field | rejected (400) · prompt | no field |
| Refused | context_management | no field | rejected (400) · context_management | no field |
Providers
Transport-level facts about each upstream provider. The models table below already has these intersected in; this table explains why a model row reads the way it does.
| Provider | Transport | Native web search | External search loop | Named tool_choice | tool_choice: none | Params the transport can't carry | max_tokens floor | Notes |
|---|---|---|---|---|---|---|---|---|
openai | openai_responses | openai_native | no | yes | yes | top_k, stop_sequences, thinking, seed, presence_penalty, frequency_penalty | 16 | Real api.openai.com rejects max_tokens below 16; requests below the floor are raised to it. |
anthropic | anthropic_messages | anthropic_native | no | yes | yes | seed, presence_penalty, frequency_penalty, verbosity | none | |
gemini | gemini_native | gemini_google_search | no | yes | yes | thinking, parallel_tool_calls, verbosity | none | Sets thinking depth through thinking_level, which the effort parameter carries; the fetch web tool is always dropped. |
fireworks | fireworks | no | yes | yes | no | thinking, seed, presence_penalty, frequency_penalty, verbosity | none | Shares Anthropic's wire shape but not its backend: tool_choice: none is honored by dropping the tools. |
moonshot | moonshot | moonshot_native | yes | no | yes | thinking, reasoning_effort, verbosity | none | Kimi reasons internally with no adjustable level. Its own $web_search builtin or the external loop, per policy. |
meta | fireworks | no | yes | yes | no | thinking, response_format, seed, presence_penalty, frequency_penalty, verbosity | none | As Fireworks. response_format refused pending verification of Meta's own spelling. |
cerebras | moonshot | no | yes | yes | yes | thinking, top_k, verbosity | none | |
groq | moonshot | no | yes | yes | yes | thinking, top_k, verbosity | none | |
xai | openai_responses | openai_native | no | yes | yes | top_k, stop_sequences, thinking, seed, presence_penalty, frequency_penalty, verbosity | none | OpenAI-compatible Responses transport; verbosity unverified and dropped. |
Models
One row per generation alias, in the order GET /v1/models lists them. Pinned versions share their family's facts. Embedding aliases are on Embeddings.
| Alias | Provider | Effort levels | thinking object | Web search | Named tool_choice | tool_choice: none | Parallel tool calls | JSON schema | JSON mode | Sampling | Stop sequences | seed and penalties | verbosity | Max output tokens | Context window | Notes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
mindshub_air | openai | not adjustable | no | none | yes | yes | yes | yes | yes | none | no | none | yes | 128,000 | 1,050,000 | [a] |
sonnet | anthropic | low · medium · high · max | yes | native | yes | yes | yes | yes | 400 | none | yes | none | no | 128,000 | 1,000,000 | |
sonnet-5 | anthropic | low · medium · high · max | yes | native | yes | yes | yes | yes | 400 | none | yes | none | no | 128,000 | 1,000,000 | |
opus | anthropic | low · medium · high · xhigh · max | yes | native | yes | yes | yes | yes | 400 | none | yes | none | no | 128,000 | 1,000,000 | |
opus-5 | anthropic | low · medium · high · xhigh · max | yes | native | yes | yes | yes | yes | 400 | none | yes | none | no | 128,000 | 1,000,000 | |
fable | anthropic | low · medium · high · xhigh · max | yes | native | → auto | drops tools | yes | yes | 400 | none | yes | none | no | 128,000 | 1,000,000 | |
fable-5-1 | anthropic | low · medium · high · xhigh · max | yes | native | → auto | drops tools | yes | yes | 400 | none | yes | none | no | 128,000 | 1,000,000 | |
fable-5 | anthropic | low · medium · high · xhigh · max | yes | native | yes | yes | yes | yes | 400 | none | yes | none | no | 128,000 | 1,000,000 | |
haiku | anthropic | not adjustable | yes | native | yes | yes | yes | yes | 400 | temperature, top_p, top_k | yes | none | no | provider default | 200,000 | |
haiku-4-5 | anthropic | not adjustable | yes | native | yes | yes | yes | yes | 400 | temperature, top_p, top_k | yes | none | no | provider default | 200,000 | |
gpt | openai | low · medium · high · xhigh · max | no | native | yes | yes | yes | yes | yes | none | no | none | yes | 128,000 | 1,050,000 | [a] |
gpt-6-astra | openai | low · medium · high · xhigh · max | no | native | yes | yes | yes | yes | yes | none | no | none | yes | 128,000 | 1,050,000 | [a] |
gpt-5-6-sol | openai | none · low · medium · high · xhigh · max | no | native | yes | yes | yes | yes | yes | none | no | none | yes | 128,000 | 1,050,000 | [a] |
gpt-terra | openai | none · low · medium · high · xhigh · max | no | native | yes | yes | yes | yes | yes | none | no | none | yes | 128,000 | 1,050,000 | [a] |
gpt-terra-5-6 | openai | none · low · medium · high · xhigh · max | no | native | yes | yes | yes | yes | yes | none | no | none | yes | 128,000 | 1,050,000 | [a] |
gpt-luna | openai | none · low · medium · high · xhigh · max | no | native | yes | yes | yes | yes | yes | none | no | none | yes | 128,000 | 1,050,000 | [a] |
gpt-luna-5-6 | openai | none · low · medium · high · xhigh · max | no | native | yes | yes | yes | yes | yes | none | no | none | yes | 128,000 | 1,050,000 | [a] |
gpt-codex | openai | low · medium · high · xhigh | no | native | yes | yes | yes | yes | yes | none | no | none | yes | 128,000 | 400,000 | [a] |
gpt-codex-5-3 | openai | low · medium · high · xhigh | no | native | yes | yes | yes | yes | yes | none | no | none | yes | 128,000 | 400,000 | [a] |
gpt-mini | openai | none · low · medium · high · xhigh | no | native | yes | yes | yes | yes | yes | temperature, top_p | no | none | yes | provider default | 400,000 | [a] |
gpt-mini-5-4 | openai | none · low · medium · high · xhigh | no | native | yes | yes | yes | yes | yes | temperature, top_p | no | none | yes | provider default | 400,000 | [a] |
gpt-nano | openai | none · low · medium · high · xhigh | no | native | yes | yes | yes | yes | yes | temperature, top_p | no | none | yes | provider default | 400,000 | [a] |
gpt-nano-5-4 | openai | none · low · medium · high · xhigh | no | native | yes | yes | yes | yes | yes | temperature, top_p | no | none | yes | provider default | 400,000 | [a] |
gemini | gemini | low · medium · high | no | native | yes | yes | no | yes | yes | none | yes | seed, presence_penalty, frequency_penalty | no | 65,536 | 1,048,576 | |
gemini-3-1-pro | gemini | low · medium · high | no | native | yes | yes | no | yes | yes | none | yes | seed, presence_penalty, frequency_penalty | no | 65,536 | 1,048,576 | |
gemini-flash | gemini | low · medium · high | no | native | yes | yes | no | yes | yes | none | yes | seed, presence_penalty, frequency_penalty | no | 65,536 | 1,048,576 | |
gemini-flash-3-8 | gemini | low · medium · high | no | native | yes | yes | no | yes | yes | none | yes | seed, presence_penalty, frequency_penalty | no | 65,536 | 1,048,576 | |
gemini-flash-3-7 | gemini | low · medium · high | no | native | yes | yes | no | yes | yes | none | yes | seed, presence_penalty, frequency_penalty | no | 65,536 | 1,048,576 | |
gemini-flash-3-6 | gemini | minimal · low · medium · high | no | native | yes | yes | no | yes | yes | none | yes | seed, presence_penalty, frequency_penalty | no | 65,536 | 1,048,576 | |
gemini-flash-3-5 | gemini | minimal · low · medium · high | no | native | yes | yes | no | yes | yes | none | yes | seed, presence_penalty, frequency_penalty | no | 65,536 | 1,048,576 | |
gemini-flash-3 | gemini | minimal · low · medium · high | no | native | yes | yes | no | yes | yes | temperature, top_p, top_k | yes | seed, presence_penalty, frequency_penalty | no | provider default | 1,048,576 | |
gemini-flash-lite | gemini | minimal · low · medium · high | no | native | yes | yes | no | yes | yes | none | yes | seed, presence_penalty, frequency_penalty | no | 65,536 | 1,048,576 | |
gemini-flash-lite-3-1 | gemini | minimal · low · medium · high | no | native | yes | yes | no | yes | yes | none | yes | seed, presence_penalty, frequency_penalty | no | 65,536 | 1,048,576 | |
kimi | fireworks | not adjustable | no | external (exa) | yes | drops tools | yes | yes | yes | temperature, top_p, top_k | yes | none | no | provider default | — | [b] |
kimi-k3 | fireworks | not adjustable | no | external (exa) | yes | drops tools | yes | yes | yes | temperature, top_p, top_k | yes | none | no | provider default | — | |
deepseek | fireworks | none · low · high · max | no | external (exa) | yes | drops tools | yes | yes | yes | temperature, top_p, top_k | yes | none | no | provider default | — | |
deepseek-v4-pro | fireworks | none · low · high · max | no | external (exa) | yes | drops tools | yes | yes | yes | temperature, top_p, top_k | yes | none | no | provider default | — | |
deepseek-v4-flash | fireworks | none · low · high · max | no | external (exa) | yes | drops tools | yes | yes | yes | temperature, top_p, top_k | yes | none | no | provider default | — | |
deepseek-v4-flash-0731 | fireworks | none · low · high · max | no | external (exa) | yes | drops tools | yes | yes | yes | temperature, top_p, top_k | yes | none | no | provider default | — | |
qwen | fireworks | low · medium · xhigh | no | external (exa) | yes | drops tools | yes | yes | yes | temperature, top_p, top_k | yes | none | no | provider default | — | |
qwen-3-8-a95b | fireworks | low · medium · xhigh | no | external (exa) | yes | drops tools | yes | yes | yes | temperature, top_p, top_k | yes | none | no | provider default | — | |
glm | fireworks | low · high · max | no | external (exa) | yes | drops tools | yes | yes | yes | temperature, top_p, top_k | yes | none | no | provider default | — | |
glm-5-3 | fireworks | low · high · max | no | external (exa) | yes | drops tools | yes | yes | yes | temperature, top_p, top_k | yes | none | no | provider default | — | |
glm-5-2 | fireworks | high · max | no | external (exa) | yes | drops tools | yes | yes | yes | temperature, top_p, top_k | yes | none | no | provider default | — | |
glm-5-3-flash | fireworks | low · high · max | no | external (exa) | yes | drops tools | yes | yes | yes | temperature, top_p, top_k | yes | none | no | provider default | — | |
glm-flash-5-3 | fireworks | low · high · max | no | external (exa) | yes | drops tools | yes | yes | yes | temperature, top_p, top_k | yes | none | no | provider default | — | |
muse-spark | meta | not adjustable | no | external (exa) | → auto | drops tools | yes | 400 | 400 | temperature, top_p, top_k | yes | none | no | provider default | 1,048,576 | [c] |
muse-spark-1-3 | meta | not adjustable | no | external (exa) | → auto | drops tools | yes | 400 | 400 | temperature, top_p, top_k | yes | none | no | provider default | 1,048,576 | |
muse-spark-1-2 | meta | not adjustable | no | external (exa) | → auto | drops tools | yes | 400 | 400 | temperature, top_p, top_k | yes | none | no | provider default | 1,048,576 | |
muse-spark-1-1 | meta | not adjustable | no | external (exa) | → auto | drops tools | yes | 400 | 400 | temperature, top_p, top_k | yes | none | no | provider default | 1,048,576 | |
grok | xai | low · medium · high · xhigh | no | native | yes | yes | yes | yes | yes | temperature, top_p | no | none | no | provider default | 500,000 | |
grok-4-6 | xai | low · medium · high · xhigh | no | native | yes | yes | yes | yes | yes | temperature, top_p | no | none | no | provider default | 500,000 | |
grok-4-5 | xai | low · medium · high | no | native | yes | yes | yes | yes | yes | temperature, top_p | no | none | no | provider default | 500,000 |
- [a]
max_tokensbelow 16 is raised to 16. - [b] Takes
temperatureonly at1andtop_ponly at0.95; other values return the provider's own 400. Tool schemas are normalized for Kimi's stricter validator. - [c] Only
tool_choice: "auto"is accepted upstream; named andrequiredare rewritten toauto,noneis honored by dropping the tools.response_formatis refused until Meta's own spelling is verified.
No production alias currently routes to: moonshot, cerebras, groq.
Generated from the live production model policy on 2026-09-10.
How this page is produced
The tables between the GENERATED markers are rendered by scripts/generate_capability_matrix.py from three sources: the per-API parameter contracts in the service's request modules, the per-provider transport table, and a committed snapshot of the production model policy. A unit test fails any pull request whose committed tables disagree with what the code renders, and the docs publish re-checks against the live production policy.
If a cell looks wrong, the fix is in the code or the policy, not on this page: file it against the inference service and the table follows on the next publish.