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 (except on a stream whose 200 went out early; see Errors). 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 | conditional · messages |
| Structure | system prompt | adapted · messages[role=system] | adapted · instructions | conditional · 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 | mcp_servers | no field | no field | adapted · mcp_servers |
| 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 | Remote MCP | MCP approvals | MCP deny-list | Named tool_choice | tool_choice: none | Params the transport can't carry | max_tokens floor | Notes |
|---|---|---|---|---|---|---|---|---|---|---|---|
openai | openai_responses | openai_native | no | native | yes | 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 | native | no | yes | yes | yes | seed, presence_penalty, frequency_penalty, verbosity | none | |
gemini | gemini_native | gemini_google_search | no | our client | no | yes | 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 | our client | 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 | our client | no | 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 | our client | no | yes | yes | no | thinking, seed, presence_penalty, frequency_penalty, verbosity | none | As Fireworks. response_format is emulated as a synthetic tool call rather than sent natively, forced where the alias allows it and offered unforced (best effort) where it doesn't, pending verification of Meta's own spelling. |
cerebras | moonshot | no | yes | our client | no | yes | yes | yes | thinking, top_k, verbosity | none | |
groq | moonshot | no | yes | our client | no | yes | yes | yes | thinking, top_k, verbosity | none | |
xai | openai_responses | openai_native | no | native | no | no | yes | yes | top_k, stop_sequences, thinking, seed, presence_penalty, frequency_penalty, verbosity | none | OpenAI-compatible Responses transport; verbosity unverified and dropped. |
Request structure per transport
What a request's shape may say on each wire, as opposed to what its parameters may say. A client can send a content block or a tool-schema keyword the target has no field for; where that happens it is dropped rather than forwarded into a 400, and named on X-MindsHub-Dropped-Content.
Two transports forward what they do not recognize instead, and the reason is published here rather than left to be inferred.
| Transport | Providers | Content blocks it carries | A block type it does not declare | Tool schema |
|---|---|---|---|---|
anthropic_messages | anthropic | document, image, image_url, redacted_thinking, search_result, server_tool_use, text, thinking, tool_result, tool_use, web_search_tool_result | forwarded — the target speaks Anthropic natively, so a block type this build has not enumerated is far more likely to be a new Anthropic block than a foreign one, and dropping it would break a request the upstream serves perfectly well | json_schema |
fireworks | fireworks, meta | image, image_url, text, tool_result, tool_use | dropped and reported | json_schema |
gemini_native | gemini | image_url, text | dropped and reported | gemini_openapi |
moonshot | cerebras, groq, moonshot | image_url, text | dropped and reported | json_schema |
openai_responses | openai, xai | computer_screenshot, encrypted_content, file, image, image_url, input_audio, input_file, input_image, input_text, output_text, refusal, summary_text, text | forwarded — this transport carries every backend speaking an OpenAI-compatible Responses API, not just real OpenAI — xAI reuses it unchanged — so a type outside the allowlist may be exactly right for whichever backend the request is routed to, and this gateway cannot tell | json_schema |
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 | native | yes | yes | yes | yes | yes | none | no | none | yes | 128,000 | 1,050,000 | [a] |
mindshub_blaze | cerebras | none · high | no | none | yes | yes | yes | yes | yes | temperature, top_p | yes | seed, presence_penalty, frequency_penalty | no | provider default | 131,072 | |
gpt-oss-fireworks | fireworks | not adjustable | no | none | yes | drops tools | yes | yes | yes | temperature, top_p, top_k | yes | none | no | provider default | 131,072 | |
sonnet | anthropic | low · medium · high · xhigh · max | yes | native | → auto | drops tools | yes | yes | 400 | none | yes | none | no | 128,000 | 1,000,000 | |
sonnet-5-5 | anthropic | low · medium · high · xhigh · max | yes | native | → auto | drops tools | 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 | → auto | drops tools | yes | yes | 400 | none | yes | none | no | 128,000 | 1,000,000 | |
opus-5-5 | anthropic | low · medium · high · xhigh · max | yes | native | → auto | drops tools | 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 | [b] |
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 | [b] |
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-sol | openai | low · medium · high · xhigh · max | no | native | yes | yes | yes | yes | yes | none | no | none | yes | 128,000 | 1,050,000 | [a] |
gpt-sol-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-sol-6-1 | openai | 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-luna-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 | — | [c] |
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-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-1-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 | — | |
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-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 | yes | yes | temperature, top_p, top_k | yes | none | no | provider default | 1,048,576 | [d] |
muse-spark-1-3 | meta | not adjustable | no | external (exa) | → auto | drops tools | yes | yes | yes | 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 | yes | yes | 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 | yes | yes | 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-7 | 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
temperatureortop_p, not both: when both are sent,top_pis dropped and named inX-MindsHub-Dropped-Params. - [c] Takes
temperatureonly at1andtop_ponly at0.95; other values return the provider's own 400. Tool schemas are normalized for Kimi's stricter validator. - [d] Only
tool_choice: "auto"is accepted upstream; named andrequiredare rewritten toauto,noneis honored by dropping the tools.response_formatis emulated as an unforced synthetic tool call rather than sent natively (this alias cannot force one), pending verification of Meta's own spelling — best effort, not guaranteed — see Structured output.
No production alias currently routes to: moonshot, groq.
Generated from the live production model policy on 2026-10-08.