状态码 401鉴权(401)Claude CodeCC Switch

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. 1

    用 /status 确认 Claude Code 拿到的配置

    在 Claude Code 里输入 /status,Status 页的 Anthropic base URL 应该是 https://www.ccsub.net,并且有一行 Auth token 指向 ANTHROPIC_AUTH_TOKEN。没有 base URL 这一行,说明环境变量根本没进到这个会话。

  2. 2

    到控制台重新复制 Key 并单独测一次

    打开 CCSub 控制台的 API Keys 页面,确认这把 Key 是启用状态,点复制拿到完整值(sk- 开头,共 67 个字符)。用文中的 curl 命令或控制台的 Key 测试页测一下:能返回内容说明 Key 没问题,问题在 Claude Code 的配置上。

  3. 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 /login
  • Not 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 并重新启用,要么手动改这个文件。

还是不行?

还没有 CCSub 账号?

注册后在控制台创建 API Key,填进 Claude Code、Codex 等工具即可使用,按实际用量计费。