五家 LLM API 报错码对照:400 到 529

OpenAI、Anthropic、Google、DeepSeek、OpenRouter 各自的状态码含义,哪些能安全重试,以及余额耗尽为什么在三家是 402、在一家是 429。

五家 LLM API 报错码对照:400 到 529

摘要:状态码告诉你的比你以为的少。余额耗尽在 Anthropic、DeepSeek、OpenRouter 是 402,在 OpenAI 是 429。服务端过载几乎处处是 503,在 Anthropic 是 529,一个非标准 HTTP 码,会从大多数错误处理里漏过去。这一页是跨服务商对照:五家各自文档化的每一个码、哪些能安全重试,以及我们复现并修好过的具体故障。

Last updated 2026-08-31。下面每一个码都是当天从对应服务商自己的错误文档里读的。

每家分别文档化了哪些状态码?

空格表示该服务商没有把这个码写进文档,不代表它永远不会返回。

OpenAIAnthropicGoogle GeminiDeepSeekOpenRouter
400invalid service_tierinvalid_request_errorinvalid_requestfailed_preconditionparameter_unknownInvalid FormatBad Request、参数缺失或非法、CORS
401鉴权无效、key 不对、无组织、IP 不在白名单authentication_errorauthenticationAuthentication Fails凭证无效、OAuth 会话过期
402billing_errorInsufficient Balance额度不足
403所在国家或地区不支持permission_errorpermission_denied权限、护栏拦截、内容审核
404not_found_errornot_foundmodel_not_found
408请求超时
409conflict_erroralready_existsaborted
413request_too_large
416out_of_range
422Invalid Parameters
4295 种不同成因,见下rate_limit_errorrate_limit_exceededquota_exceededtoo_many_requestsRate Limit Reached被限速
499cancelled
500服务端错误api_errorapi_errorServer Error
501unimplemented
502所选模型宕机或返回了非法响应
503引擎过载、Slow Downservice_unavailableServer Overloaded没有满足路由要求的可用 provider
504timeout_errordeadline_exceeded
529overloaded_error

这张表里有四行是线上事故真正的来源。

为什么 429 代表五件不同的事?

429 是全行业含义最重载的一个码。 在 OpenAI 它覆盖五种彼此独立、修法也不同的情况:请求数超限、余额耗尽、组织花费上限、项目花费上限、组织用量上限。只有第一种是限速,另外四种是钱的问题,退避重试清不掉。

Google 至少把这些含义在同一个状态码下拆成了不同的 code:rate_limit_exceeded 对应每分钟限制,quota_exceeded 对应每日配额,too_many_requests 对应突发。

Anthropic 给的判据最锋利。它的文档写明,用量档花费上限触发的 429 不带 retry-after 头,并且会一直失败到访问恢复为止。于是这个头在不在本身就是诊断依据:有头就等,没头就去处理账号。另外,当你自己设的花费上限被撞到时,Anthropic 返回的是 400 而不是 429,唯一的例外是 Claude Code 工作区,那里可能返回 429。

判断流程我们单独写过一篇:429 Too Many Requests:什么意思、什么时候该重试。Claude Code 里限速 429 和额度 429 在界面上长得一模一样,Claude Code 里的 Rate Limit Reached 把两者拆开了。如果你要的是各家的限额本身而不是报错,五家五套规则 是横向对比;OpenRouter 上 Kimi K3 的 429 是聚合器场景,那里切换比等待更快。

为什么 529 会击穿错误处理?

529 不是注册在案的 HTTP 状态码。Anthropic 自己的参考只给了它一行:

529 - overloaded_error: The API is temporarily overloaded.

其他每一家都用 503 表达同一种情况。而 Anthropic 的错误参考里根本没有 503。

这件事之所以要紧,是因为大量重试代码写成 if 500 <= status <= 504。这个区间不包含 529,于是 Anthropic 的过载错误逃出重试路径,直接以硬失败的形式呈现给用户。Anthropic 自己的 SDK 默认对瞬时失败重试两次并在有头时遵守 retry-after,所以这个 bug 主要出现在手写的 HTTP 客户端里。

Anthropic 文档里还有一句值得读两遍:如果是你自己的组织流量陡增,你看到的可能是 429 而不是 529,因为有加速限制。同样的症状,相反的成因,不同的修法。

完整复现和八种修法在 Claude API 529 overloaded_error,那是我们流量最大的一篇排错文。想要架构层的答案而不是重试层的,Claude Code fallbackModel 搭的是三层切换;Opus 宕机与 529 讲的是某个模型长期过载时怎么迁移。

为什么同一个模型名在一家返回 404、在另一家返回 400?

一个解析不了的模型名,在 Google 是 404 not_found(它还有专门的 model_not_found),在 OpenAI 是 404,在一些会先校验 model 字段再路由的网关那里是 400。用户看到的报文通常是「模型不存在或你没有访问权限」的某种变体,而「访问权限」才是关键的那一半:在 OpenAI 上,一个真实存在但没给你的组织开通的模型,返回的是同一句话。

两种情况都在 OpenAI 404 模型不存在 里。新模型那一类(模型确实发布了,但你的账号还看不到)在 GPT-5.6 model not available

为什么 402 在三家存在、在 OpenAI 不存在?

Anthropic、DeepSeek 和 OpenRouter 在账户没钱时都返回 402。OpenAI 把同一件事归到了 429。

实际后果是:一个「4xx 当致命、429 当可重试」的朴素处理器,在 Anthropic 上行为正确,在 OpenAI 上行为错误:它会对着一个空余额一直退避重试。按报文正文分支,不要按码分支。

DeepSeek 的 402 Insufficient Balance 从 2026 年 8 月改成峰谷计费后还多了一层:同样的负载在不同时段消耗余额的速度不一样。DeepSeek API 涨价 里有窗口和倍率。

哪些码该重试?

可以重试不要重试
408 超时400 请求格式错误
409 冲突或被中止401 鉴权
Retry-After 头的 429402 计费
500、502、503、504403 权限、地区、内容审核
529 Anthropic 过载404 模型或资源不存在
413 请求体过大
422 参数非法
不带 Retry-After 头的 429

这张表之外还有三条实操笔记。

Retry-After 不是普遍存在的。 OpenRouter 在 429 和 503 上都文档化了它。Anthropic 的 SDK 在头存在时遵守它,对瞬时失败「twice by default, honoring the retry-after header when present」。OpenAI 对限速 429 的建议是控制发送节奏并遵守 Retry-After 头。没有任何一家保证这个头一定存在,所以你的退避逻辑需要一个默认值。

Google 在它的排错页里把 408 列为值得重试的瞬时错误,但它的错误码参考里没有 408 这一行,所以上面那张表的对应格是空的。

413 是体积问题,不是上下文问题。 Anthropic 公布了硬性的请求体积上限:Messages 和 Token Counting 是 32 MB,Batch API 是 256 MB,Files API 是 500 MB。在直连 API 上这些是由 Cloudflare 在请求到达 Anthropic 之前拦掉的,所以报文可能根本不像一个 Anthropic 的错误。

哪些失败根本到不了状态码这一层?

有些失败返回 200,然后照样坏掉。

流中途的错误。 走 server-sent events 时,错误可能在 API 已经返回 200 之后才到。Anthropic 明确写了这一点:标准错误处理在这里不适用,你必须在流内部处理 error 事件。

TLS 失败。 这类根本到不了 API。Claude Code SSL 证书错误 讲的是企业 CA 拦截,它看起来像宕机,其实不是。

导入和 SDK 错误。 SDK 改名会以 Python traceback 的形式出现,而不是一个 HTTP 码。2026 年 6 月改名后的 claude-code-sdk 导入错误 里有完整对照。

生图的超时。 长耗时的图像调用和聊天调用失败方式不同。GPT-Image-2 变慢与 504 里有五个根因。

接下来该看什么?

如果你走的是聚合器,还有一层值得知道:OpenRouter 会给 provider 的错误打上一个规范化的 error_type 字符串,并建议你优先用它而不是状态码,因为它「stable across all three API skins even when the native protocol code is lossy」。这正是整页在讲的那件事,只不过被网关自己写进了文档。

想要代码模式而不是码的含义,AI API 错误处理 里有带抖动的指数退避、多模型兜底和可直接粘贴的熔断器。想看某个具体工具而不是某家服务商的报错面,Codex 报错索引 把 15 个症状对到了修复方法。

参考信息来源

常见问题

529 和 503 是一回事吗?
功能上是,但只有 Anthropic 会返回 529。它是一个非标准状态码,含义是 overloaded_error,而 Anthropic 的文档里根本没有 503 这一行。OpenAI、Google、DeepSeek 和 OpenRouter 都用 503 表达同一种情况。如果你的错误处理只捕获 500 到 504,Anthropic 的过载错误会直接漏过去。
为什么余额空了 OpenAI 返回的是 429?
因为 OpenAI 把账单耗尽归到了限速下面。它的错误参考里,credit balance exhausted、organization spend limit reached、project spend limit reached、organization usage limit reached 全部是 429。Anthropic、DeepSeek 和 OpenRouter 对同一件事返回 402。对一个计费类 429 做退避重试永远不会成功,所以必须读报文正文,而不是只看状态码分支。
哪些报错码可以自动重试?
408、409 冲突、带 Retry-After 头的 429,以及 5xx 一族,包括 502、503、504 和 Anthropic 的 529。不要重试 400、401、402、403、404、413、422,这些需要改请求、改 key 或者处理账号。最危险的是中间那种:不带 Retry-After 头的 429,在 Anthropic 那里代表花费上限而不是限速,会一直失败到窗口重置为止。
Anthropic 的 402 billing_error 是什么意思?
是你的账单或支付信息有问题,跟限速和 key 都没关系。Anthropic 把 402 文档化为 billing_error,并指向 Console 里的支付信息,如果你走的是 AWS 上的 Claude Platform 就指向 AWS Marketplace。它和「你自己设了花费上限时 Anthropic 返回的 400」是两回事。
是不是所有服务商都会发 Retry-After 头?
不是,而且例外很关键。OpenRouter 在 429 和 503 上都文档化了 Retry-After。Anthropic 的 SDK 在头存在时会遵守,默认重试两次。但用量档的花费上限 429 根本不带 Retry-After。头缺席本身就是信号:说明这不是一个靠等待能过去的状况。