0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code で "Invalid API key · Fix external API key" "Invalid auth token" が出たときの直し方(キーが正しいのに出る場合は改行やゼロ幅スペースの混入)

0
Posted at

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 と ANTHROPIC_AUTH_TOKEN に渡し、さらにゼロ幅スペースを混ぜた場合の claude -p hi の出力。いずれも Invalid API key または Invalid auth token と表示され、改行またはゼロ幅スペースを含むと説明されている

分かったことは次のとおりです。

  • 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 で出るほかの英文エラーと、それぞれの対処は、早見表にまとめています。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?