错误格式
非 2xx 响应使用稳定 envelope。记录 request_id、HTTP、type 与 code,不要依赖可能调整的 message 文案。
错误响应json
{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded.",
"param": null,
"type": "rate_limit_error"
},
"request_id": "<request-id>"
}错误与重试策略
只有表中标记为可重试的错误才进入自动重试。使用指数退避、随机抖动和最大尝试次数。
| HTTP | type | code | 重试 | 处理建议 |
|---|---|---|---|---|
| 499 | client_error | client_cancelled | 否 | 按已取消处理,不要自动重放。 |
| 403 | permission_error | forbidden | 否 | 检查 Key 的模型白名单、IP 策略和工作区权限。 |
| 409 | idempotency_error | idempotency_conflict | 否 | 一个幂等键只对应一份完全相同的请求体。 |
| 402 | billing_error | insufficient_balance | 否 | 充值或降低最大输出 Token 后再请求。 |
| 500 | server_error | internal_error | 是 | 使用指数退避重试,并保存 Request ID 以便排查。 |
| 400 | invalid_request_error | invalid_request | 否 | 修正 param 指向的字段或移除不支持的参数。 |
| 404 | invalid_request_error | model_not_found | 否 | 从模型页选择处于活动状态的 alias。 |
| 503 | server_error | no_healthy_channel | 是 | 使用带抖动的退避重试;候选耗尽后请求不会继续发送。 |
| 429 | rate_limit_error | rate_limit_exceeded | 是 | 存在 Retry-After 时遵循该值,并降低并发。 |
| 409 | idempotency_error | request_in_progress | 有条件 | 等待原请求完成,再决定是否重试。 |
| 401 | authentication_error | unauthorized | 否 | 替换无效、过期、停用或已撤销的 API Key。 |
| 504 | server_error | upstream_timeout | 是 | 仅在业务允许重复时使用退避策略重试。 |
| 502 | server_error | upstream_unavailable | 是 | 使用指数退避与随机抖动重试。 |