报错里出现 401、invalid_api_key、authentication_error、Incorrect API key provided,或中文 「无效的令牌 / 无效的 API Key」,先不要急着作废密钥。很大一部分是:密钥本身还能用,但请求头或目的地错了。

OpenAI 兼容接口:401 先查这三件事
官方错误码文档把 401 写成认证失败:Key 不对、没用对组织,或账号根本不在组织里。
- 复制脏了。 控制台复制时多一个空格、换行、隐藏字符。先粘到纯文本编辑器里看一眼再贴。
- Key 和地址不是一家。 OpenAI 的
sk-…打到另一家的 Base URL,或反过来。官方只认自家签的密钥。 - 环境变量盖掉了软件里填的值。 终端、IDE、启动器里的
OPENAI_API_KEY可能是旧的。改完软件设置仍 401,先在同一终端echo一下变量。
Claude Code:三条认证,不要混用
Anthropic 官方说明:环境变量里的 API Key 优先于订阅登录。shell 里 export 过 ANTHROPIC_API_KEY,即使 Claude Code 已经 /login 成功,请求仍可能走 Key 计费;Key 无效时,看起来就像「登录成功但每句都 401」。
要用 Pro / Max 订阅:把变量清掉。
unset ANTHROPIC_API_KEY unset ANTHROPIC_AUTH_TOKEN unset ANTHROPIC_BASE_URL claude
在 Claude Code 里跑 /status,看当前到底是订阅还是 Key。
直连官方 vs 自定义网关
官方网关文档写明了变量和请求头的对应关系:
| 变量 | 发出的头 | 用在 |
|---|---|---|
ANTHROPIC_API_KEY |
x-api-key |
直连 api.anthropic.com |
ANTHROPIC_AUTH_TOKEN |
Authorization: Bearer |
对方要求 Bearer 的网关 |
官方原话大意:变量猜错了就会 401,换另一个再 export。两个都设时,还可能出现认证冲突提示。
GitHub 上也有真实案例:系统里残留的 ANTHROPIC_AUTH_TOKEN=ollama 会盖掉刚登录成功的 OAuth,报 Invalid bearer token。清掉变量立刻恢复。
中文「无效的令牌」说明什么
Anthropic 官方英文接口很少用这句中文。如果你看到的是中文报错页或中文 JSON,请求多半没有打到 api.anthropic.com,而是打到了某个中文网关。这时应该核对:
- 当前
ANTHROPIC_BASE_URL是不是你以为的那个; - 网关要 Bearer 还是
x-api-key; - 用的 Key 是不是这个网关签发的,而不是官方 Console 的
sk-ant-…。
网页能打开 claude.ai、和 CLI 能调通,仍然是两回事。
建议顺序
/status或软件设置页,看实际 Base URL 和认证来源。- 只用一种认证:订阅、官方 Key、自定义网关,三选一。
- 自定义地址:按对方文档选
ANTHROPIC_API_KEY或ANTHROPIC_AUTH_TOKEN,不要两个都留着。 - 用 curl 直打同一地址。curl 通、软件不通 → 软件读了另一套环境变量。
- 仍然 401 → 到签发该 Key 的控制台看是否撤销、是否绑错组织 / 项目。

AI故障手册