Claude Code 报 invalid x-api-key:请求其实发到了 Anthropic 官方

Wokey Team · 2026-09-24

结论先说: 看到 invalid x-api-key,说明请求发到了 Anthropic 官方的 api.anthropic.com,而不是你配置的中转站。Wokey 从来不返回这句话:Wokey 的 key 错误是下划线写法的 invalid_api_key。所以先别急着换 key,要查的是 base URL 为什么没生效

先看是谁返回的错误

把报错里的 JSON 和下表对一下,就知道请求到底落在了哪里。下面都是用 curl 实测的原始返回:

返回内容 谁返回的 说明
"message":"invalid x-api-key" Anthropic 官方 Authorization: Bearer 发送了 sk- 开头的 key,或 x-api-key 里的值不像 key
"message":"API key is invalid." Anthropic 官方 x-api-key 发送了 sk- 开头、但不是 Anthropic 签发的 key
"message":"x-api-key header is required" Anthropic 官方 没带任何 key
"message":"Invalid bearer token" Anthropic 官方 Bearer 里的值不是 sk- 开头
"code":"invalid_api_key" Wokey 请求到了 Wokey,但 key 缺失、写错或已删除

Anthropic 的完整返回长这样,注意外层有 "type":"error",通常还带 request_id

{"type":"error","error":{"type":"authentication_error","message":"invalid x-api-key"},"request_id":"req_011C..."}

Wokey 的返回没有 type: "error" 外层,code 是下划线写法:

{"error":{"code":"invalid_api_key","message":"invalid_api_key","type":"invalid_request_error"}}

Wokey 的 key 是 sk- 开头的。你把它放在 ANTHROPIC_AUTH_TOKEN 里(以 Bearer 发送),请求却发到了官方,看到的就是 invalid x-api-key;放在 ANTHROPIC_API_KEY 里(以 x-api-key 发送),看到的则是 API key is invalid.。两种情况原因相同。

为什么 base URL 没生效

1. 变量不在启动 claude 的那个进程里。 export 只对当前终端有效。在另一个终端里设置的、写进 ~/.zshrc 后没重开终端的、从 Dock 或开始菜单打开的编辑器,都读不到。在启动 claude 的终端里运行下面的命令,确认两个变量都在:

env | grep ANTHROPIC

2. 变量名写错。 Claude Code 只认 ANTHROPIC_BASE_URLANTHROPIC_API_BASEANTHROPIC_BASECLAUDE_BASE_URLOPENAI_BASE_URL 都不会生效,请求会静默发往官方地址。

3. 写进了 settings.json 的是 key,不是地址。 ~/.claude/settings.jsonenv 里只写了 ANTHROPIC_AUTH_TOKEN、没写 ANTHROPIC_BASE_URL,key 就会带着发到官方。两个值要写在一起:

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.wokey.ai",
    "ANTHROPIC_AUTH_TOKEN": "你的 Wokey API Key"
  }
}

4. 用的是 VS Code 扩展。 扩展做登录检查时不读 shell 变量,要写在 VS Code 用户设置的 claudeCode.environmentVariables 里,见 VS Code 扩展配置指南

5. 用的是 Claude 桌面版。 桌面版完全不读 ANTHROPIC_BASE_URLsettings.json,要在 Developer → Configure Third-Party Inference 里填网关地址,见 桌面版第三方 API 排查

6. 自己写代码调 SDK。 Anthropic 的 Python 和 TypeScript SDK 默认请求官方地址,要显式传 base_url(TypeScript 里是 baseURL),同样不带 /v1

from anthropic import Anthropic

client = Anthropic(base_url="https://api.wokey.ai", api_key="你的 Wokey API Key")

在 Claude Code 里确认

在 Claude Code 里运行 /status,Status 页里应该有 Anthropic base URL 一行,值是 https://api.wokey.ai。没有这一行,就说明 Claude Code 在用官方地址,上面的原因之一成立。

用 curl 对照一次

在启动 claude 的同一个终端里运行:

curl -X POST "$ANTHROPIC_BASE_URL/v1/messages" \
  -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":1,"messages":[{"role":"user","content":"."}]}'
  • curl: (3) URL rejected: No host part in the URLANTHROPIC_BASE_URL 是空的,变量根本没设上。
  • 返回以 {"id":"msg_ 开头:网关和 key 都没问题,问题在 Claude Code 读到的配置,按上面第 3 到第 5 条查。
  • 返回 invalid_api_key:请求已经到了 Wokey,这时才是 key 本身的问题,去控制台确认 key 完整、未删除。

直连官方 API 时看到它

如果你本来就是直接用 Anthropic 官方 API,那 invalid x-api-key 的意思就是字面意思:key 错了、被撤销,或者复制时带上了换行和空格。Claude Code 对含换行的 key 会在发送前拦下,并提示类似 Invalid X-Api-Key header value from ANTHROPIC_API_KEY: it contains a line break 的错误。

常见问题

invalid x-api-key 是 Wokey 返回的吗?

不是。这句话是 Anthropic 官方 API 的返回。Wokey 对缺失或错误的 key 统一返回 401 和 {"error":{"code":"invalid_api_key",...}}。看到 invalid x-api-key,说明请求根本没到 Wokey,ANTHROPIC_BASE_URL 没有生效。

怎么确认 Claude Code 用的是哪个 base URL?

在 Claude Code 里运行 /status,看 Anthropic base URL 一栏。接 Wokey 时应该是 https://api.wokey.ai;没有这一栏或显示官方地址,说明变量没传进当前进程。

终端里 echo 能看到变量,为什么还报错?

最常见的原因是变量只在当前 shell 里设置、没有 export,或者 Claude Code 是从另一个终端、IDE 或桌面图标启动的,拿不到这个变量。把 ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKEN 写进 ~/.claude/settings.jsonenv 里最稳。

VS Code 扩展和桌面版报这个错怎么办?

VS Code 扩展要在用户设置的 claudeCode.environmentVariables 里配置变量;Claude 桌面版不读环境变量,要在 Developer → Configure Third-Party Inference 里配置网关,并点 Save & Restart。

Wokey 的 key 能直接用在 Anthropic 官方吗?

不能。Wokey 的 key 是 sk- 开头加 32 位十六进制字符,只在 api.wokey.ai 有效;发到 Anthropic 官方会返回 401。