跳转到内容
v0.9.1正式版

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, 但两个头同时出现且值不一致会直接判失败。

Terminal window
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": "你好"}] }'
  • x-api-key or Authorization
  • anthropic-version
  • anthropic-beta
  • Halro-Route-Mode
  • Content-Type
请求字段
字段不支持该字段的 Provider Profile组合级限制
model—1 见脚注 1
max_tokensminimax.chat.v1、kimi.chat.v1、kimi.responses.v1、kimi.code.openai.chat.v1、minimax.cn.subscription.openai.chat.v1、minimax.global.subscription.openai.chat.v12 见脚注 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_sequencesopenai.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.v19 见脚注 9
temperaturekimi.chat.v1、kimi.anthropic.messages.v1、kimi.responses.v1、kimi.code.openai.chat.v1、kimi.code.anthropic.messages.v110 见脚注 10
top_pkimi.chat.v1、kimi.anthropic.messages.v1、kimi.responses.v1、kimi.code.openai.chat.v1、kimi.code.anthropic.messages.v111 见脚注 11
top_kopenai.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.v112 见脚注 12
toolsbigmodel.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.v113 见脚注 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_choicebigmodel.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.v119 见脚注 19
thinkingopenai.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.v120 见脚注 20
metadataopenai.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_tieropenai.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.effortopenai.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.v122 见脚注 22
output_config.formatdeepseek.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.v123 见脚注 23

这些字段在到达任何 Provider 之前就会被拒。照搬 OpenAI 文档最容易撞上的就是它们:

  • provider-executed tools (web_search_*, web_fetch_*, code_execution_*, advisor_*, tool_search_*) unless the selected connection declares provider_executed_tools
  • mcp_servers
  • container
  • fallbacks
  • Anthropic-defined tools in portable mode
  • strict tools in portable mode
  • signed thinking in portable mode
  • unknown top-level fields
  • unknown 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 契约覆盖与本构建可用性
Provider Profile成熟度本构建不支持的请求字段
openai.chat-embeddings.v1compatible可创建metadata、service_tier、thinking、top_k
openai.responses.v1compatible可创建metadata、output_config.effort、service_tier、stop_sequences、thinking、top_k
anthropic.messages.2023-06-01compatible可创建未声明
anthropic.subscription.messages.v1compatible默认关闭:需 provider_subscriptions.anthropic_claude未声明
azure-openai.chat-embeddings.v1compatible可创建metadata、service_tier、thinking、top_k
deepseek.chat.v1compatible可创建metadata、output_config.effort、output_config.format、service_tier、thinking、top_k
bigmodel.cn.chat-embeddings.v1experimental可创建metadata、output_config.format、service_tier、stop_sequences、thinking、tool_choice、tools、top_k
bigmodel.global.chat.v1experimental可创建metadata、output_config.format、service_tier、stop_sequences、thinking、tool_choice、tools、top_k
bigmodel.cn.coding.chat.v1experimental可创建metadata、output_config.format、service_tier、stop_sequences、thinking、tool_choice、tools、top_k
bigmodel.global.coding.chat.v1experimental可创建metadata、output_config.format、service_tier、stop_sequences、thinking、tool_choice、tools、top_k
openai-compatible.chat-embeddings.v1compatible可创建metadata、service_tier、thinking、top_k
gemini.generate-content.text.v1betacompatible可创建metadata、output_config.effort、output_config.format、service_tier、thinking、tool_choice、tools、top_k
bedrock.runtime.converse.text.v1compatiblewithheld(不可创建)metadata、output_config.effort、output_config.format、service_tier、thinking、tool_choice、tools、top_k
bedrock.mantle.chat.v1compatible可创建metadata、service_tier、thinking、top_k
bedrock.mantle.openai.chat.v1compatible可创建metadata、service_tier、thinking、top_k
bedrock.mantle.responses.v1compatible可创建metadata、output_config.effort、service_tier、stop_sequences、thinking、tools、top_k
bedrock.mantle.openai.responses.v1compatible可创建metadata、output_config.effort、service_tier、stop_sequences、thinking、tools、top_k
bedrock.mantle.anthropic.messages.v1compatible可创建output_config.effort、output_config.format
minimax.anthropic.messages.v1compatible可创建top_k、stop_sequences、output_config.effort、output_config.format
minimax.chat.v1compatible可创建max_tokens、metadata、output_config.format、service_tier、stop_sequences、thinking、top_k
minimax.responses.v1compatible可创建metadata、output_config.effort、output_config.format、service_tier、stop_sequences、thinking、top_k
kimi.chat.v1compatible可创建max_tokens、metadata、output_config.effort、service_tier、stop_sequences、temperature、thinking、tool_choice、top_k、top_p
kimi.anthropic.messages.v1compatible可创建metadata、output_config.effort、service_tier、temperature、thinking、top_k、top_p
kimi.responses.v1compatiblewithheld(不可创建)max_tokens、metadata、output_config.effort、service_tier、stop_sequences、temperature、thinking、top_k、top_p
kimi.code.openai.chat.v1experimental可创建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.v1experimental可创建max_tokens、metadata、output_config.format、service_tier、stop_sequences、thinking、top_k
minimax.global.subscription.openai.chat.v1experimental可创建max_tokens、metadata、output_config.format、service_tier、stop_sequences、thinking、top_k
kimi.code.anthropic.messages.v1experimental可创建metadata、output_config.effort、output_config.format、service_tier、temperature、thinking、top_k、top_p
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

anthropic-go、anthropic-typescript、anthropic-python

portable、native 与 Token Count 的选择见案例十。


本页的字段表、覆盖矩阵与偏差列表由 Halro 08af8c8b0b10 的兼容性契约生成 (scripts/generate-api-pages.mjs,当前副本摘要 db249a88ce62e5b7…)。

字段的类型、是否必填与语义说明尚未进入契约,因此本页只列字段名。

  1. 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 error
    • kimi.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/O
    • 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
    • kimi.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
    ↩
  2. 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 translated
    • kimi.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
    ↩
  3. 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 field
    • minimax.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 there
    • 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 translated
    • minimax.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
    • kimi.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 mark
    • kimi.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/O
    • kimi.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
    ↩
  4. 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 field
    • minimax.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 there
    • 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 translated
    • minimax.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
    • kimi.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 mark
    • kimi.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/O
    • kimi.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
    ↩
  5. 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 field
    • minimax.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 there
    • 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 translated
    • minimax.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
    • kimi.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 mark
    • kimi.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/O
    • kimi.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
    ↩
  6. 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 field
    • minimax.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 there
    • 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 translated
    • minimax.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
    • kimi.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 mark
    • kimi.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/O
    • kimi.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
    ↩
  7. 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 field
    • minimax.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 there
    • 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 translated
    • minimax.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
    • kimi.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 mark
    • kimi.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/O
    • kimi.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
    ↩
  8. 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 field
    • bedrock.mantle.responses.v1:不要组合 stream=true 与 tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
    • bedrock.mantle.openai.responses.v1:不要组合 stream=true 与 tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
    • minimax.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
    • kimi.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
    ↩
  9. 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 honored
    • kimi.anthropic.messages.v1:此面已实测执行 stop_sequences,不会像忽略该字段的 MiniMax 面一样拒绝它。 原始契约:stop_sequences is carried and was measured honored, so it is not refused the way MiniMax’s is
    • kimi.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
    ↩
  10. 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 error
    • kimi.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/O
    • kimi.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
    • kimi.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
    ↩
  11. 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 error
    • kimi.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/O
    • kimi.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
    ↩
  12. 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 honored
    • kimi.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 mark
    • kimi.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
    ↩
  13. tools 的组合级限制:

    • bedrock.mantle.responses.v1:不要组合 stream=true 与 tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
    • bedrock.mantle.openai.responses.v1:不要组合 stream=true 与 tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
    ↩
  14. tools[].type=custom 的组合级限制:

    • bedrock.mantle.responses.v1:不要组合 stream=true 与 tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
    • bedrock.mantle.openai.responses.v1:不要组合 stream=true 与 tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
    ↩
  15. tools[].type=bash_* 的组合级限制:

    • bedrock.mantle.responses.v1:不要组合 stream=true 与 tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
    • bedrock.mantle.openai.responses.v1:不要组合 stream=true 与 tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
    ↩
  16. tools[].type=text_editor_* 的组合级限制:

    • bedrock.mantle.responses.v1:不要组合 stream=true 与 tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
    • bedrock.mantle.openai.responses.v1:不要组合 stream=true 与 tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
    ↩
  17. tools[].type=memory_* 的组合级限制:

    • bedrock.mantle.responses.v1:不要组合 stream=true 与 tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
    • bedrock.mantle.openai.responses.v1:不要组合 stream=true 与 tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
    ↩
  18. tools[].type=computer_* 的组合级限制:

    • bedrock.mantle.responses.v1:不要组合 stream=true 与 tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
    • bedrock.mantle.openai.responses.v1:不要组合 stream=true 与 tools;该 Profile 会在 Provider I/O 前拒绝这类请求。 原始契约:streaming requests with tools are rejected before provider I/O
    ↩
  19. 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
    ↩
  20. 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 translated
    • kimi.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
    ↩
  21. 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/O
    • bedrock.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
    • bedrock.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/O
    • bedrock.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/O
    • bedrock.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 verbatim
    • 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 translated
    ↩
  22. 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/O
    • bedrock.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
    • bedrock.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/O
    • bedrock.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/O
    • 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 translated
    ↩
  23. 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/O
    • bedrock.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
    ↩