Claude の 401 は常に5つのいずれかです。誤ったヘッダー、エンドポイントに対して誤った種類のキー、不正な環境変数、無効化されたキー、またはそのキーに対して誤った base URL です。以下の診断を実行すれば、1分未満で原因を特定できます。
エラー
{
"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))"キーのプレフィックスを base 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と長さを出力してください。
Anthropic ConsoleのキーをOpenAI互換ゲートウェイで使えますか?
いいえ。各サービスは自サービスのキーのみを認証します。sk-antキーはapi.anthropic.comに属し、ゲートウェイキーはゲートウェイに属します。呼び出しているベースURLに対応するキーを取得してください。