api.foo
api.foo / 文档 / 报错排查大全

API 报错排查大全:401 无效的令牌、额度不足、无可用渠道、404、429、524 怎么解决(附原文)

更新于 · 测试环境:api.foo 线上接口 · Claude Code 2.1.251 · Codex 0.162.1 · Gemini CLI 0.64.0 · OpenCode 2.0.29
本页目录

怎么用这一页:先找到报错里的 HTTP 状态码(401、403、404、429……)和报错原文,在下面的速查表里对一下,再跳到对应小节看解决办法。

本页的报错原文来自 api.foo 的线上接口和我们在各工具里的实测(2026 年 10 月 15 日)。其他平台的文字会不一样,但状态码的含义和排查思路是通用的。

速查表

状态码 报错原文(节选) 一句话原因 看哪一节
401 无效的令牌 密钥不对、没发出去、被禁用、过期或这把密钥的额度用完 401
403 您的 IP 不在令牌允许访问的列表中 密钥设了 IP 白名单 403
403 该令牌无权访问模型 xxx 密钥限制了可用模型 403
403 用户额度不足, 剩余额度: ¥… 账户余额不够 403
403 预扣费额度失败 这次请求预估费用超过余额 403
400 / 503 分组 xxx 下模型 xxx 无可用渠道 模型名不对,或这个分组没有这个模型 模型类
— 模型 xxx 的价格尚未由管理员配置 平台还没上架这个模型 模型类
404 Invalid URL (POST /v1/…) 请求路径写错了 404
429 您已达到请求数限制 / 负载已饱和 请求太频繁,或上游繁忙 429
524 Cloudflare 超时页 单个请求超过 100 秒没回应 5xx

先检查三件事

90% 的报错出在这三处,先逐项核对能省很多时间:

  1. 地址:用的是哪个工具,就按它要求的格式填。

    工具 地址填法(以 api.foo 为例)
    Claude Code、Claude 原生 SDK https://api.foo(不带 /v1)
    Codex、OpenAI 兼容的软件和 SDK https://api.foo/v1
    Gemini CLI https://api.foo(不带 /v1beta)
  2. 密钥:完整复制,前后没有空格、换行;是这个平台发的密钥,不是别家的。

  3. 模型名:和平台模型列表里的写法一字不差,包括大小写、连字符和日期后缀。

401 无效的令牌

{"error":{"code":"","message":"无效的令牌 (request id: …)","type":"new_api_error"}}

请求到了服务商,但服务商不认这把密钥。在 api.foo 上,下面这些情况返回的都是这一句:

  • 密钥复制错了、少了字符、多了空格或换行;
  • 根本没发出去:环境变量没设成功、配置文件写错了位置、请求头名字写错;
  • 密钥已经被你删除或禁用;
  • 密钥设置了过期时间,已经过期;
  • 这把密钥自己设了额度上限,已经用完(和账户余额是两回事)。

排查办法:

  1. 登录控制台,打开 API 密钥,看这把密钥的状态和剩余额度。过期或用完的,延长时间、调高额度,或者新建一把。

  2. 用命令行单独测一下密钥(把 sk-你的密钥 换掉):

    curl https://api.foo/v1/models -H "Authorization: Bearer sk-你的密钥"
    

    返回模型列表说明密钥本身没问题,问题出在你的工具配置上;仍然报「无效的令牌」就是密钥的问题。

  3. 用的是环境变量的,新开一个终端运行 echo $变量名,确认真的设上了。

请求头带 Accept-Language: en 时,同样的报错会显示成英文 Invalid token。

403 权限和余额

报错原文 原因 解决
您的 IP 不在令牌允许访问的列表中 这把密钥设了 IP 白名单,你当前的出口 IP 不在里面 在控制台编辑密钥,加上当前 IP 或清空白名单。用代理、换网络后 IP 会变
该令牌无权访问模型 xxx 这把密钥开启了「模型限制」,没勾选这个模型 编辑密钥,勾选要用的模型,或关闭模型限制
无权访问 xxx 分组 密钥指定的分组,你的账户不能用 编辑密钥改成你能用的分组
用户额度不足, 剩余额度: ¥0.000000 账户余额用完了 充值后重试
预扣费额度失败, 用户剩余额度: ¥…, 需要预扣费额度: ¥… 余额还有一点,但这次请求预估要扣的更多。常见于上下文很长、max_tokens 设得很大 充值,或者调小 max_tokens、清理过长的对话
用户已被封禁 账户被停用 联系客服

模型名不对、无可用渠道

分组 default 下模型 xxx 无可用渠道(distributor)

意思是:在你这个分组里,没有能提供这个模型的通道。按顺序查:

  1. 模型名拼对了吗?到平台的模型列表(api.foo 是「模型广场」)复制完整名字,别凭记忆手打。
  2. 这把密钥用的是哪个分组?有的模型只在特定分组里有。
  3. 平台某个模型暂时下线时也会这样,过一会儿再试或换一个模型。
模型 xxx 的价格尚未由管理员配置,暂时无法使用,请联系站点管理员开启该模型

这是平台还没给这个模型定价、上架,换一个已上架的模型,或联系客服。

未指定模型名称,模型名称不能为空

请求里没带 model 字段,检查工具或代码里的模型设置。

404 Invalid URL

{"error":{"message":"Invalid URL (POST /v1/chat/completion)","type":"invalid_request_error","param":"","code":""}}

报错里括号中的就是你实际请求的路径,对照正确写法改:

你请求的路径 问题 正确的
/v1/chat/completion 少了个 s /v1/chat/completions
/api/v1/chat/completions 多了一层 /api /v1/chat/completions
/v1/v1/messages 地址填成了 …/v1,工具又自己加了一次 Claude Code 的地址不带 /v1

api.foo 对常见的写法做了兼容:带密钥的请求少写了 /v1 会自动补上,Claude Code 地址多写了 /v1 也会自动去掉一层。但换到别家平台不一定有这个兼容,按标准写法填最稳。

429 请求太多

报错原文 原因 解决
您已达到请求数限制:x分钟内最多请求y次 平台对单个用户限了速 降低并发、加重试间隔
当前分组上游负载已饱和,请稍后再试 平台的上游渠道正忙 稍后重试,或换一个分组/模型
上游原样返回的 429 上游服务商限流 稍后重试;长期出现就联系平台

写程序调用时,遇到 429 应该等一会儿再重试,并且每次等得更久一点(指数退避),不要立刻狂刷。官方的 OpenAI、Anthropic SDK 默认就会自动重试几次。

5xx 和 524:上游或网络问题

  • 500 / 502 / 503:平台或上游临时出问题。等几十秒重试;持续出现就把报错里的 request id 发给客服。
  • 529 overloaded(Claude 特有):Anthropic 那边过载,稍后重试。
  • 524:这是 Cloudflare 返回的超时。请求经过 Cloudflare 时,超过 100 秒还没收到回应就会被断开。常见于非流式的长回答、批量脚本和生成图片。两个办法:
    1. 改用流式输出(stream: true)。Claude Code、Codex 这类工具默认就是流式,一般不会碰到。
    2. 把地址换成不经过 CDN 的直连线路。api.foo 的直连线路是 https://dc.api.foo,只提供 API 接口,没有 100 秒限制。

各个工具里的报错长什么样

同一个「密钥不对」,在不同工具里显示得不一样。下面是我们用同一把错误密钥连 api.foo 时看到的原文,搜报错时可以对照:

工具 显示
Claude Code 2.1.251 Failed to authenticate. API Error: 401 无效的令牌 (request id: …)
Codex 0.162.1 ERROR: unexpected status 401 Unauthorized: 无效的令牌 (request id: …), url: https://api.foo/v1/responses
Gemini CLI 0.64.0 _ApiError: {"error":{"code":"","message":"无效的令牌 (request id: …)","type":"new_api_error"}}
OpenCode 2.0.29 Error: 无效的令牌 (request id: …)
Python openai 库 AuthenticationError Error code: 401 - {'error': {… '无效的令牌 …'}}

工具自己的报错(安装、配置文件格式等)见各工具的教程:

还是解决不了

把下面三样发给客服,问题能最快定位:

  1. 报错原文,一定要包含括号里的 request id;
  2. 你用的工具和版本,或者代码片段(删掉密钥);
  3. 你填的地址和模型名。

api.foo 的联系方式见关于页。

相关阅读

常见问题

无效的令牌是什么意思?

服务商不认你发过去的 API 密钥。常见原因有:密钥复制错了或多了空格、根本没把密钥发出去、密钥已被删除或禁用、已过期、这把密钥自己的额度用完了。在 api.foo 上这几种情况返回的都是同一句「无效的令牌」,要到控制台「API 密钥」页看这把密钥的状态。

报错 model not found 或无可用渠道是什么意思?

意思是你请求的模型名在服务商那里不存在,或者你的分组下没有能提供这个模型的渠道。先核对模型名是否和服务商模型列表里的写法完全一致,再确认这把密钥所在的分组能用这个模型。

用户额度不足怎么办?

账户余额不够了。充值后重试即可;报错里会显示当前剩余额度。如果余额明明够,报的是「预扣费额度失败」,说明这次请求预估要扣的钱比余额多,常见于很长的上下文或很大的 max_tokens。

404 Invalid URL 怎么解决?

请求地址的路径写错了,比如少了字母、多了一层 /api,或者 /v1 该加没加、不该加加了。对照工具要求的地址格式改:Claude Code 和 Gemini CLI 只填域名,Codex 和 OpenAI 兼容的软件一般要带 /v1。

请求跑到一半报 524 是什么原因?

524 是 Cloudflare 的超时错误:一个请求超过 100 秒还没收到回应就会被断开,常见于非流式输出的长回答。改用流式输出,或者把地址换成不经过 CDN 的直连线路(api.foo 是 https://dc.api.foo)。

报错里的 request id 有什么用?

它是这一次请求的编号。联系客服时把它连同报错原文一起发过去,客服可以直接查到这次请求在哪一步出了问题。

发现内容有误?发邮件到 [email protected] 告诉我们。