Anthropic Messages
POST /v1/messages
compatible
语义操作 generate
契约修订 1
状态语义:stateless; portable is default; native pins one exact Anthropic-wire provider profile and disables cross-provider fallback
查看原始契约偏差(英文)
这些是源码契约中的逐条证据。日常接入先看本页示例、字段表和 Profile 覆盖矩阵;排查兼容性边界时 再展开核对原文。
- only anthropic-version 2023-06-01 is accepted
- anthropic-beta is forwarded only in native mode and only for tokens the selected connection has been configured to accept; portable mode rejects it because the request is re-authored through the canonical model and a beta token describes the request as written
- tools are classified by execution site: Anthropic-defined client-executed tools are accepted at any dated version suffix, while provider-executed tools require the selected connection to declare provider_executed_tools, because the upstream would make network calls outside SafeTransport’s host allowlist
- family matching is anchored to
<family><YYYYMMDD>, so a longer name that merely begins with a known family (bash_code_execution*) is classified on its own terms rather than as the client-executed tool it resembles - portable mode rejects members of tools[], output_config, and message content blocks that the canonical model cannot carry, because that path re-authors the body and would otherwise drop them silently; native mode forwards them verbatim
- mcp_servers, container, and fallbacks are rejected as deliberate boundaries rather than unmodelled fields: the first two delegate egress or code execution to the upstream, and the third moves model selection outside Halro’s routing and cost attribution
- in native mode tool and content-block bodies are forwarded verbatim, so cache_control and per-tool configuration reach the provider unchanged; portable mode refuses them rather than re-authoring the body without them
- Gateway Keys are accepted through x-api-key for official SDK compatibility and are never forwarded upstream
- native mode is selected with Halro-Route-Mode and requires either the direct Anthropic or Bedrock Mantle Anthropic profile
Anthropic 兼容层。注意 base URL 不带 /v1 —— Anthropic SDK 自己会补上,
这与 OpenAI SDK 相反,接错的表现是 404。认证可用 x-api-key 或 Authorization,
但两个头同时出现且值不一致会直接判失败。
curl https://halro.example.com/v1/messages \ -H "x-api-key: $HALRO_GATEWAY_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "Content-Type: application/json" \ -d '{ "model": "claude", "max_tokens": 256, "messages": [{"role": "user", "content": "你好"}] }'import osfrom anthropic import Anthropic
# base_url 不带 /v1,SDK 会自己补client = Anthropic(base_url="https://halro.example.com", api_key=os.environ["HALRO_GATEWAY_KEY"], timeout=60.0, max_retries=0)message = client.messages.create( model="claude", max_tokens=256, messages=[{"role": "user", "content": "你好"}],)print(message.content[0].text)import Anthropic from "@anthropic-ai/sdk";
// baseURL 不带 /v1,SDK 会自己补const client = new Anthropic({ baseURL: "https://halro.example.com", apiKey: process.env.HALRO_GATEWAY_KEY, timeout: 60_000, maxRetries: 0,});const message = await client.messages.create({ model: "claude", max_tokens: 256, messages: [{ role: "user", content: "你好" }],});console.log(message.content[0].text);x-api-key or Authorizationanthropic-versionanthropic-betaHalro-Route-ModeContent-Type
| 字段 | 不支持该字段的 Provider Profile | 组合级限制 |
|---|---|---|
model | — | 1 见脚注 1 |
max_tokens | minimax.chat.v1、kimi.chat.v1、kimi.responses.v1、kimi.code.openai.chat.v1、minimax.cn.subscription.openai.chat.v1、minimax.global.subscription.openai.chat.v1 | 2 见脚注 2 |
messages | — | 3 见脚注 3 |
messages[].role | — | 4 见脚注 4 |
messages[].content | — | 5 见脚注 5 |
messages[].content[].type=document | — | 6 见脚注 6 |
messages[].content[].type=search_result | — | 7 见脚注 7 |
system | — | — |
stream | — | 8 见脚注 8 |
stop_sequences | openai.responses.v1、bigmodel.cn.chat-embeddings.v1、bigmodel.global.chat.v1、bigmodel.cn.coding.chat.v1、bigmodel.global.coding.chat.v1、bedrock.mantle.responses.v1、bedrock.mantle.openai.responses.v1、minimax.anthropic.messages.v1、minimax.chat.v1、minimax.responses.v1、kimi.chat.v1、kimi.responses.v1、kimi.code.openai.chat.v1、minimax.cn.subscription.openai.chat.v1、minimax.global.subscription.openai.chat.v1 | 9 见脚注 9 |
temperature | kimi.chat.v1、kimi.anthropic.messages.v1、kimi.responses.v1、kimi.code.openai.chat.v1、kimi.code.anthropic.messages.v1 | 10 见脚注 10 |
top_p | kimi.chat.v1、kimi.anthropic.messages.v1、kimi.responses.v1、kimi.code.openai.chat.v1、kimi.code.anthropic.messages.v1 | 11 见脚注 11 |
top_k | openai.chat-embeddings.v1、openai.responses.v1、azure-openai.chat-embeddings.v1、deepseek.chat.v1、bigmodel.cn.chat-embeddings.v1、bigmodel.global.chat.v1、bigmodel.cn.coding.chat.v1、bigmodel.global.coding.chat.v1、openai-compatible.chat-embeddings.v1、gemini.generate-content.text.v1beta、bedrock.runtime.converse.text.v1、bedrock.mantle.chat.v1、bedrock.mantle.openai.chat.v1、bedrock.mantle.responses.v1、bedrock.mantle.openai.responses.v1、minimax.anthropic.messages.v1、minimax.chat.v1、minimax.responses.v1、kimi.chat.v1、kimi.anthropic.messages.v1、kimi.responses.v1、kimi.code.openai.chat.v1、minimax.cn.subscription.openai.chat.v1、minimax.global.subscription.openai.chat.v1、kimi.code.anthropic.messages.v1 | 12 见脚注 12 |
tools | bigmodel.cn.chat-embeddings.v1、bigmodel.global.chat.v1、bigmodel.cn.coding.chat.v1、bigmodel.global.coding.chat.v1、gemini.generate-content.text.v1beta、bedrock.runtime.converse.text.v1、bedrock.mantle.responses.v1、bedrock.mantle.openai.responses.v1 | 13 见脚注 13 |
tools[].type=custom | — | 14 见脚注 14 |
tools[].type=bash_* | — | 15 见脚注 15 |
tools[].type=text_editor_* | — | 16 见脚注 16 |
tools[].type=memory_* | — | 17 见脚注 17 |
tools[].type=computer_* | — | 18 见脚注 18 |
tool_choice | bigmodel.cn.chat-embeddings.v1、bigmodel.global.chat.v1、bigmodel.cn.coding.chat.v1、bigmodel.global.coding.chat.v1、gemini.generate-content.text.v1beta、bedrock.runtime.converse.text.v1、kimi.chat.v1、kimi.code.openai.chat.v1 | 19 见脚注 19 |
thinking | openai.chat-embeddings.v1、openai.responses.v1、azure-openai.chat-embeddings.v1、deepseek.chat.v1、bigmodel.cn.chat-embeddings.v1、bigmodel.global.chat.v1、bigmodel.cn.coding.chat.v1、bigmodel.global.coding.chat.v1、openai-compatible.chat-embeddings.v1、gemini.generate-content.text.v1beta、bedrock.runtime.converse.text.v1、bedrock.mantle.chat.v1、bedrock.mantle.openai.chat.v1、bedrock.mantle.responses.v1、bedrock.mantle.openai.responses.v1、minimax.chat.v1、minimax.responses.v1、kimi.chat.v1、kimi.anthropic.messages.v1、kimi.responses.v1、kimi.code.openai.chat.v1、minimax.cn.subscription.openai.chat.v1、minimax.global.subscription.openai.chat.v1、kimi.code.anthropic.messages.v1 | 20 见脚注 20 |
metadata | openai.chat-embeddings.v1、openai.responses.v1、azure-openai.chat-embeddings.v1、deepseek.chat.v1、bigmodel.cn.chat-embeddings.v1、bigmodel.global.chat.v1、bigmodel.cn.coding.chat.v1、bigmodel.global.coding.chat.v1、openai-compatible.chat-embeddings.v1、gemini.generate-content.text.v1beta、bedrock.runtime.converse.text.v1、bedrock.mantle.chat.v1、bedrock.mantle.openai.chat.v1、bedrock.mantle.responses.v1、bedrock.mantle.openai.responses.v1、minimax.chat.v1、minimax.responses.v1、kimi.chat.v1、kimi.anthropic.messages.v1、kimi.responses.v1、kimi.code.openai.chat.v1、minimax.cn.subscription.openai.chat.v1、minimax.global.subscription.openai.chat.v1、kimi.code.anthropic.messages.v1 | — |
service_tier | openai.chat-embeddings.v1、openai.responses.v1、azure-openai.chat-embeddings.v1、deepseek.chat.v1、bigmodel.cn.chat-embeddings.v1、bigmodel.global.chat.v1、bigmodel.cn.coding.chat.v1、bigmodel.global.coding.chat.v1、openai-compatible.chat-embeddings.v1、gemini.generate-content.text.v1beta、bedrock.runtime.converse.text.v1、bedrock.mantle.chat.v1、bedrock.mantle.openai.chat.v1、bedrock.mantle.responses.v1、bedrock.mantle.openai.responses.v1、minimax.chat.v1、minimax.responses.v1、kimi.chat.v1、kimi.anthropic.messages.v1、kimi.responses.v1、kimi.code.openai.chat.v1、minimax.cn.subscription.openai.chat.v1、minimax.global.subscription.openai.chat.v1、kimi.code.anthropic.messages.v1 | — |
output_config | — | 21 见脚注 21 |
output_config.effort | openai.responses.v1、deepseek.chat.v1、gemini.generate-content.text.v1beta、bedrock.runtime.converse.text.v1、bedrock.mantle.responses.v1、bedrock.mantle.openai.responses.v1、bedrock.mantle.anthropic.messages.v1、minimax.anthropic.messages.v1、minimax.responses.v1、kimi.chat.v1、kimi.anthropic.messages.v1、kimi.responses.v1、kimi.code.openai.chat.v1、kimi.code.anthropic.messages.v1 | 22 见脚注 22 |
output_config.format | deepseek.chat.v1、bigmodel.cn.chat-embeddings.v1、bigmodel.global.chat.v1、bigmodel.cn.coding.chat.v1、bigmodel.global.coding.chat.v1、gemini.generate-content.text.v1beta、bedrock.runtime.converse.text.v1、bedrock.mantle.anthropic.messages.v1、minimax.anthropic.messages.v1、minimax.chat.v1、minimax.responses.v1、kimi.code.openai.chat.v1、minimax.cn.subscription.openai.chat.v1、minimax.global.subscription.openai.chat.v1、kimi.code.anthropic.messages.v1 | 23 见脚注 23 |
门面层直接拒绝的字段
Section titled “门面层直接拒绝的字段”这些字段在到达任何 Provider 之前就会被拒。照搬 OpenAI 文档最容易撞上的就是它们:
provider-executed tools (web_search_*, web_fetch_*, code_execution_*, advisor_*, tool_search_*) unless the selected connection declares provider_executed_toolsmcp_serverscontainerfallbacksAnthropic-defined tools in portable modestrict tools in portable modesigned thinking in portable modeunknown top-level fieldsunknown members of tools[] and output_config in portable mode
id type role content model stop_reason stop_sequence usage
message_start content_block_start content_block_delta content_block_stop message_delta message_stop ping error
Provider Profile 契约覆盖与本构建可用性
Section titled “Provider Profile 契约覆盖与本构建可用性”| Provider Profile | 成熟度 | 本构建 | 不支持的请求字段 |
|---|---|---|---|
openai.chat-embeddings.v1 | compatible | 可创建 | metadata、service_tier、thinking、top_k |
openai.responses.v1 | compatible | 可创建 | metadata、output_config.effort、service_tier、stop_sequences、thinking、top_k |
anthropic.messages.2023-06-01 | compatible | 可创建 | 未声明 |
anthropic.subscription.messages.v1 | compatible | 默认关闭:需 provider_subscriptions.anthropic_claude | 未声明 |
azure-openai.chat-embeddings.v1 | compatible | 可创建 | metadata、service_tier、thinking、top_k |
deepseek.chat.v1 | compatible | 可创建 | metadata、output_config.effort、output_config.format、service_tier、thinking、top_k |
bigmodel.cn.chat-embeddings.v1 | experimental | 可创建 | metadata、output_config.format、service_tier、stop_sequences、thinking、tool_choice、tools、top_k |
bigmodel.global.chat.v1 | experimental | 可创建 | metadata、output_config.format、service_tier、stop_sequences、thinking、tool_choice、tools、top_k |
bigmodel.cn.coding.chat.v1 | experimental | 可创建 | metadata、output_config.format、service_tier、stop_sequences、thinking、tool_choice、tools、top_k |
bigmodel.global.coding.chat.v1 | experimental | 可创建 | metadata、output_config.format、service_tier、stop_sequences、thinking、tool_choice、tools、top_k |
openai-compatible.chat-embeddings.v1 | compatible | 可创建 | metadata、service_tier、thinking、top_k |
gemini.generate-content.text.v1beta | compatible | 可创建 | metadata、output_config.effort、output_config.format、service_tier、thinking、tool_choice、tools、top_k |
bedrock.runtime.converse.text.v1 | compatible | withheld(不可创建) | metadata、output_config.effort、output_config.format、service_tier、thinking、tool_choice、tools、top_k |
bedrock.mantle.chat.v1 | compatible | 可创建 | metadata、service_tier、thinking、top_k |
bedrock.mantle.openai.chat.v1 | compatible | 可创建 | metadata、service_tier、thinking、top_k |
bedrock.mantle.responses.v1 | compatible | 可创建 | metadata、output_config.effort、service_tier、stop_sequences、thinking、tools、top_k |
bedrock.mantle.openai.responses.v1 | compatible | 可创建 | metadata、output_config.effort、service_tier、stop_sequences、thinking、tools、top_k |
bedrock.mantle.anthropic.messages.v1 | compatible | 可创建 | output_config.effort、output_config.format |
minimax.anthropic.messages.v1 | compatible | 可创建 | top_k、stop_sequences、output_config.effort、output_config.format |
minimax.chat.v1 | compatible | 可创建 | max_tokens、metadata、output_config.format、service_tier、stop_sequences、thinking、top_k |
minimax.responses.v1 | compatible | 可创建 | metadata、output_config.effort、output_config.format、service_tier、stop_sequences、thinking、top_k |
kimi.chat.v1 | compatible | 可创建 | max_tokens、metadata、output_config.effort、service_tier、stop_sequences、temperature、thinking、tool_choice、top_k、top_p |
kimi.anthropic.messages.v1 | compatible | 可创建 | metadata、output_config.effort、service_tier、temperature、thinking、top_k、top_p |
kimi.responses.v1 | compatible | withheld(不可创建) | max_tokens、metadata、output_config.effort、service_tier、stop_sequences、temperature、thinking、top_k、top_p |
kimi.code.openai.chat.v1 | experimental | 可创建 | max_tokens、metadata、output_config.effort、output_config.format、service_tier、stop_sequences、temperature、thinking、top_k、top_p、tool_choice |
minimax.cn.subscription.openai.chat.v1 | experimental | 可创建 | max_tokens、metadata、output_config.format、service_tier、stop_sequences、thinking、top_k |
minimax.global.subscription.openai.chat.v1 | experimental | 可创建 | max_tokens、metadata、output_config.format、service_tier、stop_sequences、thinking、top_k |
kimi.code.anthropic.messages.v1 | experimental | 可创建 | metadata、output_config.effort、output_config.format、service_tier、temperature、thinking、top_k、top_p |
已声明的变换
Section titled “已声明的变换”openai.chat-embeddings.v1
- 操作结论:Halro 会把 portable Messages content 转换到 OpenAI Chat Completions;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through OpenAI Chat Completions
openai.responses.v1
- 操作结论:Halro 会把 portable Messages content 转换到 the OpenAI Responses endpoint;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through the OpenAI Responses endpoint
- 操作结论:该 Profile 没有流式 primitive;
stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by field
anthropic.messages.2023-06-01
- 操作结论:原生模式会保留通过校验的 Anthropic content block、thinking signature 与事件;客户端应按 Anthropic 原生类型读取。 原始契约:native mode preserves validated Anthropic content blocks and events
anthropic.subscription.messages.v1
- 操作结论:原生模式会保留通过校验的 Anthropic content block、thinking signature 与事件;客户端应按 Anthropic 原生类型读取。 原始契约:native mode preserves validated Anthropic content blocks and events
azure-openai.chat-embeddings.v1
- 操作结论:Halro 会把 portable Messages content 转换到 Azure Chat Completions;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through Azure Chat Completions
deepseek.chat.v1
- 操作结论:Halro 会把 portable Messages content 转换到 DeepSeek Chat Completions;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through DeepSeek Chat Completions
- 操作结论:DeepSeek 仅支持 effort 的
none/low/high与无 schema 的json_object;其他 effort 或json_schema会排除该 Profile。 原始契约:output_config.effort and output_config.format are declared unsupported at field granularity because support is value-dependent: none, low and high reach DeepSeek’s thinking switch while minimal, medium and xhigh have no rung, and DeepSeek has json_object but no schema mode - 操作结论:便携模式不要传 Anthropic 原生
thinking;DeepSeek reasoning 只能通过output_config.effort表达。 原始契约:thinking stays unsupported for the same reason it is on every other portable profile — it is the Anthropic-native block config, which only native mode forwards; DeepSeek’s own thinking switch is reached through output_config.effort
bigmodel.cn.chat-embeddings.v1
- 操作结论:Halro 会把 portable Messages content 转换到 BigModel Chat Completions;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through BigModel Chat Completions
- 操作结论:function tools 按文档最多传递 128 个;不要超过该上限。 原始契约:function tools are carried up to the documented limit of 128
- 操作结论:采样边界、reasoning effort 和必需的
max_tokens按字段值与确切 GLM 模型在 Provider I/O 前校验。 原始契约:sampling bounds, reasoning effort and the required max_tokens bound are checked against field values and the exact GLM model before provider I/O - 操作结论:BigModel 没有对应的
json_schema能力,不要提交这种格式。 原始契约:json_schema has no BigModel counterpart
bigmodel.cn.coding.chat.v1
- 操作结论:Halro 会把 portable Messages content 转换到 the Coding Plan’s Chat Completions route;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through the Coding Plan’s Chat Completions route
- 操作结论:function tools 按文档最多传递 128 个;不要超过该上限。 原始契约:function tools are carried up to the documented limit of 128
- 操作结论:采样边界、reasoning effort 和必需的
max_tokens按字段值与确切 GLM 模型在 Provider I/O 前校验。 原始契约:sampling bounds, reasoning effort and the required max_tokens bound are checked against field values and the exact GLM model before provider I/O - 操作结论:BigModel 没有对应的
json_schema能力,不要提交这种格式。 原始契约:json_schema has no BigModel counterpart
bigmodel.global.coding.chat.v1
- 操作结论:Halro 会把 portable Messages content 转换到 the international Coding Plan’s documented Chat Completions route;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through the international Coding Plan’s documented Chat Completions route
- 操作结论:function tools 按文档最多传递 128 个;不要超过该上限。 原始契约:function tools are carried up to the documented limit of 128
- 操作结论:采样边界、reasoning effort 和必需的
max_tokens按字段值与确切 GLM 模型在 Provider I/O 前校验。 原始契约:sampling bounds, reasoning effort and the required max_tokens bound are checked against field values and the exact GLM model before provider I/O - 操作结论:BigModel 没有对应的
json_schema能力,不要提交这种格式。 原始契约:json_schema has no BigModel counterpart
bigmodel.global.chat.v1
- 操作结论:Halro 会把 portable Messages content 转换到 Z.AI Chat Completions;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through Z.AI Chat Completions
- 操作结论:function tools 按文档最多传递 128 个;不要超过该上限。 原始契约:function tools are carried up to the documented limit of 128
- 操作结论:采样边界、reasoning effort 和必需的
max_tokens按字段值与确切 GLM 模型在 Provider I/O 前校验。 原始契约:sampling bounds, reasoning effort and the required max_tokens bound are checked against field values and the exact GLM model before provider I/O - 操作结论:BigModel 没有对应的
json_schema能力,不要提交这种格式。 原始契约:json_schema has no BigModel counterpart
openai-compatible.chat-embeddings.v1
- 操作结论:Halro 会把 portable Messages content 转换到 an OpenAI-compatible primitive;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through an OpenAI-compatible primitive
gemini.generate-content.text.v1beta
- 操作结论:Halro 会把 portable text Messages content 转换到 Gemini generateContent;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable text Messages content is mapped through Gemini generateContent
- 操作结论:该 Profile 不接受
output_config.effort或output_config.format的任何值;必须省略这两个字段。 原始契约:output_config.effort and output_config.format are this endpoint’s spelling of reasoning_effort and response_format, which this profile declares unsupported at every value, so a request carrying either is routed away before provider I/O
bedrock.runtime.converse.text.v1
- 操作结论:Halro 会把 portable text Messages content 转换到 Bedrock Converse;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable text Messages content is mapped through Bedrock Converse
- 操作结论:该 Profile 不接受
output_config.effort或output_config.format的任何值;必须省略这两个字段。 原始契约:output_config.effort and output_config.format are this endpoint’s spelling of reasoning_effort and response_format, which this profile declares unsupported at every value, so a request carrying either is routed away before provider I/O
bedrock.mantle.chat.v1
- 操作结论:Halro 会把 portable Messages content 转换到 Bedrock Mantle Chat Completions;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through Bedrock Mantle Chat Completions
bedrock.mantle.openai.chat.v1
- 操作结论:Halro 会把 portable Messages content 转换到 Bedrock Mantle Chat Completions;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through Bedrock Mantle Chat Completions
bedrock.mantle.responses.v1
- 操作结论:Halro 会把 portable Messages content 转换到 stateless Bedrock Mantle Responses;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through stateless Bedrock Mantle Responses
- 操作结论:不要组合
stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O - 操作结论:该无状态 Responses Profile 不传
output_config.effort;请求必须省略,否则目标会在 Provider I/O 前被排除。 原始契约:output_config.effort is this endpoint’s spelling of reasoning_effort, which the stateless Responses primitive does not carry, so a request carrying it is routed away before provider I/O
bedrock.mantle.openai.responses.v1
- 操作结论:Halro 会把 portable Messages content 转换到 stateless Bedrock Mantle Responses;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through stateless Bedrock Mantle Responses
- 操作结论:不要组合
stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O - 操作结论:该无状态 Responses Profile 不传
output_config.effort;请求必须省略,否则目标会在 Provider I/O 前被排除。 原始契约:output_config.effort is this endpoint’s spelling of reasoning_effort, which the stateless Responses primitive does not carry, so a request carrying it is routed away before provider I/O
bedrock.mantle.anthropic.messages.v1
- 操作结论:原生模式会保留通过校验的 Anthropic content block、thinking signature 与事件;客户端应按 Anthropic 原生类型读取。 原始契约:native mode preserves validated Anthropic content blocks, thinking signatures, and events
- 操作结论:便携模式必须省略
output_config;原生模式才会原样转发,且仍受构建固定的 Mantle Beta 能力边界约束。 原始契约:output_config is unsupported in portable mode only: this profile shares the Anthropic wire form and could carry the member, but its Mantle Beta capability ceiling is fixed by the build and widening it is a separate contract review, so a portable request carrying effort or format is routed away before provider I/O while native mode forwards the member verbatim
minimax.anthropic.messages.v1
- 操作结论:原生模式会保留通过校验的 Anthropic content block、thinking signature 与事件;客户端应按 Anthropic 原生类型读取。 原始契约:native mode preserves validated Anthropic content blocks, thinking signatures, and events
- 操作结论:MiniMax Messages 的原生和便携模式都不接受
top_k、stop_sequences或cache_control;提交前删除。 原始契约:top_k, stop_sequences and cache_control are rejected on the native path as well as the portable one, because MiniMax documents them as ignored rather than refused and a silently dropped boundary is billed as if it had been honored - 操作结论:该 Profile 没有 Prompt Cache;不要传
cache_control,也不要把费用按缓存折扣估算。 原始契约:prompt caching is unavailable, so a cache_control marker would claim a discount that does not exist - 操作结论:MiniMax Profile 不转发
anthropic-beta;调用 MiniMax 时不要依赖任何 Anthropic Beta 功能。 原始契约:anthropic-beta is never forwarded: MiniMax does not accept beta headers - 操作结论:MiniMax 不接受
output_config;便携请求必须省略,未指定 reasoning 时 Halro 会用thinking=disabled。 原始契约:output_config is unsupported because MiniMax’s reasoning switch is the older thinking member; a portable request that asks for no depth still arrives with thinking disabled, which is MiniMax’s exact spelling - 操作结论:Messages 只接受 Anthropic 原生 block type;不要提交 MiniMax 扩展的
video或mid_conv_system,它们会在解码阶段被拒绝。 原始契约:video and mid_conv_system content blocks are refused by the Messages decoder, which accepts only Anthropic’s own block types — MiniMax extends the wire form and Halro does not follow it there
minimax.chat.v1
- 操作结论:Halro 会把 portable Messages content 转换到 MiniMax Chat Completions;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through MiniMax Chat Completions
- 操作结论:MiniMax 只能把任意 depth 映射为 thinking 开启,且不能与必填
max_tokens同用;Messages 请求携带 effort 时该 Profile 会被排除。 原始契约:output_config.effort reaches MiniMax’s thinking switch, which has one on state and no depth ladder, so a depth is honored as on rather than preserved — but only on a request that does not also bound the answer, and this endpoint requires max_tokens, so an effort-bearing Messages request is routed away from this profile by field rather than translated - 操作结论:该 MiniMax Messages Profile 的
max_tokens只在 thinking 关闭时保持“回答 Token 上限”语义;不要同时请求 reasoning。 原始契约:max_tokens is why: MiniMax has one output bound and it counts reasoning, so the answer-only bound this endpoint requires is the same quantity only while nothing is thinking
minimax.responses.v1
- 操作结论:Halro 会把 portable Messages content 转换到 stateless MiniMax Responses;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through stateless MiniMax Responses
- 操作结论:该 Profile 没有流式 primitive;
stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by field - 操作结论:该无状态 Responses Profile 不传
output_config.effort;请求必须省略,否则目标会在 Provider I/O 前被排除。 原始契约:output_config.effort is this endpoint’s spelling of reasoning_effort, which the stateless Responses primitive does not carry
kimi.anthropic.messages.v1
- 操作结论:原生模式会保留通过校验的 Anthropic content block、thinking signature 与事件;客户端应按 Anthropic 原生类型读取。 原始契约:native mode preserves validated Anthropic content blocks, thinking signatures, and events
- 操作结论:便携模式必须省略
output_config.effort;原生模式可原样转发并读取 thinking block。 原始契约:output_config.effort is unsupported in portable mode only: a portable request naming a depth comes back carrying a thinking block, which the portable decoder refuses after the upstream has been paid, while native mode forwards the member and reads the block back verbatim - 操作结论:
output_config.format必须携带 JSON Schema;Halro 会映射为该 Profile 的json_schema并要求 Provider 执行。 原始契约:output_config.format is carried: this endpoint always names a schema, and Kimi takes a json_schema through the same member and enforces it - 操作结论:Kimi 对
temperature和top_p使用模型固定值;请求中必须省略这两个字段,否则该 Profile 不可用。 原始契约:temperature and top_p are rejected on both paths because Kimi pins each per model and answers any other value with an error - 操作结论:Kimi Messages 的原生和便携模式都不接受
top_k或cache_control;提交前删除这两个字段。 原始契约:top_k and cache_control are rejected on the native path as well as the portable one: Kimi’s Messages schema has neither member, top_k answers 200 without anything establishing what it did, and prompt caching is automatic with no handle to mark - 操作结论:Kimi Profile 不转发
anthropic-beta;调用 Kimi 时不要依赖任何 Anthropic Beta 功能。 原始契约:anthropic-beta is never forwarded: Kimi documents no beta headers - 操作结论:此面已实测执行
stop_sequences,不会像忽略该字段的 MiniMax 面一样拒绝它。 原始契约:stop_sequences is carried and was measured honored, so it is not refused the way MiniMax’s is
kimi.chat.v1
- 操作结论:Halro 会把 portable Messages content 转换到 Kimi Chat Completions;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through Kimi Chat Completions
- 操作结论:Kimi Messages 请求必须省略
temperature和top_p;任一字段出现都会在 Provider I/O 前排除该 Profile。 原始契约:temperature and top_p are this endpoint’s own members and Kimi models neither: they are absent from its request schema and pinned per model, so a Messages request naming either is routed away before provider I/O - 操作结论:该 Kimi Profile 的
output_config.effort只允许low或high;medium、xhigh、max和关闭 reasoning 都不可表示。 原始契约:output_config.effort is this endpoint’s spelling of reasoning_effort and is value-dependent: low and high reach Kimi’s switch, while medium, xhigh, Anthropic’s max and a request for no reasoning at all have no Kimi rung on this profile - 操作结论:
output_config.format必须携带 JSON Schema;Halro 会映射为该 Profile 的json_schema并要求 Provider 执行。 原始契约:output_config.format is carried: it is always a schema on this endpoint, and the Kimi Chat face documents the json_schema response format - 操作结论:该 Kimi Messages Profile 仅在未请求 reasoning 时把必填
max_tokens映射到max_completion_tokens;带 reasoning depth 的请求不可路由。 原始契约:max_tokens is carried as max_completion_tokens, which Kimi documents as the same bound under a newer name — but the two are the same quantity only while nothing is thinking, because Kimi’s single output bound counts reasoning, measured 2026-09-01. This endpoint requires max_tokens and means the answer alone, so a request that also asks for a depth is routed away rather than having this layer decide which of the two quantities the caller meant - 操作结论:Kimi 已实测执行
stop_sequences,最多五项、每项 32 字节;超出则在 Provider I/O 前排除目标。 原始契约:stop_sequences is carried and was measured honored, within Kimi’s published bounds of five sequences of at most 32 bytes each; a request outside them is routed away before provider I/O - 操作结论:Kimi 与 reasoning 同用时不要指定命名工具;
required仅在kimi-k3可与 depth 同用,K2.x 会在预留后拒绝,生产 Route 应按模型能力拆分。 原始契约:tool_choice is value-dependent: a named function together with a depth is refused by every Kimi model and routed away before provider I/O, while required together with a depth is refused by the K2.x line alone — a per-model limit this declaration cannot express, refused after the reservation rather than costing kimi-k3 the request it serves
kimi.responses.v1
- 操作结论:Halro 会把 portable Messages content 转换到 stateless Kimi Responses;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through stateless Kimi Responses
- 操作结论:该 Profile 没有流式 primitive;
stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by field - 操作结论:该无状态 Responses Profile 不传
output_config.effort;请求必须省略,否则目标会在 Provider I/O 前被排除。 原始契约:output_config.effort is this endpoint’s spelling of reasoning_effort, which the stateless Responses primitive does not carry - 操作结论:Kimi 对
temperature和top_p使用模型固定值;请求中必须省略这两个字段,否则该 Profile 不可用。 原始契约:temperature and top_p are rejected for the same reason as on the Kimi Chat profile: Kimi models neither member - 操作结论:
output_config.format必须携带 JSON Schema;Halro 会映射为该 Profile 的json_schema并要求 Provider 执行。 原始契约:output_config.format is carried: it is always a schema on this endpoint, and a schema is exactly what Kimi’s Responses face accepts
kimi.code.openai.chat.v1
- 操作结论:Halro 会把 portable Messages content 转换到 OpenAI Chat Completions;调用方继续使用北向字段,并按目标 Profile 的字段矩阵核对转换损失。 原始契约:portable Messages content is mapped through OpenAI Chat Completions
- 操作结论:Kimi Code 的 OpenAI 兼容面使用专用请求渲染器;协议形状相同不表示接受全部 OpenAI 成员。 原始契约:Kimi Code’s OpenAI-compatible face is rendered by its own request renderer, not the OpenAI one: the shared wire shape does not extend to the accepted member list
- 操作结论:未请求 reasoning depth 时明确关闭 reasoning;此产品默认推理并计费,不能依赖上游默认值。 原始契约:reasoning is switched off explicitly on every request that asks for no depth, because each model this product serves reasons by default and bills for it
- 操作结论:输出总上限包含 reasoning;只有未开启 thinking 时,才能把
max_tokens当作纯回答上限传递。 原始契约:the single output bound counts reasoning, so an answer-only max_tokens is carried only while nothing is thinking - 操作结论:只接受此面发布的
low/high/max深度;上游不强制这些档位,不能假定保留深度,未发布值会被拒绝。 原始契约:the published depth ladder is low/high/max and the upstream enforces none of it, so a depth this face does not publish is refused rather than served as the product’s default depth
minimax.cn.subscription.openai.chat.v1
- 操作结论:MiniMax Subscription Access 在独立产品面复用 Chat 渲染器;按量账号的 fixture 不作为订阅证据。 原始契约:MiniMax Subscription Access reuses the OpenAI Chat wire renderer on its isolated product surface; no metered-account fixture is credited to this profile
- 操作结论:依值决定的可选字段在订阅密钥 fixture 建立证据前保持失败关闭,不能按协议相同推定支持。 原始契约:value-dependent optional fields remain fail-closed until a subscription-key fixture establishes their behavior
minimax.global.subscription.openai.chat.v1
- 操作结论:MiniMax Subscription Access 在独立产品面复用 Chat 渲染器;按量账号的 fixture 不作为订阅证据。 原始契约:MiniMax Subscription Access reuses the OpenAI Chat wire renderer on its isolated product surface; no metered-account fixture is credited to this profile
- 操作结论:依值决定的可选字段在订阅密钥 fixture 建立证据前保持失败关闭,不能按协议相同推定支持。 原始契约:value-dependent optional fields remain fail-closed until a subscription-key fixture establishes their behavior
kimi.code.anthropic.messages.v1
- 操作结论:Kimi Code 在独立会员接入面复用 Messages 渲染器;Kimi 开放平台 fixture 不作为会员产品证据。 原始契约:Kimi Code reuses the Anthropic Messages wire renderer on its isolated membership surface; no Kimi Open Platform fixture is credited to this profile
- 操作结论:可移植请求未指定深度时发送 thinking disabled;已在 k3、k3-256k、kimi-for-coding 的流式和非流式请求实测。 原始契约:thinking disabled is sent on every portable request that asks for no depth, and was measured honoured on k3, k3-256k and kimi-for-coding, non-streaming and streaming alike
- 操作结论:此面接受
temperature、top_k并返回 200 却不能证明生效,因此 Halro 拒绝这些字段。 原始契约:temperature and top_k are refused here because this face accepts them and answers 200 without establishing that either was read, where the Chat face refuses them outright - 操作结论:
stop_sequences已实测执行,但截断结果返回stop_reason=end_turn和空stop_sequence,不要依赖命中的序列名。 原始契约:stop_sequences is carried and was measured honoured, but a cut answer reports stop_reason end_turn with a null stop_sequence rather than naming the sequence
已验证的证据:gateway_contract、provider_transport_fixture、sdk_blackbox
SDK 黑盒协议桩矩阵
Section titled “SDK 黑盒协议桩矩阵”anthropic-go、anthropic-typescript、anthropic-python
portable、native 与 Token Count 的选择见案例十。
本页的字段表、覆盖矩阵与偏差列表由 Halro 08af8c8b0b10 的兼容性契约生成
(scripts/generate-api-pages.mjs,当前副本摘要 db249a88ce62e5b7…)。
字段的类型、是否必填与语义说明尚未进入契约,因此本页只列字段名。
Footnotes
Section titled “Footnotes”-
model的组合级限制:kimi.anthropic.messages.v1:Kimi 对temperature和top_p使用模型固定值;请求中必须省略这两个字段,否则该 Profile 不可用。 原始契约:temperature and top_p are rejected on both paths because Kimi pins each per model and answers any other value with an errorkimi.chat.v1:Kimi Messages 请求必须省略temperature和top_p;任一字段出现都会在 Provider I/O 前排除该 Profile。 原始契约:temperature and top_p are this endpoint’s own members and Kimi models neither: they are absent from its request schema and pinned per model, so a Messages request naming either is routed away before provider I/Okimi.chat.v1:Kimi 与 reasoning 同用时不要指定命名工具;required仅在kimi-k3可与 depth 同用,K2.x 会在预留后拒绝,生产 Route 应按模型能力拆分。 原始契约:tool_choice is value-dependent: a named function together with a depth is refused by every Kimi model and routed away before provider I/O, while required together with a depth is refused by the K2.x line alone — a per-model limit this declaration cannot express, refused after the reservation rather than costing kimi-k3 the request it serveskimi.responses.v1:Kimi 对temperature和top_p使用模型固定值;请求中必须省略这两个字段,否则该 Profile 不可用。 原始契约:temperature and top_p are rejected for the same reason as on the Kimi Chat profile: Kimi models neither member
-
max_tokens的组合级限制:minimax.chat.v1:MiniMax 只能把任意 depth 映射为 thinking 开启,且不能与必填max_tokens同用;Messages 请求携带 effort 时该 Profile 会被排除。 原始契约:output_config.effort reaches MiniMax’s thinking switch, which has one on state and no depth ladder, so a depth is honored as on rather than preserved — but only on a request that does not also bound the answer, and this endpoint requires max_tokens, so an effort-bearing Messages request is routed away from this profile by field rather than translatedkimi.chat.v1:该 Kimi Messages Profile 仅在未请求 reasoning 时把必填max_tokens映射到max_completion_tokens;带 reasoning depth 的请求不可路由。 原始契约:max_tokens is carried as max_completion_tokens, which Kimi documents as the same bound under a newer name — but the two are the same quantity only while nothing is thinking, because Kimi’s single output bound counts reasoning, measured 2026-09-01. This endpoint requires max_tokens and means the answer alone, so a request that also asks for a depth is routed away rather than having this layer decide which of the two quantities the caller meant
-
messages的组合级限制:openai.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by fieldminimax.anthropic.messages.v1:Messages 只接受 Anthropic 原生 block type;不要提交 MiniMax 扩展的video或mid_conv_system,它们会在解码阶段被拒绝。 原始契约:video and mid_conv_system content blocks are refused by the Messages decoder, which accepts only Anthropic’s own block types — MiniMax extends the wire form and Halro does not follow it thereminimax.chat.v1:MiniMax 只能把任意 depth 映射为 thinking 开启,且不能与必填max_tokens同用;Messages 请求携带 effort 时该 Profile 会被排除。 原始契约:output_config.effort reaches MiniMax’s thinking switch, which has one on state and no depth ladder, so a depth is honored as on rather than preserved — but only on a request that does not also bound the answer, and this endpoint requires max_tokens, so an effort-bearing Messages request is routed away from this profile by field rather than translatedminimax.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by fieldkimi.anthropic.messages.v1:Kimi Messages 的原生和便携模式都不接受top_k或cache_control;提交前删除这两个字段。 原始契约:top_k and cache_control are rejected on the native path as well as the portable one: Kimi’s Messages schema has neither member, top_k answers 200 without anything establishing what it did, and prompt caching is automatic with no handle to markkimi.chat.v1:Kimi Messages 请求必须省略temperature和top_p;任一字段出现都会在 Provider I/O 前排除该 Profile。 原始契约:temperature and top_p are this endpoint’s own members and Kimi models neither: they are absent from its request schema and pinned per model, so a Messages request naming either is routed away before provider I/Okimi.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by field
-
messages[].role的组合级限制:openai.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by fieldminimax.anthropic.messages.v1:Messages 只接受 Anthropic 原生 block type;不要提交 MiniMax 扩展的video或mid_conv_system,它们会在解码阶段被拒绝。 原始契约:video and mid_conv_system content blocks are refused by the Messages decoder, which accepts only Anthropic’s own block types — MiniMax extends the wire form and Halro does not follow it thereminimax.chat.v1:MiniMax 只能把任意 depth 映射为 thinking 开启,且不能与必填max_tokens同用;Messages 请求携带 effort 时该 Profile 会被排除。 原始契约:output_config.effort reaches MiniMax’s thinking switch, which has one on state and no depth ladder, so a depth is honored as on rather than preserved — but only on a request that does not also bound the answer, and this endpoint requires max_tokens, so an effort-bearing Messages request is routed away from this profile by field rather than translatedminimax.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by fieldkimi.anthropic.messages.v1:Kimi Messages 的原生和便携模式都不接受top_k或cache_control;提交前删除这两个字段。 原始契约:top_k and cache_control are rejected on the native path as well as the portable one: Kimi’s Messages schema has neither member, top_k answers 200 without anything establishing what it did, and prompt caching is automatic with no handle to markkimi.chat.v1:Kimi Messages 请求必须省略temperature和top_p;任一字段出现都会在 Provider I/O 前排除该 Profile。 原始契约:temperature and top_p are this endpoint’s own members and Kimi models neither: they are absent from its request schema and pinned per model, so a Messages request naming either is routed away before provider I/Okimi.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by field
-
messages[].content的组合级限制:openai.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by fieldminimax.anthropic.messages.v1:Messages 只接受 Anthropic 原生 block type;不要提交 MiniMax 扩展的video或mid_conv_system,它们会在解码阶段被拒绝。 原始契约:video and mid_conv_system content blocks are refused by the Messages decoder, which accepts only Anthropic’s own block types — MiniMax extends the wire form and Halro does not follow it thereminimax.chat.v1:MiniMax 只能把任意 depth 映射为 thinking 开启,且不能与必填max_tokens同用;Messages 请求携带 effort 时该 Profile 会被排除。 原始契约:output_config.effort reaches MiniMax’s thinking switch, which has one on state and no depth ladder, so a depth is honored as on rather than preserved — but only on a request that does not also bound the answer, and this endpoint requires max_tokens, so an effort-bearing Messages request is routed away from this profile by field rather than translatedminimax.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by fieldkimi.anthropic.messages.v1:Kimi Messages 的原生和便携模式都不接受top_k或cache_control;提交前删除这两个字段。 原始契约:top_k and cache_control are rejected on the native path as well as the portable one: Kimi’s Messages schema has neither member, top_k answers 200 without anything establishing what it did, and prompt caching is automatic with no handle to markkimi.chat.v1:Kimi Messages 请求必须省略temperature和top_p;任一字段出现都会在 Provider I/O 前排除该 Profile。 原始契约:temperature and top_p are this endpoint’s own members and Kimi models neither: they are absent from its request schema and pinned per model, so a Messages request naming either is routed away before provider I/Okimi.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by field
-
messages[].content[].type=document的组合级限制:openai.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by fieldminimax.anthropic.messages.v1:Messages 只接受 Anthropic 原生 block type;不要提交 MiniMax 扩展的video或mid_conv_system,它们会在解码阶段被拒绝。 原始契约:video and mid_conv_system content blocks are refused by the Messages decoder, which accepts only Anthropic’s own block types — MiniMax extends the wire form and Halro does not follow it thereminimax.chat.v1:MiniMax 只能把任意 depth 映射为 thinking 开启,且不能与必填max_tokens同用;Messages 请求携带 effort 时该 Profile 会被排除。 原始契约:output_config.effort reaches MiniMax’s thinking switch, which has one on state and no depth ladder, so a depth is honored as on rather than preserved — but only on a request that does not also bound the answer, and this endpoint requires max_tokens, so an effort-bearing Messages request is routed away from this profile by field rather than translatedminimax.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by fieldkimi.anthropic.messages.v1:Kimi Messages 的原生和便携模式都不接受top_k或cache_control;提交前删除这两个字段。 原始契约:top_k and cache_control are rejected on the native path as well as the portable one: Kimi’s Messages schema has neither member, top_k answers 200 without anything establishing what it did, and prompt caching is automatic with no handle to markkimi.chat.v1:Kimi Messages 请求必须省略temperature和top_p;任一字段出现都会在 Provider I/O 前排除该 Profile。 原始契约:temperature and top_p are this endpoint’s own members and Kimi models neither: they are absent from its request schema and pinned per model, so a Messages request naming either is routed away before provider I/Okimi.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by field
-
messages[].content[].type=search_result的组合级限制:openai.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by fieldminimax.anthropic.messages.v1:Messages 只接受 Anthropic 原生 block type;不要提交 MiniMax 扩展的video或mid_conv_system,它们会在解码阶段被拒绝。 原始契约:video and mid_conv_system content blocks are refused by the Messages decoder, which accepts only Anthropic’s own block types — MiniMax extends the wire form and Halro does not follow it thereminimax.chat.v1:MiniMax 只能把任意 depth 映射为 thinking 开启,且不能与必填max_tokens同用;Messages 请求携带 effort 时该 Profile 会被排除。 原始契约:output_config.effort reaches MiniMax’s thinking switch, which has one on state and no depth ladder, so a depth is honored as on rather than preserved — but only on a request that does not also bound the answer, and this endpoint requires max_tokens, so an effort-bearing Messages request is routed away from this profile by field rather than translatedminimax.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by fieldkimi.anthropic.messages.v1:Kimi Messages 的原生和便携模式都不接受top_k或cache_control;提交前删除这两个字段。 原始契约:top_k and cache_control are rejected on the native path as well as the portable one: Kimi’s Messages schema has neither member, top_k answers 200 without anything establishing what it did, and prompt caching is automatic with no handle to markkimi.chat.v1:Kimi Messages 请求必须省略temperature和top_p;任一字段出现都会在 Provider I/O 前排除该 Profile。 原始契约:temperature and top_p are this endpoint’s own members and Kimi models neither: they are absent from its request schema and pinned per model, so a Messages request naming either is routed away before provider I/Okimi.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by field
-
stream的组合级限制:openai.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by fieldbedrock.mantle.responses.v1:不要组合stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/Obedrock.mantle.openai.responses.v1:不要组合stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/Ominimax.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by fieldkimi.responses.v1:该 Profile 没有流式 primitive;stream=true时 Halro 会在 Provider I/O 前排除该目标,请配置其他流式目标或改为非流式。 原始契约:this profile binds no stream primitive, so a streaming Messages request is routed away rather than refused by field
-
stop_sequences的组合级限制:minimax.anthropic.messages.v1:MiniMax Messages 的原生和便携模式都不接受top_k、stop_sequences或cache_control;提交前删除。 原始契约:top_k, stop_sequences and cache_control are rejected on the native path as well as the portable one, because MiniMax documents them as ignored rather than refused and a silently dropped boundary is billed as if it had been honoredkimi.anthropic.messages.v1:此面已实测执行stop_sequences,不会像忽略该字段的 MiniMax 面一样拒绝它。 原始契约:stop_sequences is carried and was measured honored, so it is not refused the way MiniMax’s iskimi.chat.v1:Kimi 已实测执行stop_sequences,最多五项、每项 32 字节;超出则在 Provider I/O 前排除目标。 原始契约:stop_sequences is carried and was measured honored, within Kimi’s published bounds of five sequences of at most 32 bytes each; a request outside them is routed away before provider I/O
-
temperature的组合级限制:kimi.anthropic.messages.v1:Kimi 对temperature和top_p使用模型固定值;请求中必须省略这两个字段,否则该 Profile 不可用。 原始契约:temperature and top_p are rejected on both paths because Kimi pins each per model and answers any other value with an errorkimi.chat.v1:Kimi Messages 请求必须省略temperature和top_p;任一字段出现都会在 Provider I/O 前排除该 Profile。 原始契约:temperature and top_p are this endpoint’s own members and Kimi models neither: they are absent from its request schema and pinned per model, so a Messages request naming either is routed away before provider I/Okimi.responses.v1:Kimi 对temperature和top_p使用模型固定值;请求中必须省略这两个字段,否则该 Profile 不可用。 原始契约:temperature and top_p are rejected for the same reason as on the Kimi Chat profile: Kimi models neither memberkimi.code.anthropic.messages.v1:此面接受temperature、top_k并返回 200 却不能证明生效,因此 Halro 拒绝这些字段。 原始契约:temperature and top_k are refused here because this face accepts them and answers 200 without establishing that either was read, where the Chat face refuses them outright
-
top_p的组合级限制:kimi.anthropic.messages.v1:Kimi 对temperature和top_p使用模型固定值;请求中必须省略这两个字段,否则该 Profile 不可用。 原始契约:temperature and top_p are rejected on both paths because Kimi pins each per model and answers any other value with an errorkimi.chat.v1:Kimi Messages 请求必须省略temperature和top_p;任一字段出现都会在 Provider I/O 前排除该 Profile。 原始契约:temperature and top_p are this endpoint’s own members and Kimi models neither: they are absent from its request schema and pinned per model, so a Messages request naming either is routed away before provider I/Okimi.responses.v1:Kimi 对temperature和top_p使用模型固定值;请求中必须省略这两个字段,否则该 Profile 不可用。 原始契约:temperature and top_p are rejected for the same reason as on the Kimi Chat profile: Kimi models neither member
-
top_k的组合级限制:minimax.anthropic.messages.v1:MiniMax Messages 的原生和便携模式都不接受top_k、stop_sequences或cache_control;提交前删除。 原始契约:top_k, stop_sequences and cache_control are rejected on the native path as well as the portable one, because MiniMax documents them as ignored rather than refused and a silently dropped boundary is billed as if it had been honoredkimi.anthropic.messages.v1:Kimi Messages 的原生和便携模式都不接受top_k或cache_control;提交前删除这两个字段。 原始契约:top_k and cache_control are rejected on the native path as well as the portable one: Kimi’s Messages schema has neither member, top_k answers 200 without anything establishing what it did, and prompt caching is automatic with no handle to markkimi.code.anthropic.messages.v1:此面接受temperature、top_k并返回 200 却不能证明生效,因此 Halro 拒绝这些字段。 原始契约:temperature and top_k are refused here because this face accepts them and answers 200 without establishing that either was read, where the Chat face refuses them outright
-
tools的组合级限制:bedrock.mantle.responses.v1:不要组合stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/Obedrock.mantle.openai.responses.v1:不要组合stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
-
tools[].type=custom的组合级限制:bedrock.mantle.responses.v1:不要组合stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/Obedrock.mantle.openai.responses.v1:不要组合stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
-
tools[].type=bash_*的组合级限制:bedrock.mantle.responses.v1:不要组合stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/Obedrock.mantle.openai.responses.v1:不要组合stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
-
tools[].type=text_editor_*的组合级限制:bedrock.mantle.responses.v1:不要组合stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/Obedrock.mantle.openai.responses.v1:不要组合stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
-
tools[].type=memory_*的组合级限制:bedrock.mantle.responses.v1:不要组合stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/Obedrock.mantle.openai.responses.v1:不要组合stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
-
tools[].type=computer_*的组合级限制:bedrock.mantle.responses.v1:不要组合stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/Obedrock.mantle.openai.responses.v1:不要组合stream=true与tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
-
tool_choice的组合级限制:kimi.chat.v1:Kimi 与 reasoning 同用时不要指定命名工具;required仅在kimi-k3可与 depth 同用,K2.x 会在预留后拒绝,生产 Route 应按模型能力拆分。 原始契约:tool_choice is value-dependent: a named function together with a depth is refused by every Kimi model and routed away before provider I/O, while required together with a depth is refused by the K2.x line alone — a per-model limit this declaration cannot express, refused after the reservation rather than costing kimi-k3 the request it serves
-
thinking的组合级限制:minimax.chat.v1:MiniMax 只能把任意 depth 映射为 thinking 开启,且不能与必填max_tokens同用;Messages 请求携带 effort 时该 Profile 会被排除。 原始契约:output_config.effort reaches MiniMax’s thinking switch, which has one on state and no depth ladder, so a depth is honored as on rather than preserved — but only on a request that does not also bound the answer, and this endpoint requires max_tokens, so an effort-bearing Messages request is routed away from this profile by field rather than translatedkimi.chat.v1:该 Kimi Messages Profile 仅在未请求 reasoning 时把必填max_tokens映射到max_completion_tokens;带 reasoning depth 的请求不可路由。 原始契约:max_tokens is carried as max_completion_tokens, which Kimi documents as the same bound under a newer name — but the two are the same quantity only while nothing is thinking, because Kimi’s single output bound counts reasoning, measured 2026-09-01. This endpoint requires max_tokens and means the answer alone, so a request that also asks for a depth is routed away rather than having this layer decide which of the two quantities the caller meant
-
output_config的组合级限制:gemini.generate-content.text.v1beta:该 Profile 不接受output_config.effort或output_config.format的任何值;必须省略这两个字段。 原始契约:output_config.effort and output_config.format are this endpoint’s spelling of reasoning_effort and response_format, which this profile declares unsupported at every value, so a request carrying either is routed away before provider I/Obedrock.runtime.converse.text.v1:该 Profile 不接受output_config.effort或output_config.format的任何值;必须省略这两个字段。 原始契约:output_config.effort and output_config.format are this endpoint’s spelling of reasoning_effort and response_format, which this profile declares unsupported at every value, so a request carrying either is routed away before provider I/Obedrock.mantle.responses.v1:该无状态 Responses Profile 不传output_config.effort;请求必须省略,否则目标会在 Provider I/O 前被排除。 原始契约:output_config.effort is this endpoint’s spelling of reasoning_effort, which the stateless Responses primitive does not carry, so a request carrying it is routed away before provider I/Obedrock.mantle.openai.responses.v1:该无状态 Responses Profile 不传output_config.effort;请求必须省略,否则目标会在 Provider I/O 前被排除。 原始契约:output_config.effort is this endpoint’s spelling of reasoning_effort, which the stateless Responses primitive does not carry, so a request carrying it is routed away before provider I/Obedrock.mantle.anthropic.messages.v1:便携模式必须省略output_config;原生模式才会原样转发,且仍受构建固定的 Mantle Beta 能力边界约束。 原始契约:output_config is unsupported in portable mode only: this profile shares the Anthropic wire form and could carry the member, but its Mantle Beta capability ceiling is fixed by the build and widening it is a separate contract review, so a portable request carrying effort or format is routed away before provider I/O while native mode forwards the member verbatimminimax.chat.v1:MiniMax 只能把任意 depth 映射为 thinking 开启,且不能与必填max_tokens同用;Messages 请求携带 effort 时该 Profile 会被排除。 原始契约:output_config.effort reaches MiniMax’s thinking switch, which has one on state and no depth ladder, so a depth is honored as on rather than preserved — but only on a request that does not also bound the answer, and this endpoint requires max_tokens, so an effort-bearing Messages request is routed away from this profile by field rather than translated
-
output_config.effort的组合级限制:gemini.generate-content.text.v1beta:该 Profile 不接受output_config.effort或output_config.format的任何值;必须省略这两个字段。 原始契约:output_config.effort and output_config.format are this endpoint’s spelling of reasoning_effort and response_format, which this profile declares unsupported at every value, so a request carrying either is routed away before provider I/Obedrock.runtime.converse.text.v1:该 Profile 不接受output_config.effort或output_config.format的任何值;必须省略这两个字段。 原始契约:output_config.effort and output_config.format are this endpoint’s spelling of reasoning_effort and response_format, which this profile declares unsupported at every value, so a request carrying either is routed away before provider I/Obedrock.mantle.responses.v1:该无状态 Responses Profile 不传output_config.effort;请求必须省略,否则目标会在 Provider I/O 前被排除。 原始契约:output_config.effort is this endpoint’s spelling of reasoning_effort, which the stateless Responses primitive does not carry, so a request carrying it is routed away before provider I/Obedrock.mantle.openai.responses.v1:该无状态 Responses Profile 不传output_config.effort;请求必须省略,否则目标会在 Provider I/O 前被排除。 原始契约:output_config.effort is this endpoint’s spelling of reasoning_effort, which the stateless Responses primitive does not carry, so a request carrying it is routed away before provider I/Ominimax.chat.v1:MiniMax 只能把任意 depth 映射为 thinking 开启,且不能与必填max_tokens同用;Messages 请求携带 effort 时该 Profile 会被排除。 原始契约:output_config.effort reaches MiniMax’s thinking switch, which has one on state and no depth ladder, so a depth is honored as on rather than preserved — but only on a request that does not also bound the answer, and this endpoint requires max_tokens, so an effort-bearing Messages request is routed away from this profile by field rather than translated
-
output_config.format的组合级限制:gemini.generate-content.text.v1beta:该 Profile 不接受output_config.effort或output_config.format的任何值;必须省略这两个字段。 原始契约:output_config.effort and output_config.format are this endpoint’s spelling of reasoning_effort and response_format, which this profile declares unsupported at every value, so a request carrying either is routed away before provider I/Obedrock.runtime.converse.text.v1:该 Profile 不接受output_config.effort或output_config.format的任何值;必须省略这两个字段。 原始契约:output_config.effort and output_config.format are this endpoint’s spelling of reasoning_effort and response_format, which this profile declares unsupported at every value, so a request carrying either is routed away before provider I/O