错误码与请求标识

LYRouter 拒绝一次调用时返回 4xx 或 5xx 状态码。OpenAI 兼容接口的错误体是 {"error": {"message", "type", "code"}},/v1/messages 上转换为 Anthropic 格式,另有少数响应是 HTML 页面或一行纯文本。按状态码和 error.message 原文在本页速查表中找到条目,就能判断问题出在请求本身、账户与配置,还是平台或上游服务商,以及该怎么处理。网关不在响应头里返回请求 ID,需要定位某次调用时,请到 日志分析 打开这次请求的详情,复制顶部的 Request ID。

错误响应格式

OpenAI 兼容格式

除 /v1/messages 外,各接口(Chat Completions、Responses、Embeddings、图像、视频等)的错误体默认是:

{
  "error": {
    "message": "insufficient credit balance",
    "type": "insufficient_quota",
    "code": "insufficient_credit_balance"
  }
}
字段 说明
message 报错原文,以英文为主,个别为中文。本页列出的原文与网关返回逐字一致,<...> 表示会被替换的部分
type 错误类别,如 invalid_request_error、permission_error、access_denied、guardrail_blocked、insufficient_quota、rate_limit_error、billing_unavailable、service_unavailable、api_error
code 机器可读的标识,只有部分错误才有,没有时整个字段不出现。同一句 message 可能对应多个 code(如 insufficient credit balance),程序分支请优先按 code 判断
附加字段 个别错误才带:配额 429 的 limit、used、reset_at 等,熔断 429 的 retry_after、blocked_until,上游空响应体补全的 upstream_status、generated_by 等

Anthropic 格式(/v1/messages)

通过 /v1/messages 调用时,网关自己的错误和上游的错误都会转换成 Anthropic 格式,message 保持原文:

{
  "type": "error",
  "error": { "type": "authentication_error", "message": "invalid api key" }
}
HTTP 状态码 error.type
400、402、422 invalid_request_error
401 authentication_error
403 permission_error
404 not_found_error
413 request_too_large
429 rate_limit_error
503、529 overloaded_error
500、502、504 及其他 5xx api_error

转换后不再带 error.code 和附加字段(如 limit、retry_after),响应头照常保留。本页的报错原文在 /v1/messages 上同样适用,需要区分具体原因时,以「状态码 + message」为准,或在日志中查看这次请求。

上表的 404 → not_found_error 不适用于路径或 HTTP 方法不存在的 404:例如用 GET 调用 /v1/messages,返回的是 404 {"error_msg":"404 Route Not Found"},不转换为 Anthropic 格式。

不是 JSON 错误体的响应

情形 状态码 响应体
连接上游失败、等待上游超时 500、504 HTML 错误页
Content-Type 不对、multipart 请求格式不对、要求的原生直通无法满足(/v1/messages 上转换为 Anthropic 格式,见上文) 400 一行纯文本,如 unsupported content-type: text/plain, only application/json is supported
工作空间设置了默认模型,而请求体不是合法 JSON 或为空 400 {"message": "..."},外层没有 error
路径或 HTTP 方法不存在,如 /v1/v1/chat/completions、用 GET 调用 /v1/chat/completions 404 {"error_msg": "404 Route Not Found"}

目前网关返回的纯文本 400,响应头 Content-Type 仍是 application/json,直接按 JSON 解析会失败,部分 SDK 会报「无法解析响应」。稳妥的做法是先看状态码,再判断正文是否为 JSON(尝试解析),能解析时依次取 error.message、message、error_msg,都取不到时记录响应原文的前几百个字符:

# -i 同时输出状态行和响应头(如 Retry-After、x-aigw-quota-*)
curl -sS -i https://api.lyrouter.com/v1/chat/completions \
  -H "Authorization: Bearer $LYROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"MODEL_ID","messages":[{"role":"user","content":"你好"}]}'

速查表

「谁来处理」中的「管理员」指当前账号管理员或工作空间管理员,「联系支持」表示需要平台处理。

状态码 报错原文(error.message) error.code 原因 谁来处理
400 you must provide a model parameter missing_model 没写 model,工作空间也没有默认模型 调用方
400 invalid type for 'model': expected a string invalid_model model 不是字符串 调用方
400 request body must be a JSON object invalid_json 请求体不是合法的 JSON 对象;部分版本返回 missing_model 调用方
400 could not get parse JSON request body: <解析错误> —(外层无 error) 同上,工作空间设置了默认模型时 调用方
400 unsupported content-type: <类型>, only application/json is supported —(纯文本) Content-Type 不是 JSON 调用方
400 multipart body has no non-empty `model` field 等 —(纯文本) multipart 请求体缺字段或取值不对 调用方
400 This model does not support the <接口> API 等 unsupported_model_api 等 模型不支持该接口、操作或输入类型 调用方换模型
400 unsupported parameters for this model: <参数名> unsupported_parameters 严格模式下传了模型不支持的参数 调用方
400 具体参数的校验原文 invalid_parameter 图像、视频等接口的参数或 multipart 内容不合法 调用方
400 native passthrough was required by `x-gateway-passthrough: require` ... —(/v1/messages 上为 Anthropic 格式,其他接口为纯文本) 要求原生直通,但这次请求无法直通 调用方
401 missing credentials — 没带 API Key 调用方
401 invalid authorization scheme, expected 'Bearer' — Authorization 头格式不对 调用方
401 invalid api key — Key 不存在、已删除、停用或过期 调用方 / 管理员
401 api key verification unavailable — 平台密钥校验服务暂时不可用 稍后重试
402 insufficient credit balance insufficient_credit_balance 等 账户余额不足 账号管理员充值
402 subscription expired; renew to continue — 订阅已到期 账号管理员续费
403 api key expired — Key 已过有效期 新建 Key
403 your IP address is not allowed — 来源 IP 不在 Key 的白名单中 调用方 / Key 创建者
403 ip access control misconfigured — Key 的 IP 白名单无效 Key 创建者
403 api key workspace is unavailable — 暂时读不到工作空间配置 稍后重试
403 Model is not available in the model plaza model_not_available 工作空间没有开通该模型 管理员 / 换模型
403 Request blocked by guardrail policy guardrail_* 请求被安全围栏拦截 调用方 / 管理员
403 Response blocked by guardrail policy guardrail_sensitive 模型的回答被安全围栏拦截 调用方 / 管理员
403 Subject is blocked by an active security ban guardrail_subject_banned Key 被安全围栏封禁 管理员
403 该 API Key 已被永久封禁,无法恢复,请删除后创建新的 API Key。 api_key_permanently_banned Key 第 5 次触发错误率熔断 修复程序后新建 Key
404 404 Route Not Found(字段为 error_msg) — 路径或 HTTP 方法不对 调用方
404 / 409 video task not found、video is not ready yet 等 not_found 等 视频任务不存在、未完成或不能取消 调用方
429 rate limit exceeded on <对象> <指标>/<窗口> — 配额或预算已用完 等待重置 / 管理员调额
429 API Key 因最近 60 秒错误率过高已临时熔断,请在 N 秒后重试。 api_key_circuit_open Key 错误率过高被临时熔断 修复后按 Retry-After 等待
429 all upstream credentials for this model are rate limited upstream_quota_exhausted 该模型所有上游凭证都达到限额 稍后重试 / 换模型
429 upstream concurrency full upstream_concurrency_full 异步任务的上游并发已满 稍后重试
500 HTML 错误页 — 连接上游失败或读取响应出错 稍后重试
500 sync spec needs the upstream model name for the path 等 model_unresolved 等 平台侧通道配置问题 联系支持
503 all routed candidates exhausted no_route_candidate 找不到可服务的模型或通道 调用方 / 管理员
503 No configured credential can serve this model no_route_candidate 该模型没有可用凭证 管理员
503 Workspace model projection is unavailable workspace_model_projection_unavailable 暂时读不到工作空间的模型配置 稍后重试
503 billing balance is temporarily unavailable billing_maintenance 等 暂时无法确认账户余额 平台(部分可稍后重试,持续出现时联系支持)
503 Platform supplier cost snapshot is unavailable supplier_cost_snapshot_not_ready 该模型的通道价格未就绪 换模型并联系支持
504 HTML 错误页 — 等待上游响应超时 稍后重试
上游的状态码 上游的报错原文 上游定义,或 upstream_* 上游服务商拒绝了请求 视原文而定

400:请求格式或参数

本节的 400 都由网关在把请求发往上游之前返回。

模型字段与请求体

报错原文 error.code 含义与处理
you must provide a model parameter missing_model model 缺失、为 "" 或 null(请求体为空时同样如此),且工作空间没有在 智能路由 中设置默认模型。在请求中写上模型 ID,可用 GET /v1/models 查询
invalid type for 'model': expected a string invalid_model model 写成了数字、对象等。设置了默认模型也不会顶替,请改成字符串形式的模型 ID
request body must be a JSON object invalid_json 请求体是字符串、数字等合法 JSON,但不是对象;请求体不是合法 JSON 时,原文为 could not get parse JSON request body: <解析错误>,error.code 同样是 invalid_json。部分版本对这两种请求体都返回 you must provide a model parameter(missing_model);请求体是 JSON 数组时也返回 missing_model。检查引号、逗号和转义,以及请求体是否真的放进了 -d / json=
could not get parse JSON request body: <解析错误>(原文如此) — 工作空间设置了默认模型时,非法 JSON 返回这一句,响应体为 {"message": "..."};请求体为空时是 could not get body: request body is empty。处理同上

设置了默认模型时,不写 model 的对话请求会改由默认模型回答,不会收到 missing_model。默认模型的设置见通道选择与路由策略。

Content-Type 与 multipart(纯文本响应)

报错原文 含义与处理
unsupported content-type: <类型>, only application/json is supported 请求头 Content-Type 不是 application/json。JSON 接口请设置 Content-Type: application/json,不带这个头时按 JSON 处理。/v1/images/edits 和 /v1/videos 同时接受 JSON 和 multipart/form-data
multipart body has no non-empty `model` field multipart 请求体里没有非空的 model 表单字段。工作空间没有默认模型时,先返回的是 you must provide a model parameter
request body is empty multipart 请求体为空
<字段> must be `true` or `false` in multipart form data /v1/videos 的 multipart 请求中,watermark、generate_audio 只接受字面量 true 或 false,1、yes、True 都会被拒绝
input_reference must be a URL; uploading a file is not supported by this gateway (pass a publicly reachable https:// URL instead) /v1/videos 的 multipart 请求中,input_reference(参考视频)要传公网可访问的 https:// 地址,不支持上传文件

模型不支持该接口或输入

type 为 invalid_request_error,按 error.code 区分:

error.code 报错原文 含义
unsupported_model_api This model does not support the <接口> API 模型不支持这一类接口,<接口> 为 chat_completions、responses、embeddings、rerank、images、videos 之一。例如用对话模型调用图像生成接口
unsupported_model_operation This model does not support the <操作> operation 模型支持这一类接口,但不支持其中这个操作,如 images_edits、videos_regenerations
unsupported_model_input This model accepts text input only 给只接受文本的模型发送了图片、音频或文件

处理:在 模型广场 查看模型支持的接口与输入类型,换用支持的模型,见模型能力与兼容性。

参数不被支持或取值不合法

unsupported parameters for this model: <参数名>(unsupported_parameters):请求带了 X-Gateway-Strict-Parameters: true,而请求中有所选模型不支持的参数。不带这个请求头时,网关丢弃这些参数照常调用,并在响应头 X-Gateway-Unsupported-Parameters 中列出参数名。这两个头目前只覆盖图像、视频接口;对话接口在跨协议转换时丢弃的参数(如 response_format、seed、n)既不触发这个错误,也不写这个响应头,见网关扩展请求头与响应头。处理:删掉报错中列出的参数,或换用支持它们的模型。

invalid_parameter:error.message 直接说明是哪个参数、哪里不对,常见的有:

报错原文 含义
seconds must be a positive whole number of seconds 视频时长必须是正整数秒
watermark must be a boolean、generate_audio must be a boolean JSON 请求中这两个字段必须是布尔值
size implies an aspect ratio this model does not support: <取值> size 对应的宽高比该模型不支持
cannot read the multipart body,或具体原因如 truncated multipart body: no closing delimiter、inline file parts exceed the limit of 31457280 bytes 需要转换格式的模型读不出 multipart 请求体:请求体被截断、文件合计超过 30 MB 等
cannot rewrite the multipart model field: <原因> 网关无法把 multipart 中的 model 字段替换成上游的模型名,请求没有发出。确认 model 是普通文本字段;持续出现时联系支持

各参数的取值范围见多模态能力。

原生直通无法满足

原文:native passthrough was required by `x-gateway-passthrough: require` but is not available for this request (<原因>)

请求带 x-gateway-passthrough: require 表示「请求体必须原样发给 Anthropic 协议的上游,不允许转换」。网关做不到时直接拒绝,而不是悄悄转换;回退到非 Anthropic 协议的通道时也会以这个错误结束。在 /v1/messages 上,这个错误按 Anthropic 格式返回,message 与上面的原文一致:{"type":"error","error":{"type":"invalid_request_error","message":"native passthrough …"}};在其他接口上是一行纯文本。括号里是否决的原因:

原因 含义
client_protocol 不是通过 /v1/messages 调用
route_disabled 接口没有开启请求侧原生直通
wire_protocol 选中的通道不是 Anthropic 协议上游
endpoint_type 不是对话接口
channel_disabled 该通道关闭了原生直通
preset_injection 使用的虚拟模型会改写请求体(追加系统提示词、设置或锁定参数、缓存策略)
shape_oai 请求体不是 Anthropic 格式
decision_error 网关判定过程出错

目前 /v1/messages 没有开启请求侧原生直通,带这个请求头的请求会以 route_disabled 被拒绝。去掉这个请求头(或改为 prefer),请求即按正常的协议转换路径处理,见Anthropic Messages。

401:鉴权失败

401 的请求无法归属到任何工作空间,日志中查不到。各条原因的详细排查见401 / 403:鉴权与权限。

报错原文 含义与处理
missing credentials 请求没有携带 API Key。加上 Authorization: Bearer <API Key>,Anthropic 风格的客户端也可以用 x-api-key: <API Key>。通过环境变量配置的工具,修改后需要新开终端
invalid authorization scheme, expected 'Bearer' Authorization 头不是 Bearer <API Key> 格式。Bearer 区分大小写,bearer sk-...、直接写密钥、Basic ... 都会被拒绝;只写 Bearer 而没有密钥也返回这一句。同时带 Authorization 和 x-api-key 时只读 Authorization
invalid api key 网关找不到这个 Key:复制不完整或带了空格、换行;Key 已删除、停用或过期;所属工作空间或创建人已停用;Key 刚创建、还没同步到网关(通常几秒)。被永久封禁的 Key 是例外:删除后仍返回 403 api_key_permanently_banned。重新复制完整的 Key,明文丢失时删除后新建,见创建工作空间与 API Key
api key verification unavailable 平台的密钥校验服务暂时不可用,与 Key 是否正确无关。稍后重试,持续出现时查看服务状态

402:余额不足或订阅到期

报错原文 error.code 含义与处理
insufficient credit balance insufficient_credit_balance 账户 Credits 余额已用完;使用 BYOK 且需要支付平台服务费时,余额不足以支付服务费。由账号管理员在 订阅充值 充值
insufficient credit balance balance_missing 账户还没有余额记录,通常是从未充值。充值后恢复;已充值仍出现时联系支持
insufficient credit balance billing_entity_missing 网关找不到这个 Key 对应的计费账户,属于平台侧数据问题,联系支持
subscription expired; renew to continue — 账户订阅已到期且已过宽限期,该账户下所有工作空间的调用都会被拒绝。续费后恢复;没有订阅的账户不会收到这个错误

type 为 insufficient_quota。余额检查发生在调用之前:余额大于 0 就能发起调用,一次调用可能把余额扣成负数,之后的调用才被拒绝。余额不足时网关不会改用其他通道或计费方式。计费规则见计费规则与信用点。

403:访问被拒绝

API Key 与来源

报错原文 error.code 含义与处理
api key expired — Key 已超过有效期,网关在每次请求时检查。新建一个 Key 替换它;过期一段时间后,同一个 Key 改为返回 401 invalid api key
your IP address is not allowed — Key 开启了 IP 白名单,请求的来源 IP 不在名单中(type 为 permission_error)。网关按到达时的出口 IP 判断,经公司网络、代理或云服务器调用时,出口 IP 可能与本机看到的不同
ip access control misconfigured — Key 的 IP 白名单为空或含无效的 IP / CIDR,网关拒绝所有请求。由 Key 创建者或账号管理员修正白名单
api key workspace is unavailable — Key 有效,但网关暂时读不到所属工作空间的配置,属于平台侧临时问题,稍后重试
该 API Key 已被永久封禁,无法恢复,请删除后创建新的 API Key。 api_key_permanently_banned Key 第 5 次触发错误率熔断,被永久封禁,不能解除;删除旧 Key 后它仍返回同样的 403。刚触发封禁时原文是 该 API Key 因多次高错误率请求已被永久封禁,无法恢复,请删除后创建新的 API Key。,封禁同步到网关后改为本行原文。先修复持续报错的程序再新建 Key,否则新 Key 也会被熔断

永久封禁的响应头带 X-RateLimit-Reason: api_key_permanently_banned,被拒绝的请求不写入日志。

模型未开通

Model is not available in the model plaza(model_not_available,type 为 access_denied):Key 所属工作空间的 模型广场 中,这个模型的所有服务商都处于未开通状态。

  • 管理员在 模型广场 开通该模型,或调用方改用已开通的模型。
  • 在图像、视频接口上使用 @vmodel/<名称> 或 lyrouter/auto 也会返回这个错误:这些接口只接受具体的模型 ID。
  • 工作空间设置了默认模型时,请求的模型未开通的对话请求通常改由默认模型回答,可在日志的「模型(实际)」中确认。详见模型不可用。

安全围栏

Request blocked by guardrail policy(type 为 guardrail_blocked):请求命中了工作空间安全围栏的阻断策略,没有发给模型。原文不含策略名称或命中内容,按 error.code 判断策略类型:

error.code 命中的策略
guardrail_client 客户端访问控制:按来源 IP、工具名或 User-Agent 限制调用
guardrail_context 意图安全检测:请求意图被判定有风险
guardrail_sensitive 敏感信息检测:请求含个人信息、凭证或敏感关键词
guardrail_injection 提示词注入检测:请求疑似提示词注入
guardrail_model 模型访问控制:所选模型不在允许范围内,对虚拟模型按实际选中的模型检查
  • Response blocked by guardrail policy(guardrail_sensitive):非流式请求的回答命中了敏感信息策略。上游已经生成回答,这次调用照常计费;流式请求已开始输出,不会中断,命中的内容打码后输出。
  • Subject is blocked by an active security ban(guardrail_subject_banned):意图安全检测策略的动作设为封禁,命中后触发它的 Key 被封禁,期间所有请求都被拒绝。到达策略设置的自动解封时间后解除,或由管理员在 安全事件 中提前解除。

同样的请求重试会得到同样的结果。调用方可以调整请求内容或换用允许的模型;管理员在 安全事件 查看命中详情,在 安全围栏 调整策略,见安全围栏与语义审计。

404 / 409:路径与资源不存在

状态码 报错原文 error.code 含义与处理
404 404 Route Not Found(响应体为 {"error_msg": ...}) — 网关没有这个路径,或该路径不接受这个 HTTP 方法。常见原因是 Base URL 多写或少写了 /v1(OpenAI SDK 的 base_url 应为 https://api.lyrouter.com/v1,Anthropic SDK 为根地址),见接入地址与鉴权。这类请求在日志中查不到
404 video task not found not_found 视频任务 ID 不存在、已过期,或属于其他工作空间
409 video is not ready yet not_ready 任务还没有成功完成,暂时不能下载视频。继续轮询任务状态
409 cancelling an in-flight video task is not supported: ... cancel_not_supported 不能取消进行中的任务(上游不提供取消接口)。等任务结束后仍可删除

POST /v1/responses 中的 previous_response_id 由上游服务商校验,出错时返回上游的错误,见Responses。视频任务本身失败时,查询接口返回 HTTP 200,任务对象的 status 为 failed,error.code 为 deadline_exceeded(超时,目前查询接口可能看不到,见异步任务)、canceled(已取消),或上游给出的错误码(缺省为 upstream_error),有时还带上游的请求 ID error.provider_request_id,见异步任务。

429:限流、熔断与上游限额

报错原文 error.code 含义与处理
rate limit exceeded on <对象> <指标>/<窗口> — Key 的预算或安全围栏的配额策略已达上限,如 rate limit exceeded on apikey total_tokens/day。错误体带 limit、used、reset_at(配额策略还带 policy_code、policy_name)。等到 reset_at 之后再调用,或请管理员调高额度
API Key 因最近 60 秒错误率过高已临时熔断,请在 N 秒后重试。 api_key_circuit_open 这个 Key 最近 60 秒至少 100 次请求、其中 90% 以上失败,被临时熔断。响应头 Retry-After 给出等待秒数,错误体的 retry_after、blocked_until(UTC)与之一致。先修复失败原因再等待
all upstream credentials for this model are rate limited upstream_quota_exhausted 能服务这个模型的所有上游通道或凭证都达到了各自的限额,错误体带 metric、window。稍后重试或换用其他模型;只走 BYOK 时请管理员检查凭证限额
upstream concurrency full upstream_concurrency_full 异步任务提交(如 POST /v1/videos)时,上游账号的并发任务数已满,请求没有发出。稍后重试
  • 配额字段:<对象> 为 apikey、member、dept、ws;<指标> 为 requests、total_tokens、prompt_tokens、completion_tokens、credits;<窗口> 为 minute、minutes、day、month、total(累计,不会重置)。窗口按北京时间对齐,用量在请求完成后才计入。
  • 响应头:配置了配额时,对话、向量等经过网关选路和配额检查的调用(成功的响应和被配额拦下的 429 都算)都带 x-aigw-quota-<指标>-limit / -remaining / -reset,指标为 credits、tokens、requests、input-tokens、output-tokens;/v1/messages 另带 anthropic-ratelimit-*,但 Credits 没有对应的头,只配置了 Credits 配额时网关不生成 anthropic-ratelimit-*。
  • Retry-After:只有熔断(api_key_circuit_open)设置,同时带 X-RateLimit-Reason: api_key_circuit_open 和 X-RateLimit-Reset(Unix 秒);配额 429 不带。上游自己的 Retry-After 只在 /v1/messages 上转发。
  • 熔断阶梯:第 1 次 30 秒、第 2 次 2 分钟、第 3 次 10 分钟、第 4 次 12 小时,第 5 次永久封禁,次数在 Key 的整个生命周期内累计。网关返回的 402、403、429 也计为失败;被熔断的请求不写入日志。

完整说明见429:限流与配额和预算、配额与限流。

500 / 504:连接上游失败或等待超时

状态码 响应体 含义
504 HTML 错误页 等待上游响应超时,或连接上游超时
500 HTML 错误页 连接上游失败(如连接被拒绝、TLS 握手失败),或读取上游响应时出错
  • 网关等待上游的读超时为 6 分钟;流式请求按相邻两段输出的间隔计算,持续有输出就不会超时。
  • 返回之前,网关已按失败重试与备用模型的规则尝试过其他通道,所有候选都失败后才返回。流式请求开始输出后不再换通道,见下文「流式输出中途的错误事件」。
  • 处理:使用有上限的指数退避重试;生成很长的内容时改用 stream: true;在日志「各阶段耗时」中查看上游耗时,详见超时与流式中断。

配置类 500(JSON 错误体)

以下 500 带 JSON 错误体(type 为 api_error),表示平台侧的通道或格式转换配置有问题,与请求内容无关,重试通常无效。请记下 Request ID 联系支持,并换用其他模型:

error.code 报错原文
model_unresolved sync spec needs the upstream model name for the path
spec_error unusable sync body shape: <原因>、unusable async submit spec: <原因>
unsupported_configuration remove_model is not supported on multipart endpoints
encode_failed failed to encode request body: <原因>

503:无可用通道、计费或配置暂不可用

报错原文 error.code 含义与处理
all routed candidates exhausted no_route_candidate 找不到任何可以服务这次请求的模型或通道。常见原因是 @vmodel/<名称> 写错、虚拟模型不存在或已停用,或模型没有可用的通道。检查 model 字段;名称无误时请管理员检查 模型广场 和 自带密钥(BYOK)
No configured credential can serve this model no_route_candidate 模型的通道在本工作空间没有可用凭证:平台通道没有开通,或 BYOK 凭证都不可用,见 BYOK
Workspace model projection is unavailable workspace_model_projection_unavailable 网关暂时读不到工作空间的模型配置,属于平台侧问题,稍后重试
Platform supplier cost snapshot is unavailable、BYOK supplier cost snapshot is unavailable supplier_cost_snapshot_not_ready 能服务这个模型的通道还没有配置好价格,网关无法计费。网关会先尝试其他通道,都不可用时才返回。换用其他模型,并把模型 ID 告知支持人员
billing balance is temporarily unavailable 见下表 网关暂时无法确认账户余额,为避免错误扣费而拒绝调用。这不是余额不足

billing balance is temporarily unavailable 的 type 为 billing_unavailable,按 error.code 判断能否自行恢复:

error.code 含义 重试是否有用
billing_maintenance 账户计费正处于核对或维护状态,该账户下所有调用都被拒绝 无用,联系支持
billing_store_error、billing_store_protocol_error、byok_release_failed 平台计费服务临时故障 稍后可能恢复
invalid_balance、byok_billing_config_missing、byok_reservation_terminal 平台侧计费数据或配置异常 无用,联系支持

OpenAI、Anthropic 等官方 SDK 默认会自动重试 503,但 no_route_candidate、billing_maintenance、supplier_cost_snapshot_not_ready 不改请求或配置就不会恢复。

上游服务商返回的错误

网关把上游服务商返回的错误状态码和响应体原样转发给你,日志「状态说明」列的来源显示为「上游」。

  • 先换通道:上游返回错误或连接失败时,网关按工作空间的选路策略在同一模型的其他通道上重试,全部失败时你收到最后一次尝试的上游错误。设置了默认模型时,对话请求还可能改由默认模型回答,见失败重试与备用模型。
  • 上游 401 / 403:通常是上游凭证被拒绝。使用 BYOK 时,请在服务商处确认 API Key 有效、额度充足,并在 BYOK 中重新测试连接。
  • /v1/messages:上游错误同样转换为 Anthropic 格式。

上游返回空响应体

上游只返回错误状态码、没有响应体时,网关补一个错误体,并用 generated_by: "ai-gateway" 标明由网关生成:

{
  "error": {
    "message": "upstream <服务商> returned HTTP 429 for POST <路径> with an empty response body",
    "type": "rate_limit_error",
    "code": "upstream_rate_limited",
    "upstream_status": 429,
    "generated_by": "ai-gateway"
  }
}
上游状态码 error.code
400 upstream_invalid_request
401 upstream_unauthorized
403 upstream_forbidden
404 upstream_not_found
408 upstream_timeout
413 upstream_payload_too_large
429 upstream_rate_limited
其他 4xx、5xx upstream_error

上游在响应头中带了自己的请求 ID 时,错误体还会多一个 upstream_request_id,向服务商报障时用它。

上游在成功响应里声明了错误

个别上游会返回 HTTP 2xx、却在响应体里声明失败,多见于图像、视频生成。网关把它改写为错误响应,状态码取上游声明的错误,error.code 为 upstream_rejected(上游拒绝了请求)或 upstream_no_artifact(上游没有产出图像或视频,带 upstream_finish_reason),upstream_status 是上游原本的 2xx 状态码。这类错误不换通道重试,请按 error.message 调整请求内容。

流式输出中途的错误事件

上面列出的网关拒绝都发生在开始输出之前,stream: true 的请求同样收到普通的错误响应和对应状态码,而不是 SSE 事件。

流式输出开始后(状态码已经是 200),上游中断或超时时,网关不再换通道,而是在流的末尾补一个错误事件,然后结束连接:

OpenAI 兼容接口(Chat Completions、Responses 等):

data: {"error": {"message": "upstream timed out after the response had started", "type": "api_error", "code": "stream_interrupted"}}

Anthropic Messages(/v1/messages):

event: error
data: {"type": "error", "error": {"type": "api_error", "message": "upstream timed out after the response had started"}}
  • 超时时 message 为 upstream timed out after the response had started,连接或读取失败时为 upstream failed after the response had started。
  • 上游自己在流中发出的错误事件(如 Anthropic 的 overloaded_error)按你调用的协议转给你。OpenAI、Anthropic 官方 SDK 收到这两种错误事件都会抛出 API 错误。
  • 出现错误事件时不会再有结束标记(data: [DONE]、message_stop、response.completed)。请把「没有收到结束标记」当作这次调用失败,不要把已收到的部分输出当作完整结果。

各协议的事件结构见流式响应,重试与去重建议见超时与流式中断。

哪些错误可以重试

处理方式 错误
有上限的指数退避重试 500、504(HTML);502 failed to reach upstream;401 api key verification unavailable;403 api key workspace is unavailable;429 upstream_quota_exhausted、upstream_concurrency_full;503 workspace_model_projection_unavailable、billing_store_error 类;流式 stream_interrupted
按指定时间等待 429 api_key_circuit_open:等 Retry-After 秒;配额 429:等到 reset_at 之后
修改请求或配置后再调用 全部 400、401 missing credentials / invalid authorization scheme / invalid api key、402、大部分 403、404、409;503 no_route_candidate、supplier_cost_snapshot_not_ready、billing_maintenance;配置类 500

不要对 4xx 做无间隔的自动重试:网关返回的 402、403、429 都计入错误率熔断,持续失败的程序很快会让 Key 被熔断,第 5 次熔断即永久封禁。

请求标识

网关不返回请求 ID

LYRouter 不在响应头里返回请求 ID。响应体中的 id(如 chatcmpl-...、msg_...、resp_...)是协议对象的 ID,不能在日志中按它查找。要定位某次调用,请在客户端记下调用时间、接口路径、模型和 API Key 名称,再到日志中找到这次请求。

从日志详情取 Request ID

  1. 在工作空间左侧菜单打开 日志分析。日志在调用结束后几秒内可以查到。
  2. 用「时间范围」「API Key」「模型」「状态码」等条件筛选。列表的「时间」是请求结束的时间。
  3. 点击这一行打开「日志详情」,顶部「Request ID」后面就是这次请求的标识,选中后复制。

Request ID 可以粘贴到日志搜索框中重新找到这条日志。普通成员只能看到自己创建的 API Key 产生的日志。以下请求在日志中查不到:401、路径不存在的 404、被错误率熔断(429 api_key_circuit_open)或永久封禁(403 api_key_permanently_banned)拒绝的请求,以及 GET /v1/models。这些情况请提供调用时间、接口路径和完整报错。日志的完整用法见通过日志定位调用问题。

日志中的其他标识

标识 在哪里看 用途
Request ID 日志详情顶部 唯一标识一次请求,联系支持时提供
会话 ID 列表「会话」列的标签(在 自定义列 中打开),鼠标停留可见;「添加筛选」中可按「会话 ID」筛选 查看同一段对话的全部请求。客户端可用 x-session-id 请求头声明会话
任务 ID POST /v1/videos 返回的 id(aigwt_ 开头);异步任务日志详情切换到「整个任务」 查询任务状态与产物,排查异步任务
上游请求 ID 日志详情「原始报文」中「③ 上游响应」的响应头(各服务商头名不同,如 x-request-id);空响应体补全错误的 upstream_request_id;失败视频任务的 error.provider_request_id 向上游服务商报障,使用 BYOK 时联系你自己的服务商

提交问题时附上什么

信息 说明
Request ID 日志中能找到这次请求时附上
调用时间 精确到分钟,注明时区
接口与模型 方法和路径(如 POST /v1/chat/completions)、请求中的 model、是否流式
完整报错 HTTP 状态码和完整响应体(含 error.code 和附加字段);流式中断时附最后收到的几个事件
API Key 名称 只提供名称
客户端 工具或 SDK 的名称与版本;超时问题附客户端的超时设置;IP 白名单问题附出口 IP
相关标识 任务 ID、会话 ID、上游请求 ID(有的话)

发送前请脱敏:

  • 不要发送 API Key 明文、完整的 Authorization 或 x-api-key 请求头,以及你在服务商处的 BYOK 密钥。
  • 提示词、回答和上传文件中的个人信息、业务数据先删除或替换;能用最小的复现内容说明问题时,不要附原文。
  • 从日志「原始报文」复制的内容不含凭据类请求头,但正文可能包含敏感信息,发送前请检查。