Claude Code 报 401 Invalid API Key 怎么解决
API Error: 401 {"type":"error","error":{"type":"authentication_error","message":"Invalid or disabled API key"}}Claude Code 连 CCSub 报 API Error: 401 authentication_error,九成是 Key 没被带上或带错了:变量没生效、ANTHROPIC_API_KEY 里留着旧 Key、settings.json 覆盖了终端里的值,或 Key 已被禁用。按下面 3 步逐个排除。
3 步解决
- 1
用 /status 确认 Claude Code 拿到的配置
在 Claude Code 里输入 /status,Status 页的 Anthropic base URL 应该是 https://www.ccsub.net,并且有一行 Auth token 指向 ANTHROPIC_AUTH_TOKEN。没有 base URL 这一行,说明环境变量根本没进到这个会话。
- 2
到控制台重新复制 Key 并单独测一次
打开 CCSub 控制台的 API Keys 页面,确认这把 Key 是启用状态,点复制拿到完整值(sk- 开头,共 67 个字符)。用文中的 curl 命令或控制台的 Key 测试页测一下:能返回内容说明 Key 没问题,问题在 Claude Code 的配置上。
- 3
清掉冲突的变量,重开终端再启动
删掉不用的 ANTHROPIC_API_KEY(它会以 X-Api-Key 头发出,CCSub 优先读这个头),检查 ~/.claude/settings.json 的 env 里有没有旧的 Key 或地址,然后关掉所有终端窗口,新开一个再运行 claude。
同一个问题的其他写法
API Error: 401 {"type":"error","error":{"type":"authentication_error","message":"Missing or invalid API key"}}Invalid API key · Please run /loginNot logged in · Please run /login
先看报错里是哪一句
CCSub 的 401 只有两种文案,含义不一样:
Missing or invalid API key:请求里没有 Key,或者带的值不是sk-开头。CCSub 会依次读X-Api-Key头和Authorization: Bearer头,两个都没有就是这句。基本可以断定是环境变量没生效。Invalid or disabled API key:带了一个sk-开头的值,但查不到对应的 Key,或者这把 Key 在控制台被禁用、删除了。常见于复制时多了空格或换行、复制不完整、用了别的平台的 Key、Key 已删除。
如果 401 的 message 不是这两句之一,说明这个请求压根没有发到 CCSub,ANTHROPIC_BASE_URL 没生效,回头检查地址。
用 curl 单独测一下 Key
在设置了变量的同一个终端里执行(会产生一次很小的计费):
curl -sS -w '\n%{http_code}\n' https://www.ccsub.net/v1/messages \
-H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-4-6","max_tokens":16,"messages":[{"role":"user","content":"hi"}]}'
返回 200 和一段 JSON,说明 Key 和网络都没问题,问题出在 Claude Code 读到的配置;返回 401,就是 Key 本身有问题,去控制台的 API Keys 页面重新复制,或者用 Key 测试页 再确认一次。如果 echo $ANTHROPIC_AUTH_TOKEN 什么都不输出,说明变量在这个终端里根本不存在。
最常见的 5 个原因
1. 改完变量没有重开终端,或者编辑器是从 Dock 启动的
~/.zshrc 里写的 export 只对之后新开的终端生效;Windows 用 SetEnvironmentVariable 设置的用户变量,也要关掉所有 PowerShell 窗口再开。官方文档还特别提到:从 Dock 或开始菜单启动的编辑器看不到终端里 export 的变量。VS Code 里的 Claude Code 插件要在用户设置的 claudeCode.environmentVariables 里配置这两个变量。
2. ANTHROPIC_API_KEY 里还留着旧 Key
Claude Code 把 ANTHROPIC_API_KEY 放在 X-Api-Key 头里,把 ANTHROPIC_AUTH_TOKEN 放在 Authorization: Bearer 头里。CCSub 先读 X-Api-Key,所以只要 ANTHROPIC_API_KEY 里是一把旧的、别家的或已删除的 Key,即使 ANTHROPIC_AUTH_TOKEN 配得完全正确,也会返回 Invalid or disabled API key。执行 unset ANTHROPIC_API_KEY 并从 shell 配置文件里删掉这一行。
3. ~/.claude/settings.json 里的值覆盖了终端
官方文档的规则是:同一个变量在终端和 settings 文件的 env 里都设置时,settings 文件的值生效。很多人用过 CC Switch 或别的切换工具,~/.claude/settings.json 里还留着上一个供应商的 Key 和地址。打开这个文件看 env 字段,改成 CCSub 的地址和 Key,或者删掉重复的项。项目目录下的 .claude/settings.local.json 也可能有。
4. 复制时带了多余字符
CCSub 的 Key 是 sk- 加 64 位十六进制字符,总共 67 个字符。从聊天软件或文档里复制,常会多带一个空格、换行或中文引号。控制台的 Key 会一直保存,可以随时回到列表重新点复制,不需要新建。
5. Key 被禁用或删除
在 API Keys 页面看这把 Key 的状态。被禁用的 Key 重新启用即可;删除的 Key 无法恢复,新建一把再换上。
出现 Not logged in · Please run /login
这句不是 CCSub 返回的,是 Claude Code 在本地没找到任何可用凭据。最常见的是变量没进到会话(见原因 1)。另一种情况:你用的是 ANTHROPIC_API_KEY,第一次启动时 Claude Code 问你要不要使用这个 Key,默认选项是 No,回车就拒绝了,之后它会静默忽略这个 Key。可以在 /config 里打开 Use custom API key,更简单的做法是改用 ANTHROPIC_AUTH_TOKEN,它设置后直接生效,不需要确认。
常见问题
Invalid or disabled API key 和 Missing or invalid API key 有什么区别?
Missing or invalid API key 表示请求里根本没有 Key,或者带的值不是 sk- 开头;Invalid or disabled API key 表示带了 sk- 开头的值,但 CCSub 查不到这把 Key,或者它已在控制台被禁用、删除。前者查变量有没有生效,后者查 Key 本身。
ANTHROPIC_AUTH_TOKEN 和 ANTHROPIC_API_KEY 应该用哪个?
接 CCSub 用 ANTHROPIC_AUTH_TOKEN。它以 Authorization: Bearer 头发送,设置后立即生效;ANTHROPIC_API_KEY 以 X-Api-Key 头发送,交互模式下首次需要你确认一次,选过 No 之后会被静默忽略。两个都设时,CCSub 优先读 X-Api-Key,所以别在 ANTHROPIC_API_KEY 里留旧 Key。
401 的请求会扣费吗?
不会。鉴权失败的请求在转发给模型之前就被拦下,不产生任何费用。
我用 CC Switch 管理配置,为什么改了终端变量还是 401?
CC Switch 会把供应商配置写进 ~/.claude/settings.json 的 env 字段。Claude Code 官方文档说明:同一个变量在终端和 settings 文件里都设置时,settings 文件里的值生效。所以要么在 CC Switch 里改 Key 并重新启用,要么手动改这个文件。
还是不行?
- 按症状查《故障排查》文档
- 联系客服:发邮件到 support@ccsub.net,附上工具名和版本、系统、完整报错文本和注册邮箱(不要发 API Key)。
- 对照接入教程重新检查配置:Claude Code 接入教程、CC Switch 接入教程
相关报错
unexpected status 401 Unauthorized: {"type":"error","error":{"type":"authentication_error","message":"Missing or invalid API key"}}, url: https://www.ccsub.net/api/v1/responses看报错里的 url 判断请求发去了哪;用自定义 provider + env_key 指定 CCSub 的 Key,并在启动 Codex 的同一个环境里设置好这个变量。Unable to connect to API (ECONNREFUSED)请求没到 CCSub,多半是本地代理变量指向了没开的代理。env | grep -i proxy 查一下,unset 掉或给 ccsub.net 加 NO_PROXY;首次启动卡在连不上 api.anthropic.com 则改 ~/.claude.json。API Error: 402 {"type":"error","error":{"type":"insufficient_balance","message":"余额不足,请前往 https://www.ccsub.net/purchase 充值"}}账户可用余额不够,或月卡当天额度用完。看 message 是哪种:充值按量余额、等北京时间 0 点额度重置,或在余额本来够时等几分钟再试。
还没有 CCSub 账号?
注册后在控制台创建 API Key,填进 Claude Code、Codex 等工具即可使用,按实际用量计费。