开始

错误码

错误体

所有错误都是同一个形状:

{ "error": { "code": "VALIDATION_ERROR", "message": "…", "details": { "field": "model" } } }

VALIDATION_ERROR 时看 details.field 定位是哪个字段,details.allowed 列出可选值。

状态码与处理

HTTPcode怎么办
400VALIDATION_ERROR看 details.field 与 details.allowed 改请求
401UNAUTHENTICATEDKey 无效、已吊销或过期,重新创建
402CREDITS_EXHAUSTED积分不足,到定价页充值;details.required 是本次所需
403SCOPE_DENIED / API_NOT_ELIGIBLEKey 没这个权限,或账号未达准入条件
409IDEMPOTENCY_*同一个 Idempotency-Key 已用过:换新的,或稍后查询
422CONTENT_VIOLATION被内容审核拦下,不扣费;改写描述,不要原样重试
429RATE_LIMITED / CONCURRENCY_LIMIT / DAILY_CAP_REACHED按响应头 Retry-After 等待
503MODERATION_UNAVAILABLE / UPSTREAM_UNAVAILABLE未扣费或已退费,稍后重试一次

平台网关返回的纯文本 429 与 413 见限额。

Anthropic 接口的错误体

/v1/messages 按 Anthropic 格式返回 { "type": "error", "error": { "type", "message" } }:余额不足 402 billing_error、限流 429 rate_limit_error、上游不可用 529 overloaded_error。

流式对话中途出错

stream: true 时正常结束以 data: [DONE] 收尾。如果上游中途断开,会收到一个 data: {"error":{...}} 事件,且没有 [DONE];已产生的 token 照常结算。