◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/API & SDK
⬡ API & SDK/2026-04-10初級

Claude API 認証エラー 401 Invalid API Key の原因と解決方法

Claude APIが突然401 Invalid API Keyを返すときの切り分け手順をまとめました。環境変数の設定ミス、キーの失効、リクエストヘッダーの形式、Claude CodeのOAuthトークン破損、プロキシ干渉、請求設定まで6つの原因を順に確認し、解決を検証するところまで案内します。

troubleshooting61error15fix11api39authentication3401

Claude API で 401 認証エラーが発生する症状

Claude API を使い始めたとき、あるいは順調に動いていたはずのプログラムが突然「401 Invalid API Key」エラーを返すことがあります。ターミナルやログに次のようなメッセージが表示されたら、認証まわりの問題です。

{
  "type": "error",
  "error": {
    "type": "authentication_error",
    "message": "Invalid API Key"
  }
}

このエラーは「送信されたAPIキーが正しくない」ことを意味しますが、原因はキーそのものの誤りだけではありません。環境変数の設定ミス、キーの失効、OAuthトークンの破損など、複数のパターンがあります。

原因1: APIキーが正しく設定されていない

最も多い原因は、環境変数 ANTHROPIC_API_KEY が未設定か、値が間違っているケースです。

確認方法

ターミナルで現在の設定値をチェックします。

# 環境変数が設定されているか確認(先頭10文字だけ表示)
echo "${ANTHROPIC_API_KEY:0:10}..."
 
# 設定されていなければ空が返る

値が空、または sk-ant- で始まっていない場合は、設定に問題があります。

解決手順

# macOS / Linux: シェル設定ファイルに追加
echo 'export ANTHROPIC_API_KEY="sk-ant-api03-xxxxx..."' >> ~/.zshrc
source ~/.zshrc
 
# Windows (PowerShell): ユーザー環境変数に設定
[System.Environment]::SetEnvironmentVariable("ANTHROPIC_API_KEY", "sk-ant-api03-xxxxx...", "User")
# PowerShellを再起動して反映

よくある落とし穴: .env ファイルにキーを書いたつもりが、ファイルが別のディレクトリにある、またはアプリケーションが .env を読み込んでいないことがあります。Python であれば python-dotenv、Node.js であれば dotenv パッケージが正しくインポートされているか確認しましょう。

# Python: .env ファイルの読み込み確認
import os
from dotenv import load_dotenv
 
load_dotenv()  # .env ファイルを読み込み
 
api_key = os.getenv("ANTHROPIC_API_KEY")
if not api_key:
    raise ValueError("ANTHROPIC_API_KEY が設定されていません")
 
print(f"API Key found: {api_key[:10]}...")
# 期待出力: API Key found: sk-ant-api...

原因2: APIキーが失効・無効化されている

Anthropic Console でキーを再生成(Regenerate)したり、削除したりすると、古いキーは即座に無効になります。チームメンバーが意図せずキーを無効化してしまうケースもあります。

確認方法

  1. Anthropic Console にログイン
  2. 「API Keys」セクションで、使用中のキーがリストに存在するか確認
  3. キーのステータスが「Active」であることを確認

解決手順

キーが見つからない場合は、新しいキーを作成して環境変数を更新します。

# 新しいキーを設定
export ANTHROPIC_API_KEY="sk-ant-api03-新しいキー..."
 
# 動作確認(curlで簡易テスト)
curl -s https://api.anthropic.com/v1/messages \
  -H "Content-Type: application/json" \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 50,
    "messages": [{"role": "user", "content": "Hello"}]
  }' | head -c 200
 
# 期待出力: {"id":"msg_...","type":"message","role":"assistant",...}

正常にレスポンスが返れば、新しいキーは有効です。.env ファイルやシークレット管理ツールの値も忘れずに更新しましょう。

原因3: リクエストヘッダーの形式が間違っている

Claude API では、APIキーの送信方法が他のAI APIとは異なります。OpenAI のように Authorization: Bearer sk-... ではなく、x-api-key ヘッダーを使います。

よくある間違いと正しい形式

import anthropic
 
# ❌ 間違い: Authorization ヘッダーに直接渡す
# requests.post(url, headers={"Authorization": f"Bearer {api_key}"})
 
# ✅ 正しい: Anthropic SDK を使う(内部で x-api-key ヘッダーを自動設定)
client = anthropic.Anthropic()  # ANTHROPIC_API_KEY 環境変数を自動読み込み
 
message = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "こんにちは"}
    ]
)
print(message.content[0].text)
# 期待出力: こんにちは!何かお手伝いできることはありますか?

SDK を使わずに直接 HTTP リクエストを送る場合は、必ず以下のヘッダーを含めてください。

# 必須ヘッダー
-H "x-api-key: YOUR_API_KEY"
-H "anthropic-version: 2023-06-01"
-H "Content-Type: application/json"

原因4: Claude Code の OAuth 認証トークンが破損している

Claude Code(CLIツール)では、/login コマンドでブラウザ経由のOAuth認証を使います。このトークンが破損すると、ログイン成功と表示されるにもかかわらず「401 Invalid bearer token」エラーが発生します。

症状

$ claude
⎿ API Error: 401 {"type":"error","error":{"type":"authentication_error","message":"Invalid bearer token"}}

解決手順

認証情報をクリアしてから再ログインします。

# Step 1: 認証情報を完全クリア
rm -rf ~/.claude/auth* 2>/dev/null
rm -rf ~/.claude/.credentials 2>/dev/null
 
# Step 2: 既存の環境変数を解除(API キーと OAuth が競合する場合がある)
unset ANTHROPIC_API_KEY
 
# Step 3: 再ログイン
claude /login
 
# Step 4: ブラウザで認証を完了し、ターミナルに戻って動作確認
claude "Hello, this is a test"

それでも解決しない場合は、Claude Code を最新バージョンにアップデートしてから再試行してください。

# Claude Code のアップデート
npm install -g @anthropic-ai/claude-code@latest
 
# バージョン確認
claude --version

原因5: プロキシ・VPN・ファイアウォールが干渉している

企業ネットワークや一部の国・地域では、プロキシやファイアウォールがAPIリクエストを改変し、認証ヘッダーが正しく送信されないことがあります。

確認方法

# プロキシ設定を確認
echo "HTTP_PROXY: $HTTP_PROXY"
echo "HTTPS_PROXY: $HTTPS_PROXY"
echo "NO_PROXY: $NO_PROXY"
 
# 直接接続テスト(プロキシをバイパス)
curl -v --noproxy '*' https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{"model":"claude-sonnet-4-6","max_tokens":10,"messages":[{"role":"user","content":"Hi"}]}' \
  2>&1 | grep -E "HTTP/|error|auth"

解決手順

プロキシ経由でAPIにアクセスする場合は、api.anthropic.com をプロキシの許可リストに追加するか、NO_PROXY に設定してバイパスします。

# api.anthropic.com をプロキシバイパスに追加
export NO_PROXY="api.anthropic.com,$NO_PROXY"

VPN を利用している場合は、一時的にVPN をオフにしてテストすることで問題を切り分けられます。

原因6: API キーの権限・請求設定の問題

APIキー自体は有効でも、以下の理由で認証エラーが発生することがあります。

  • クレジット残高がゼロ: 従量課金の場合、残高不足で認証拒否される
  • キーのスコープ制限: ワークスペース単位で制限されたキーを別のワークスペースで使用
  • アカウントの停止: 利用規約違反等でアカウントがサスペンドされている

確認手順

  1. Anthropic Console にログイン
  2. 「Billing」→ クレジット残高を確認
  3. 「Settings」→ アカウントステータスを確認
  4. APIキーの作成元ワークスペースと、リクエストで使用しているワークスペースが一致しているか確認

残高不足の場合は、クレジットを追加すれば即座に利用再開できます。

解決できたかの検証手順

問題を修正したら、以下のスクリプトで認証が正常に動作するか検証します。

import anthropic
import sys
 
def verify_authentication():
    """Claude API 認証の動作検証"""
    try:
        client = anthropic.Anthropic()
        
        # 最小限のリクエストで認証テスト
        response = client.messages.create(
            model="claude-sonnet-4-6",
            max_tokens=20,
            messages=[{"role": "user", "content": "Say OK"}]
        )
        
        print(f"✅ 認証成功")
        print(f"   Model: {response.model}")
        print(f"   Response: {response.content[0].text}")
        print(f"   Usage: input={response.usage.input_tokens}, output={response.usage.output_tokens}")
        return True
        
    except anthropic.AuthenticationError as e:
        print(f"❌ 認証エラー: {e}")
        print("   → API キーを確認してください")
        return False
    except anthropic.APIConnectionError as e:
        print(f"❌ 接続エラー: {e}")
        print("   → ネットワーク設定を確認してください")
        return False
    except Exception as e:
        print(f"❌ 予期しないエラー: {e}")
        return False
 
if __name__ == "__main__":
    success = verify_authentication()
    sys.exit(0 if success else 1)
 
# 期待出力:
# ✅ 認証成功
#    Model: claude-sonnet-4-6
#    Response: OK
#    Usage: input=10, output=3

再発を防ぐベストプラクティス

認証エラーを未然に防ぐために、以下の習慣を取り入れましょう。

APIキーの管理を徹底することが最も重要です。キーはコードにハードコードせず、環境変数またはシークレット管理ツール(AWS Secrets Manager、HashiCorp Vault、1Passwordなど)に保存してください。チーム開発では、個人ごとにキーを発行し、共有キーの使用は避けましょう。

エラーハンドリングの実装も欠かせません。401エラーが発生したとき、即座にリトライするのではなく、キーの有効性をチェックしてからリトライする仕組みを入れておくと、不要なAPIコールを防げます。

import anthropic
import time
 
def call_with_auth_retry(client, max_retries=2, **kwargs):
    """認証エラー時にキーを再検証してリトライ"""
    for attempt in range(max_retries + 1):
        try:
            return client.messages.create(**kwargs)
        except anthropic.AuthenticationError:
            if attempt < max_retries:
                print(f"認証エラー(試行 {attempt + 1}/{max_retries + 1})")
                print("API キーを再読み込みします...")
                # 環境変数から再読み込み
                import os
                os.environ.pop("ANTHROPIC_API_KEY", None)
                from dotenv import load_dotenv
                load_dotenv(override=True)
                client = anthropic.Anthropic()
                time.sleep(1)
            else:
                raise

AIの実践的な活用方法をさらに

全体を振り返って

Claude API の 401 認証エラーは、原因が明確であれば短時間で解決できる問題です。本記事で紹介した6つのパターン — 環境変数の未設定、キーの失効、ヘッダー形式の誤り、OAuthトークンの破損、プロキシの干渉、請求設定の問題 — を順番にチェックすれば、ほとんどのケースに対応できます。

まずは echo $ANTHROPIC_API_KEY でキーの存在を確認し、次に curl で直接テストするのが最短の切り分け方法です。それでも解決しない場合は、本記事の検証スクリプトを活用してください。

Claude APIのエラーハンドリング全般について詳しく知りたい方は「Claude API エラーハンドリングとリトライ戦略」も参考になります。また、「Claude API 初回リクエストのトラブルシューティング FAQ」では初めてAPIを使う方向けの基本的なつまずきポイントを網羅しています。

シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

⟐ Claude Code2026-05-02
Claude Code の Edit ツールで「old_string is not unique」エラーを止める実践的な書き換え戦略
Claude Code の Edit ツールで「old_string is not unique」が頻発するのは、編集ターゲットの一意性をプロンプト側で保証していないことが根本原因です。再発を防ぐ書き換え戦略を解説します。
⬡ API & SDK2026-05-22
Claude の『このモデルは現在利用できません』が出る時に効くモデル選択フォールバックの設計
Claude API で『このモデルは現在利用できません(this model is currently unavailable)』と返ってきたとき、529 Overloaded やレート制限と同じ扱いにすると遠回りになります。エラーの種類を SDK の例外クラスで見分け、モデル ID をリクエスト単位で切り替えるフォールバックの実装と、思い込みで書きやすい落とし穴をまとめました。
⬡ API & SDK2026-05-16
Claude API で多言語レビュー返信を自動化した実装ログ — App Store 非公式制限との付き合い方
壁紙・ヒーリング系アプリを複数運営する個人開発者が、Claude APIで多言語レビュー返信を自動化した実装ログ。App Storeの8秒待機ルールや1セッション30件制限など、公式ドキュメントには書かれていない落とし穴と解決策を詳解します。