CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
記事一覧/API & SDK
API & SDK/2026-04-10初級

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

Claude APIで401 Invalid API Keyエラーが出る原因と対処法を完全解説。環境変数の設定ミス、APIキーの失効、OAuth認証の問題まで、ステップバイステップで解決します。

troubleshooting61error15fix11api38authentication3401

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)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

API & SDK2026-04-07
Claude API の429・503エラーとタイムアウトを完全解決する対処法
Claude APIで発生する429レート制限・503サービス利用不可・タイムアウトエラーの原因と解決策を徹底解説。指数バックオフ実装からTier別上限の確認方法まで、現場で使える対処法を網羅します。
API & SDK2026-05-16
Claude API の Tool Use でスキーマ定義ミスが出たとき:実際に遭遇した3つのパターンと診断手順
Claude API の Tool Use でよく起きるスキーマ定義ミス・invalid_tool_use・Claude がツールを呼ばない問題を、実際のアプリ開発で遭遇したケースをもとに診断手順と修正パターンで解説します。
API & SDK2026-05-04
Claude API の stop_sequences が効かないときに確認すべき5つのポイント
Claude API の stop_sequences パラメータが期待通りに止まらない問題の原因を、トークン境界・空白・Tool Use・ストリーミングの観点から実例コード付きで切り分ける手順をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →