Claude Media
Claude Code「Invalid API key」エラーの原因と対処法

Claude Code「Invalid API key」エラーの原因と対処法

「Invalid API key」はキーの失効・誤入力だけでなく、貼り付け時の改行混入や環境変数の優先順位でも起きます。3系統に分けて切り分け方をまとめます。

Invalid API keyは「キーは送られたが拒否された」状態

Invalid API key · Fix external API key は、ANTHROPIC_API_KEY 環境変数か apiKeyHelper スクリプトが返したキーをAPIが拒否したとき、あるいはClaude Codeがキーを送信前に自ら止めたときに出ます。「資格情報が見つからない」Not logged in とは違い、キーは存在するのに使えない状態です。

Invalid API key · Fix external API key

原因は大きく3系統に分かれます。キー自体の問題(誤入力・失効・取り消し)、キーの値そのものにHTTPヘッダーが運べない文字が混入している問題、そして意図しないキーが優先されてしまっている問題です。

メッセージの続き方原因の分類
Fix external API key だけで終わる原因の分類キーが単純に無効・失効・取り消し済み
Fix external API key の後に it contains a line break at character N などが続く原因の分類キーの値に改行や不可視文字が混入
メッセージは出ずサブスクリプションが使われない原因の分類ANTHROPIC_API_KEY が意図せず優先されている

まずキー自体を疑う

Console(platform.claude.com)でキーが取り消されていないか、タイプミスがないかを確認します。同じシェルで環境変数を再確認してください。

env | grep ANTHROPIC

Windows PowerShellでは次のコマンドを使います。

Get-ChildItem Env:ANTHROPIC*

direnvやdotenv系のシェルプラグイン、IDEのターミナルがプロジェクト内の .env ファイルから古いキーを自動的に読み込んでいることがあります。明示的にexportした覚えがなくても、この経路でキーが設定されているケースは珍しくありません。

apiKeyHelper を使っている場合は、スクリプトを直接実行してキーが標準出力に返るかを確認します。

/path/to/your/api-key-helper.sh

サブスクリプション認証に戻したい場合は環境変数を解除して /login します。

unset ANTHROPIC_API_KEY

貼り付け由来の不可視文字を疑う

エラーメッセージが Fix external API key で終わらず、it contains a line break at character 41 (120 characters on 2 lines) のように文字位置の説明が続く場合、原因はキーの値そのものに混入した改行や不可視文字です。HTTPヘッダーは改行・NULバイト・U+00FF を超える文字(カーブした引用符やゼロ幅スペースなど)を運べないため、Claude Codeはリクエストを送信する前にこれを検知して止めます。APIまでキーは届いていません。

典型的な原因は、ドキュメントやチャットからキーをコピーした際に混入した不可視文字や、折り返しで入った改行です。対処は再入力です。同じソースから再度コピー&ペーストすると同じ不可視文字を再び拾うことが多いため、報告された文字位置の前後だけでも手で打ち直すのが確実です。

意図しないキーが優先されている

サブスクリプションでログイン済みなのに、シェルに残った ANTHROPIC_API_KEY が優先されてしまうケースもあります。この場合は Invalid API key ではなく Credit balance is too lowThis organization has been disabled のような、別の認証エラーとして出ることが多い点に注意してください。認証方式の優先順位そのものはClaude Codeログイン方法3種の使い分けにまとめています。/status を実行すると、API key の行が表示されるかどうかで、環境変数由来のキーが有効になっているかを確認できます。

/status

apiKeyHelperの出力自体が壊れているケース

apiKeyHelper を使っている場合、スクリプトが「キー以外の何か」を返してしまうことがあります。ログイン画面のバナーや、ログ出力の一行が混ざっていると、Claude Codeはそれをそのままキーとして送信しようとし、APIがフォーマット違反として拒否します。v2.1.227より前は、末尾・先頭の空白を取り除いただけの出力をそのままキーとして送信していたため、この種の混入が起きやすい状態でした。現在のバージョンでは、標準出力に印字可能なASCII以外の文字が混ざっている、あるいはキー以外の文字列が含まれていると判断された場合、returned output that cannot be used as an API key という説明つきで apiKeyHelper 側のエラーとして扱われます。Invalid API key として表面化するのは、あくまでスクリプトの出力が形式上はキーに見える場合に限られます。

apiKeyHelper の更新間隔は既定で5分ごと、またはHTTP 401応答を受けたタイミングです。CLAUDE_CODE_API_KEY_HELPER_TTL_MS 環境変数でこの間隔を変更できます。更新直後に短時間だけ Invalid API key が出て、再試行すると直るという場合は、この更新タイミングと外部の認証情報プロバイダー側の発行タイミングがずれている可能性があります。

非対話モード(-p)での挙動の違い

対話モードでは ANTHROPIC_API_KEY が設定されていても初回に承認プロンプトが出て、選択が記憶されます。しかし非対話モード(-p)では、キーが設定されている限り常にそのまま使われます。CIパイプラインで意図せず古いキーが使われている場合、承認プロンプトを挟まないこの挙動が原因になっていることがあります。パイプラインの環境変数を棚卸しし、不要な ANTHROPIC_API_KEY が残っていないかを確認してください。

ANTHROPIC_AUTH_TOKENとの混同に注意

ANTHROPIC_API_KEY の代わりに ANTHROPIC_AUTH_TOKEN(LLMゲートウェイ経由でBearerトークン認証する場合に使う変数)を設定している場合、同じ種類の不具合でも出るメッセージが異なります。ANTHROPIC_API_KEY の不正なら Invalid API keyANTHROPIC_AUTH_TOKENCLAUDE_CODE_OAUTH_TOKEN の不正なら Invalid auth token · Fix external auth token になります。

Invalid auth token · Fix external auth token

どちらの変数を設定しているかによってエラー名が変わるだけで、原因の探し方(改行混入・失効・優先順位)は共通です。env | grep ANTHROPIC の結果を見て、実際にどちらの変数が設定されているかをまず確認してください。両方が設定されている場合は ANTHROPIC_AUTH_TOKEN の方が優先されるため、Invalid API key が出ているなら ANTHROPIC_AUTH_TOKEN は設定されていません。

apiKeyHelperが原因の場合との切り分け

apiKeyHelper スクリプトが失敗している場合、実際には Invalid API key ではなく Your apiKeyHelper script is failing という別のメッセージになります。スクリプトの終了コードがエラーだったり、標準出力に何も返さなかったり、キー以外の文字列(ログイン画面のバナーなど)を出力したりした場合がこちらに該当します。Invalid API key が出ているということは、スクリプトは何らかのキーを返し、そのキーの中身が問題になっているという切り分けができます。

よくあるつまずき

キーのローテーション後に古い値が残る。Consoleで新しいキーを発行しても、シェルの環境変数や .env ファイル、CIのシークレット設定を更新し忘れていると、古い取り消し済みキーがそのまま使われ続けます。ローテーション時はキーを使っている箇所を横断的に洗い出す必要があります。

Markdownやスライドからのコピー&ペースト。キーをドキュメントやスライドに貼っていた場合、書式付きテキストのコピーで見た目には分からない改行やスペースが混入することがあります。プレーンテキストのエディタに一度貼り付けてから再度コピーすると回避できます。

環境変数のスコープの取り違え。プロジェクトの .env ファイルに書いたキーは、direnvなどのツールを介さない限りシェル起動時には読み込まれません。設定したはずなのに反映されない場合、そのファイルが実際に読み込まれる仕組みになっているかを確認します。Claude Codeが参照する環境変数の全体像はClaude Code環境変数リファレンスで確認できます。

よくある質問

/loginを実行すればInvalid API keyは直りますか

ANTHROPIC_API_KEY が環境に設定されたままだと、/login でサブスクリプションにログインしても、非対話モードや承認済みの対話モードではキーの方が優先され続けます。先に unset ANTHROPIC_API_KEY してから /login してください。

CIのシークレット設定に貼り付けたキーでも改行混入は起きますか

起きます。GitHub ActionsのSecretsやその他のCIのシークレットストアも、UIへのコピー&ペースト経由で登録する以上、貼り付け元に不可視文字が含まれていれば同じ問題が起きます。CI環境でだけ Invalid API key が出て、ローカルの同じキーでは問題ない場合、シークレットストアへの登録時に何が混入したかを疑います。値を一度削除し、プレーンテキストへ経由してから再登録すると解消することがあります。

Consoleでキーは有効なままなのにInvalid API keyが出ます

キーの値そのものに改行や不可視文字が混入している可能性があります。エラーメッセージに it contains a line break at character N のような説明が続いていないか確認し、続いていればキーを打ち直してください。Consoleの表示上は有効でも、貼り付け先の値が壊れていれば拒否されます。

Invalid API keyCredit balance is too lowはどう違いますか

前者はキーの値そのものがAPIに拒否される、または送信前にClaude Codeが不正な形式を検知して止めるエラーです。後者はキーは正しく通っているものの、紐づくConsoleの組織のプリペイド残高が尽きている状態です。/status で認証情報源を確認したうえで、Console側の請求設定も確認してください。

まとめ

Invalid API key はキーが単純に無効なケースだけでなく、貼り付け時の不可視文字混入や、意図しないキーの優先という2つの見落としやすい原因があります。エラーメッセージが文字位置の説明まで含んでいるかどうかで、キーそのものの失効なのか値の破損なのかを切り分けられます。/status で今どの認証情報源が使われているかを常に確認する習慣が、原因の特定を早くします。

切り分けの順番は、①Consoleでキーが有効か確認、②メッセージに文字位置の説明が続くかを見て貼り付け由来の破損を切り分け、③apiKeyHelper を使っているならスクリプト単体で実行して出力を確認、④ANTHROPIC_AUTH_TOKEN との取り違えがないかを確認、の4段階です。非対話モード(-p)で動かしているパイプラインでは、承認プロンプトが挟まらないぶん古いキーが残っていることに気づきにくいので、定期的な棚卸しが有効です。

この記事を共有:XはてブLinkedIn