Claude 回傳 401 一定是以下五種原因之一:標頭錯誤、金鑰類型不適用於該端點、環境變數格式錯誤、金鑰已撤銷,或該金鑰使用了錯誤的基底 URL。執行下方診斷,即可在不到一分鐘內找出您遇到的原因。
錯誤
{
"type": "error",
"error": {
"type": "authentication_error",
"message": "invalid x-api-key"
}
}原因與解決方法一覽
| 原因 | 解決方法 |
|---|---|
| 該端點使用了錯誤的標頭 | Anthropic 原生 API 需要 x-api-key + anthropic-version;相容於 OpenAI 的端點需要 Authorization: Bearer。 |
| 金鑰與端點不相符 | sk-ant-… 金鑰只能用於 api.anthropic.com;閘道金鑰(例如 sk-kn-…)只能用於其所屬閘道的 URL。 |
| 環境變數中混入空白或引號 | 重新匯出環境變數,不要包含引號或換行字元;印出 len(key),以找出複製貼上造成的尾端 \n。 |
| 金鑰已撤銷或工作區已停用 | 在主控台建立新的金鑰,並在您的機密管理工具中輪替金鑰。 |
直接使用 curl 重現問題(排除 SDK 的影響)
如果 curl 可以運作,但您的應用程式不行,問題就在環境變數的處理方式,而不是金鑰:
# Native Anthropic wire (works on api.anthropic.com and Kunavo /v1/messages)
curl -s https://api.kunavo.com/v1/messages \
-H "x-api-key: $KUNAVO_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'
# OpenAI-compatible wire (Bearer header instead)
curl -s https://api.kunavo.com/v1/chat/completions \
-H "Authorization: Bearer $KUNAVO_API_KEY" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'
# Check the key isn't carrying whitespace
python3 -c "import os; k=os.environ['KUNAVO_API_KEY']; print(repr(k[:12]), len(k))"確認金鑰前綴與基底 URL 相符
sk-ant-… → api.anthropic.com。sk-kn-… → api.kunavo.com/v1。將閘道金鑰傳送給 Anthropic(或反過來)一定會收到 401 錯誤——錯誤訊息從不會寫「wrong host」,因此這個問題雖然就在眼前,卻很容易被忽略。
只要金鑰曾出現在儲存庫或日誌中,就應輪替金鑰
如果金鑰正確卻仍遭拒絕,請先假定它已被撤銷(自動掃描工具會迅速撤銷外洩的金鑰)。建立新的金鑰,並將它存放在機密管理工具中,而不是會被提交至儲存庫的 .env 檔案中。
如果你透過 Kunavo 呼叫
Kunavo 金鑰(sk-kn-…)在每個端點都可透過任一標頭進行驗證——OpenAI SDK 使用的 Authorization: Bearer,或 Anthropic SDK 使用的 x-api-key——因此無論您使用哪個 SDK,都只需變更基底 URL。金鑰可在儀表板中立即建立及撤銷。 金鑰通過驗證後,其計費費率請參閱以下價目表: Anthropic Claude API 價格表.
常見問題
為什麼我的金鑰用 curl 可以運作,但在應用程式中不行?
幾乎總是環境變數的處理問題:複製貼上造成的尾端換行、值中包含引號、變數未匯出至程序,或正式環境載入了不同的環境變數。請在發生問題的程序內列印金鑰的 repr 與長度。
可以在 OpenAI 相容閘道上使用我的 Anthropic Console 金鑰嗎?
不行。每項服務只會驗證自己的金鑰:sk-ant 金鑰屬於 api.anthropic.com,閘道金鑰則屬於該閘道。您呼叫哪個基底 URL,就應向對應的服務取得金鑰。