文档 · 排查问题
常见错误响应
网关返回的每个状态码和错误码是什么意思,重试前该改什么。
不管后面是哪家供应商,网关返回的错误都是同一个格式。OpenAI 风格的端点返回 {"error":{"message":"...","type":"...","code":"...","param":null}},/v1/messages 返回 {"type":"error","error":{"type":"...","message":"..."}}。message 末尾带 (request id: ...),响应头 x-request-id 里是同一个 id。流式响应已经开始的话,状态码早就是 200 了,错误会变成一条 data: {"error":...} 事件发过来(/v1/messages 上前面多一行 event: error),然后流直接结束,没有 [DONE]。/v1/responses 的流一旦开始,不管是中途断开还是供应商报错,最后一条都是 response.failed(见最后两节)。找客服时把这个 id 一起发过来:提示词和回复都不落盘,能查的只有这个 id。
401 authentication_error
消息是 Invalid token。原因只有几种:没带 key、放错了请求头、key 已停用或过期、key 自己的 额度(USD)(英文界面 Quota (USD))已经花到零。额度还剩一点、但不够这次请求预估费用的,报 402 而不是 401。401 说的永远是你的 key,不会是我们和上游之间的凭证;上游凭证出问题会报成 upstream_unavailable。key 放在 Authorization: Bearer sk-... 里发。
403 permission_denied
看 message 就知道卡在哪一道检查:
Model is not offered by this service:模型 id 不存在,或者大小写写错了。id 要一字不差,是GLM-5.3-Abliterated,不是glm-5.3-abliterated。Model is not available on this API key route:这把 key 的 分组(Group)不卖这个模型。新建一把选 自动路由(Auto route)的 key。This token has no access to model ...:key 的 模型限制(Model limits)把这个模型排除了。The service is not available in your region.或Your service region could not be verified. Please contact support.:地区访问限制。这条响应的 code 是region_unavailable,没有 request id。
402 insufficient_quota
消息是 Insufficient quota. Top up your balance and try again.。请求转发之前,网关会先按「提示词 + 允许的输出长度」估一笔费用(输出按 max_tokens、max_completion_tokens 或 max_output_tokens 算,没设就按 8192 个 token),从余额和 key 的额度里预留,请求结束后再按实际用量结算。余额明明大于零却收到 402,说明预留的金额超过了余额或 key 的额度:调低 max_tokens,调高 key 的额度,或者去 钱包(Wallet)页用 充值余额(Add credit)充值。
429 rate_limited
来源有两个。一是网关按账户设的限流,同一账户下所有 key 合并计数:您已达到请求数限制:N分钟内最多请求M次 只记成功请求,您已达到总请求数限制:N分钟内最多请求M次,包括失败次数,请检查您的请求是否正确 连失败请求一起记。消息的语言跟着请求头 Accept-Language 走(中、英、日、俄、西);没带这个头时用账户里保存的语言,账户没保存过才是英文。二是供应商那边的限流,返回 Rate limit exceeded. Please retry after a short delay.。两种情况下,只要响应里有 Retry-After 头,就按头里的秒数等。
400 invalid_request
供应商拒绝的请求,统一返回 The request was rejected. Check the parameters and try again.,供应商原话不透传。网关自己做的校验会保留原消息,比如 duration must be between 1 and 15 seconds。触发安全策略的请求返回 content_filtered。走 /v1/chat/completions 时,GLM-5.3-Abliterated 不会因为带图报错:网关会把每个附件换成一句 [Attachment omitted: this model accepts text only.],文字部分照常转发。
404 和 5xx
上游返回 404 时是 model_not_found,internal_error 是 500。upstream_unavailable 是 502;供应商报过载,或者当下没有渠道能服务这个模型,都是 503。upstream_timeout 是 504。能换渠道重试的,网关已经试过了。失败的请求会退款,预留的金额直接回到余额;流已经生成了输出、之后才断开或报错的,按这部分输出收费(见下文)。账单退款(Billing refunds)那一栏不记这类退回,只记后来的更正。视频是例外:供应商接单那一刻就扣费,查询任务状态时,失败或过期的任务全额退款,比要求短的视频按比例退,这类退款会出现在账单退款里。
stream_interrupted
供应商的流在回答写完之前断了,或者长时间没有新数据。已经到达的内容照常发给你,但结尾不是正常的 [DONE]、message_stop 或 response.completed,而是一条错误:OpenAI 风格的端点上 code 是 stream_interrupted,type 是 upstream_error;/v1/messages 上 type 是 api_error。/v1/responses 的流以 response.failed 结束,error.code 是 server_error,消息相同。OpenAI 和 Anthropic 的 SDK 收到这条事件会抛异常。手上的文字不完整,重新发一次请求。如果断开时一个字节都还没发给你,网关会先换一次尝试,仍然失败就返回 HTTP 502 和这个 code。供应商已经写完回答、之后连接才断的,按正常结束处理。
断开前生成的输出只收一次费:供应商报了用量就按它报的算,没报就按网关数出的文字算。一点输出都没有的流全额退款,记为失败请求;在第一个 token 出来之前取消的请求也一样。回答写到一半时取消,已经生成的部分照常收费。
回答写到一半时报错
供应商在回答写到一半时报错,已经到达的文字照常发给你,接着是一条错误事件,格式同上,code 和平时这类错误一样(比如 upstream_unavailable),结尾没有正常的结束标记。/v1/responses 的流以 response.failed 结束,error.code 是 server_error,消息相同;还没收到文字就报错的也一样。手上的回答不完整,重新发一次请求。
计费和流中途断开一样:报错前生成的输出只收一次费;一点输出都没有就报错的,全额退款,记为失败请求。重试不会再收第二次。只有一个例外:Grok 的儿童安全检查拒掉的请求,即使回答已经写了一半,也是先退预留,再单独扣违规费。
相关
- curl 能跑通,工具里却报错
- 接入你的 SDK
- 创建 API 密钥并选择线路
- 用银行卡充值
- An AI API timeout is an unknown outcome, not a failed action
上一页:储值卡与兑换码 · 下一页:curl 能跑通,工具里却报错
其他语言:English