常见错误
出错时先看 HTTP 状态码和错误码,再按下表处理。错误信息的语言跟随请求头 Accept-Language(zh-CN 或 en-US)。
错误格式
| 接口 | 格式 |
|---|---|
OpenAI 兼容 /v1/* |
{"error": {"message", "type", "code", "request_id"}} |
| Anthropic 兼容 | {"type": "error", "error": {"type", "message"}},没有机器可读的错误码 |
| Gemini 兼容 | {"error": {"code", "message", "status"}} |
平台接口 /api/v1/*、媒体任务 |
{"code", "message", "request_id", "details"} |
联系支持时请附上 request_id。
常见错误码
| 错误码 | HTTP | 原因 | 处理 |
|---|---|---|---|
auth.invalid_key |
401 | 密钥错误、已暂停、已过期或已撤销;或把密钥放在了 URL 参数里 | 检查密钥和请求头 |
auth.forbidden |
403 | 模型不在这把密钥的可用模型里 | 修改密钥的可用模型 |
key.ip_denied |
403 | 来源 IP 不在密钥的白名单里 | 修改 IP 白名单 |
key.spend_limit |
402 | 达到密钥的每日或每月消费上限(OpenAI 格式为 billing.key_limit_exceeded) |
调高上限或等待周期切换 |
billing.insufficient_credit |
402 | 余额不足以覆盖这次调用的预估费用 | 充值 |
billing.in_arrears |
403 | 账户欠费 | 充值补足欠费 |
rate.limited |
429 | 请求速率超限 | 退避后重试 |
concurrency.exceeded |
429 | 同时进行的请求数超限 | 等待进行中的请求结束 |
model.unavailable |
404 | 模型不存在、维护中、已下架,或不具备这个接口需要的能力 | 核对模型 ID 与模型能力 |
routing.not_applied |
409 | 模型暂时没有可用的供应线路 | 稍后重试或换用其他模型 |
upstream.unavailable |
503 | 上游服务出错或超时 | 稍后重试,失败的调用不收费 |
account.restricted |
403 | 账户的 API 调用被暂停 | 查看站内通知或提交工单 |
content.prohibited.* |
403 | 请求内容命中内容规则 | 修改内容,如有异议可按 details 里的链接申诉 |
重试建议
- 429 和 503 可以重试,建议指数退避并设置最大次数。
- 401、402、403、404 重试不会成功,需要先按上表处理。
- 非流式请求整体超时为 120 秒,长输出建议使用流式。
常见问题
- 返回 429 应该怎么重试?
- rate.limited 和 concurrency.exceeded 都可以重试,建议指数退避并设置最大重试次数,同时减少并发请求。
- upstream.unavailable 会扣费吗?
- 不会。上游出错或超时的调用按失败处理,不收费,可以稍后重试。
- Anthropic 格式为什么看不到错误码?
- Anthropic 协议的错误体只有类型和信息,没有机器可读的错误码;需要精确判断时可以改用 OpenAI 兼容接口。