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_URL。ANTHROPIC_API_BASE、ANTHROPIC_BASE、CLAUDE_BASE_URL、OPENAI_BASE_URL 都不会生效,请求会静默发往官方地址。
3. 写进了 settings.json 的是 key,不是地址。 ~/.claude/settings.json 的 env 里只写了 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_URL 和 settings.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 URL:ANTHROPIC_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_URL 和 ANTHROPIC_AUTH_TOKEN 写进 ~/.claude/settings.json 的 env 里最稳。
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。