Invalid API key · Fix external API key
鍵やトークンの途中に改行や全角文字が混ざり、送る前に止められた状態。表示の文字位置を打ち直す。
エラー文字列
Invalid API key · Fix external API key
⚠️ 標準出力に出ます。終了コードは 1 です。 API には何も送られていません。
何が起きているか
鍵やトークンを HTTP ヘッダとして送ろうとしたところ、ヘッダに入れられない文字が混ざっていました。 Claude Code は送る前に止めています。
⭐ 表示の後ろに、どの変数の何文字目かが出ます。 v2.1.283 で実測した表示です。
Invalid API key · Fix external API key · Invalid X-Api-Key header value from ANTHROPIC_API_KEY: it contains a line break at character 10 (13 characters on 2 lines).
どの変数に混ざったかで、表示の頭が変わります。
| 表示の頭 | 混ざっていた場所 |
|---|---|
Invalid API key · Fix external API key |
ANTHROPIC_API_KEY |
Invalid auth token · Fix external auth token |
ANTHROPIC_AUTH_TOKEN(実測)。CLAUDE_CODE_OAUTH_TOKEN も同じ扱いと公式に記載 |
Invalid ANTHROPIC_CUSTOM_HEADERS · Fix the environment variable |
ANTHROPIC_CUSTOM_HEADERS |
🔴 末尾の改行ではこの表示にならない
v2.1.283 で、混ぜる位置だけを変えて実測しました(鍵はすべて無効な値)。
| 混ぜたもの | 場所 | 結果 |
|---|---|---|
| 改行(LF・CRLF とも) | 途中 | この表示(it contains a line break at character 10) |
| 全角スペース | 途中 | この表示(it contains a non-ASCII character) |
| ゼロ幅スペース | 途中 | この表示(it contains a zero-width character (U+200B)) |
曲がった引用符 “ |
途中 | この表示(it contains a typographic quote (U+201C)) |
| 改行 | 末尾 | 取り除かれて送られ、401 API key is invalid. |
| 全角スペース | 末尾 | 同上 |
| BOM | 先頭 | 同上 |
| 半角スペース | 先頭・途中 | 同上(半角スペースはヘッダに入れられる) |
settings.json の env.ANTHROPIC_API_KEY に書いた場合も、同じ表示になりました。
⭐ 日本語の環境で起きやすいのは全角スペースです。 途中に入ると、表示は a non-ASCII character になります。
⚠️ 先頭と末尾に付いたものは取り除かれてから送られるため、この表示にはなりません。
その場合は鍵として送られ、無効なら 401 API key is invalid. になります。
⚠️ つまり この表示が出たら、値の途中に何かが混ざっています。 貼り付け元の文書やチャットが、 見えない文字や改行を運んできたことがほとんどです。
直し方
1. 表示の「何文字目」を見る
at character 10 (13 characters on 2 lines) なら、10文字目が問題で、全体は13文字・2行に分かれています。
鍵の長さと行数が、自分の知っている鍵と合っているかだけでも確かめられます。
2. その変数を設定し直す
⚠️ 同じ場所から貼り直さないこと。 同じ文字がまた混ざります。発行元の画面からコピーし直すか、該当箇所を打ち直してください。
macOS / Linux
printf '%s' "$ANTHROPIC_API_KEY" | od -c | head -5
Windows(PowerShell)
$v = $env:ANTHROPIC_API_KEY
"長さ: {0}" -f $v.Length
"改行を含む: {0}" -f ($v -match "[`r`n]")
"ASCII 以外を含む: {0}" -f ($v -match '[^\x20-\x7E]')
⚠️ 鍵の全体を画面やログに出さないこと。 長さと「含むかどうか」で足ります。
3. ANTHROPIC_CUSTOM_HEADERS の場合
名前: 値 の形で、1行に1組書きます。
export ANTHROPIC_CUSTOM_HEADERS="X-Team: platform"
実測した表示です。どの組が悪いかは数えてくれますが、名前や値そのものは表示されません。
| 書いたもの | 結果 |
|---|---|
値に曲がった引用符 X-Foo: b“r |
Invalid value for distinct header 1 of 1 parsed from ANTHROPIC_CUSTOM_HEADERS: it contains a typographic quote (U+201C) at character 2 |
| 名前に使えない記号 | Invalid name for distinct header 1 of 1 parsed from ANTHROPIC_CUSTOM_HEADERS: the HTTP runtime does not accept it |
コロンの無い行 X-Foo bar |
この表示にはならなかった(そのまま先へ進んだ)。書いたつもりのヘッダが効いていないことに気づけない |
再発防止
- 鍵は発行元の画面から直接コピーする。文書やチャットを経由させない
- CI のシークレットは、貼り付けたあとに長さを確かめる
- 表示に出る文字位置と行数を手がかりにする。値そのものは表示されないので、ログに残しても漏れない