Claude Code で Invalid API key · Fix external API key や Invalid auth token · Fix external auth token が出たときの直し方です。結論から言うと、原因は「キーが失効している・間違っている」か「環境変数に古いキーが残っている」か「コピペでキーに改行や見えない文字が混ざっている」のどれかです。最後のものは、メッセージの後ろに原因が書いてあるので、そこまで読めば特定できます。
確認環境は Claude Code 2.1.319、macOS 26.6.2、2026-11-08 です。
症状
起動時や最初の送信で、次のどちらかが表示されます。
Invalid API key · Fix external API key
Invalid auth token · Fix external auth token
後ろに説明が続くことがあります。
Invalid API key · Fix external API key · Invalid X-Api-Key header value from ANTHROPIC_API_KEY: it contains a line break at character 41 (120 characters on 2 lines).
結論
-
Fix external API keyの「external」は、/loginで保存したログインではなく、外から渡したキー(環境変数ANTHROPIC_API_KEYかapiKeyHelper)のことです。Invalid auth tokenのほうは、ANTHROPIC_AUTH_TOKENかCLAUDE_CODE_OAUTH_TOKENの値です。 - まず
env | grep ANTHROPICで、自分が設定した覚えのないキーが入っていないかを見ます。 - サブスクリプション(Pro / Max など)で使うつもりなら、
unset ANTHROPIC_API_KEYして/loginで済みます。 - メッセージの後ろに
it contains a line break at character Nのような説明が付いていたら、キーが API に届く前に Claude Code が止めています。キーの失効ではなく、貼り付けた値の問題です。
2 通りの原因
公式の Error reference では、Invalid API key は「ANTHROPIC_API_KEY 環境変数か apiKeyHelper スクリプトが返したキーを API が拒否した、または Claude Code が送信前にキーを止めた」と説明されています。つまり別々の 2 つの場面があります。
1 つ目は API に送って 401 で断られた場合です。キーの打ち間違い、Console での失効、別の組織のキー、などです。
2 つ目は API に送る前に Claude Code が止めた場合です。HTTP ヘッダに載せられない文字(改行、NUL、U+00FF を超える文字。たとえば全角の引用符やゼロ幅スペース)が値に入っていると、リクエストを出す前に止まります。公式は「チャットや文書から貼り付けた認証情報に、見えない文字や余計な改行が付いているのが典型的な原因」と書いています。この場合はメッセージの 2 つ目の · の後ろに説明が付きます。
手元で確かめた結果
ダミーのキーに改行とゼロ幅スペースを混ぜて claude -p hi を実行しました。キーはダミーで、改行を含む値はヘッダに載せられないため、この 3 つはどれも送信前に止まります(実際に API へは何も送られません)。
分かったことは次のとおりです。
-
ANTHROPIC_API_KEYに改行があるとInvalid API key · Fix external API key · Invalid X-Api-Key header value from ANTHROPIC_API_KEY: it contains a line break at character 19 (25 characters on 2 lines).と出ます。 -
ANTHROPIC_AUTH_TOKENに改行があると、頭がInvalid auth token · Fix external auth tokenに変わり、Invalid Authorization header value from ANTHROPIC_AUTH_TOKEN: ...と続きます。キーとトークンは送るヘッダが違う(X-Api-KeyとAuthorization)ため、メッセージにもその名前が出ます。 - ゼロ幅スペースは
it contains a zero-width character (U+200B)と名指しされます。公式の説明どおり、BOM、ゼロ幅スペース、全角の引用符のようによく知られた文字は名前で、それ以外はa non-ASCII characterと報告されます。 -
at character 19は先頭を 1 とした文字位置です。ダミーのキーはsk-ant-api03-dummyが 18 文字なので、その直後の 19 文字目に改行が入っていることが読み取れます。メッセージに値そのものは含まれないので、画面を共有しても漏れません。
なお、サーバから 401 が返る形(失効したキー)の再現はしていません。本物でないキーを外部に送らないためです。
直し方
1. 何が設定されているかを見る
同じシェルで次を実行します。
env | grep ANTHROPIC
PowerShell なら次です。
Get-ChildItem Env:ANTHROPIC*
公式は、direnv や dotenv 系のシェルプラグイン、IDE のターミナルが、プロジェクトの .env から古いキーを読み込んでいることがあると書いています。設定した覚えがなくても、ここで見つかることがあります。表示されたキーの中身を画面共有やチャットに貼らないでください。
2. サブスクリプションで使うなら、キーを外して /login
unset ANTHROPIC_API_KEY
claude
起動したら /login を実行します。~/.zshrc などに export ANTHROPIC_API_KEY=... があれば、そこも消します。消さないと次のシェルでまた出ます。
優先順位は公式の Authentication precedence にあり、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_API_KEY、apiKeyHelper、CLAUDE_CODE_OAUTH_TOKEN、/login の順です。環境変数のキーが 1 つでも残っていれば、保存したログインより先にそちらが使われます。
3. API キーで使うなら、キーを確かめる
Console の https://platform.claude.com/settings/keys で、そのキーが失効していないか、打ち間違いがないかを見ます。
4. 後ろに説明が付いているときは、指摘された位置を打ち直す
公式は「同じ元から貼り直さず、報告された位置の前後の文字を手で打ち直す」ことを案内しています。同じメモやチャットから貼ると、また同じ文字が入るためです。
export ANTHROPIC_API_KEY='ここに手で打つ'
シェルの設定ファイルに書いている場合は、その行を直してから新しいシェルで確かめます。引用符は半角のシングルクォートかダブルクォートにします。全角の引用符(“ ”)が入ると、上で見たとおり止められます。
5. apiKeyHelper を使っているとき
apiKeyHelper の出力は、先ほどのヘッダ検査には回らず、スクリプトを実行した時点で検証されます。公式によると、キーの文字として使えるのは印字可能な ASCII の 1 トークンで、最大 16,384 文字、終了コードは 0 です。ログインバナーやログ行が一緒に出力されていると失敗します。スクリプトを単体で実行して、キーだけが標準出力に出ることを確かめます。
~/bin/my-key-helper | cat -A
cat -A は行末を $ で、制御文字を ^ で見せるので、余計な改行や空白が混ざっていれば分かります。スクリプトのパスは自分のものに読み替えてください。
6. 今どれが使われているかを /status で確かめる
/status
公式によると、ログインと API キーの両方が設定されているときは、使われていないほうが印付きで表示されます。キーを外したつもりなのに同じメッセージが出るときは、ここで確かめます。
直らないとき
-
unsetしたのに戻る場合は、シェルの設定ファイル、direnv の.envrc、プロジェクトの.env、IDE のターミナル設定のどれかが毎回キーを入れ直しています。 -
Invalid API key · Please run /loginと出る場合も、原因の入口は同じです(拡張の中でFix external API keyと出るのは、ANTHROPIC_API_KEYが無効なときだという報告があります)。issue での報告では、VS Code 拡張でこの文言が出るものが多く、拡張を入れ直す前に CLI を単体でインストールしてclaudeでログインし直したら直った、という例があります(issue #12204)。 -
/から Switch Account を選んでログインし直して直ったという報告もあります(issue #14023)。
同じ原因で出る別のメッセージ
Invalid ANTHROPIC_CUSTOM_HEADERS · Fix the environment variable は、ANTHROPIC_CUSTOM_HEADERS に設定したヘッダの名前か値に、同じ種類の文字が入っているときです。メッセージには何番目の Name: Value の組かだけが出ます。1 行に 1 組になっているかを確かめます。
Invalid API key format. API key must contain only alphanumeric characters, dashes, and underscores. は、Claude Code の実行ファイルに入っている文字列として確認できる文言で、英数字・ハイフン・アンダースコア以外の文字を含むキーを断る内容です。公式ドキュメントには載っておらず、どの操作で出るかは手元で再現できていません。推測ですが、キーの入力で余計な空白や引用符が混ざったときに出るもので、対処は同じくキーを打ち直すことだと思います。
Your ANTHROPIC_API_KEY belongs to a disabled organization や This organization has been disabled は、古い組織のキーが残っているときの別のメッセージです。
Credit balance is too low も、サブスクリプションのつもりで古い API キーが使われているときに出ます。
Not logged in や Login expired は、環境変数ではなく保存したログインの問題です。
Claude Code で出るほかの英文エラーと、それぞれの対処は、早見表にまとめています。
参考
- 公式 Error reference(Invalid API key): https://code.claude.com/docs/en/errors#invalid-api-key
- 公式 Error reference(Invalid request header value): https://code.claude.com/docs/en/errors#invalid-request-header-value
- 公式 Error reference(Your apiKeyHelper script is failing): https://code.claude.com/docs/en/errors#your-apikeyhelper-script-is-failing
- 公式 Authentication(Authentication precedence): https://code.claude.com/docs/en/authentication#authentication-precedence
- issue #12204(VS Code 拡張で Invalid API key · Please run /login): https://github.com/anthropics/claude-code/issues/12204
- issue #14023(Switch Account でログインし直す): https://github.com/anthropics/claude-code/issues/14023
