跳转到内容
v0.8.4正式版

Gateway 错误码与处理方式

本页以 Halro 8f185de7674c 的公开 Gateway 数据面和 Run Governance 错误构造点为基线,不包含 Admin 控制面的表单错误。OpenAI 形状端点和 Run Governance 可以按 error.code 分支;Anthropic 门面没有 error.code,应按 HTTP 状态和 error.type 处理。两种门面都应记录 Request ID; message 是面向人的脱敏说明,不是稳定协议字段。

同一个 code 在不同阶段可能对应不同 HTTP 状态,表中会全部列出。状态码相同也不代表处理方式相同。

请求、身份与能力
codeHTTP含义与处理
invalid_api_key401Key 缺失、格式错误、无效或已吊销;修复凭据,不重试原值
gateway_key_scope_denied403Key 缺少所需 Scope;由管理员签发最小权限 Key
model_not_allowed403Project 没有授权该公开别名
source_not_allowed403来源地址不在 Project 允许范围
model_not_found404公开 Route 别名不存在
invalid_request_error400请求体、字段组合或端点语义无效;修改请求后再发
invalid_forwarded_for400可信代理链中的 X-Forwarded-For 无法安全解析;修复代理配置
request_too_large400、413400 可来自单个 multipart 字段超限;413 表示整体请求超过实例或 Project 上限
unsupported_feature400、501Route/Profile 无法表达请求;501 仅表示实例未提供延迟执行能力
streaming_unsupported500当前 HTTP Writer 无法安全提供流式响应;保留 Request ID 并通知管理员
endpoint_not_implemented404路径不在 Halro 支持面;按兼容性文档选择端点
method_not_allowed405已知路径不接受当前 HTTP 方法
route_required400File 创建缺少 Halro-Route 请求头
ambiguous_resource_route409资源型 Route 没有唯一 eligible Deployment
token_limit_exceeded400单请求输入或输出 Token 上限被拒绝
native_redaction_incompatible400原生协议正文若脱敏会改变其语义,因而失败关闭
streaming_redaction_incompatible400当前流式请求与配置的脱敏方式不能安全组合
幂等与资源状态
codeHTTP含义与处理
invalid_idempotency_key400Key 为空、格式或长度不符合要求
idempotency_conflict409同一个 Key 被用于不同正文或归因;不要换 Key 掩盖冲突
idempotency_in_progress409同一创建操作正在执行或结果不明确;已有资源 ID 才查询,否则用相同 Key、正文和归因有界重试
resource_not_found404资源不存在、不属于当前 Project 或已经删除
resource_owner_unavailable409创建资源时绑定的目标当前不能继续执行该操作
resource_store_unavailable503本地资源状态无法安全读写;有界重试并通知管理员
provider_cancel_unsupported409上游没有可证明的取消操作;不能当作任务已经停止
response_not_found404延迟 Response 不存在、不属于当前 Project 或已过保留期
deferred_response_in_flight409Response 仍在运行,当前操作要求先进入终态
deferred_response_not_cancellable409当前状态不能取消
deferred_response_route_unavailable409延迟任务绑定的原目标无法恢复
deferred_response_unreadable500已保存的延迟结果无法安全读取;停止重复操作并通知管理员
预算、价格与限流
codeHTTP含义与处理
budget_exceeded403Project 日预算不足;请求未到 Provider,盲重试无效
run_budget_exceeded403Run 生命周期余额不足;调整请求或关闭 Run
price_unavailable409、503409 表示请求需要已知价格或候选价格冲突;503 表示有效价格读取失败。都不能填成零成本
token_guard_blocked403固定阈值或 temporary block;按错误详情调整请求/策略或等待 TTL
rate_limit_exceeded429来源或 Project RPM;有 Retry-After 时按其有界退避
token_rate_limit_exceeded429Project TPM 已满
concurrency_limit_exceeded429Project 并发已满
deployment_concurrency_limit_exceeded429Deployment 并发已满
provider_concurrency_limit_exceeded429所有 eligible Provider 目标都在并发上限
Run Governance
codeHTTP含义与处理
invalid_run_id400X-Halro-Run-ID 格式错误
run_governance_disabled403Project 未启用运行治理
run_not_found404Run 不存在或不属于当前 Project
run_not_active409Run 已关闭或过期
run_governance_unavailable503无法验证治理权威状态;Halro 失败关闭,交给管理员处理
unsupported_content_type415治理写入端点要求 application/json
invalid_request400治理请求体无法解码或不符合端点结构
invalid_outcome_definitions400Outcome Definition 数量、唯一性、格式或启用状态不合法
work_unit_not_found404Work Unit 或其中的 Definition 不存在,或不属于当前 Project
invalid_outcome400Outcome 没有匹配冻结的 Definition,或值不合法
outcome_revision_conflict409supersedes_outcome_id 不是当前修订;先读取最新 Outcome
outcome_write_closed409Outcome 的写入窗口已经关闭
governance_unavailable503Outcome 治理状态无法安全读取或写入,失败关闭
invalid_run400Run 预算或 TTL 超出 Project 限制
invalid_close_reason400Close reason 长度不在 1–64 字符范围
governance_rate_limited429治理 API 的每 Key 请求速率超限
governance_resource_limit429Project 的 Run Governance 资源数量达到上限
work_unit_closed409Work Unit 已关闭,不能继续执行该写操作
内容策略与 Provider
codeHTTP含义与处理
content_rejected400文件或音频未通过内容策略
sensitive_data_detected400、502400 为入站拒绝;502 为上游结果或资源结果无法安全交付
sensitive_output_detected422Provider 已返回内容,但输出脱敏策略拒绝交付;调用可能已经计费
policy_error503Policy 状态无法安全读取或执行
redaction_policy_error500脱敏处理发生内部错误;停止自动重试并通知管理员
provider_authentication_error502上游拒绝 Halro 的 Provider 凭据;由管理员修复 Credential
provider_rate_limit429上游限流;只在上游给出可解析值时才有 Retry-After
provider_timeout504上游结果不明确,可能已经计费;不要把重发当作免费重试
provider_error502上游或响应转换失败;结合 Request ID 查看 Attempt,费用结果可能不明确
provider_unavailable503当前没有健康 eligible Deployment;有界退避并检查 Route 状态
账务、配置和内部状态
codeHTTP含义与处理
accounting_error503账务操作失败,Halro 拒绝继续调用 Provider
accounting_unavailable503无法安全完成预留或结算;停止无界重试并通知管理员
configuration_stale503管理变更已持久化但新配置未安全激活;数据面失败关闭
internal_error500网关内部失败;保留 Request ID,由管理员检查日志、状态和完整性
  1. 保存 Request ID、HTTP 状态,以及该门面存在的 error.codeerror.type;不要记录 Key 或请求正文。
  2. 400、401、403、404 通常先修请求、权限或配置;未经改变不要重发。
  3. 409 先读取资源或当前状态。若 idempotency_in_progress 没有返回资源 ID,以相同 Key、正文和归因 做有界退避重试;持续冲突时保留 Key、停止创建并交给管理员,不要换 Key 绕过状态。
  4. 429 只在有 Retry-After 时按该值退避;否则使用有抖动的应用级退避和最大次数。
  5. 502、504 或连接中断可能对应已经发生的 Provider Attempt 和费用;在 Usage 中核对后再决定重发。
  6. 账务、治理、策略或 configuration_stale 的 503 表示安全状态不可确认,应交给管理员恢复;不要用 无限重试制造第二次故障。

/v1/messages/v1/messages/count_tokens 返回 Anthropic 形状:顶层为 typeerrorrequest_id,其中 error 只有 typemessage没有 code。Halro 按最终 HTTP 状态映射:

Anthropic 门面的错误类型
HTTPerror.type
401authentication_error
403permission_error
404not_found_error
413request_too_large
429rate_limit_error
500、502、504api_error
503overloaded_error
上游实际返回 529overloaded_error
其他状态,包括 400、409、415、501invalid_request_error

因此 Anthropic 客户端不能从本页前述 code 表直接读取响应字段;需要把 HTTP 与 error.type 映射到同一套重试和人工处置策略。

错误信封、Request ID 和 Scope 见认证、请求头与错误,生产排障见 日常巡检、完整性检查与告警