ガイド一覧へ戻る
トラブルシューティング·2026年8月30日·読了6分

Claude Code「API Error: bad_response_status_code」— 内部のステータスを読み取る

このエラーから分かるのは呼び出しが失敗したことだけで、理由はほとんど分かりません。役立つ情報であるステータスコードとプロバイダーのメッセージは、デバッグフラグ1つで表示できます。各ステータスは異なる修正を示します。

最終確認日:。

このエラーから分かるのは呼び出しが失敗したことだけで、理由はほとんど分かりません。役立つ情報であるステータスコードとプロバイダーのメッセージは、デバッグフラグ1つで表示できます。各ステータスは異なる修正を示します。

エラー

terminal
API Error: bad_response_status_code

(no status, no provider message — the wrapper hides both)

原因と対処法の概要

原因対処法
内部が401 / 403カスタムbase URLに対する認証情報またはヘッダーの不一致です。どの認証変数が設定されているか確認してください。
内部が404そのホストではモデルIDが不明か、base URLに余分なパスセグメントがあります。
内部が402ゲートウェイのウォレットが空です。チャージしてください。クライアント設定に問題はありません。
内部が429 / 529レート制限または上流の過負荷です。再設定ではなく、バックオフを伴って再試行してください。
200なのにJSONではない本文キャプティブポータル、企業プロキシ、またはエラーページです。ステータスは正常でも、本文が使用できない場合があります。

ラッパーを実際のエラーに変える

Claude Codeのデバッグ出力には、リクエストと上流レスポンスが表示されます。デバッグを有効にして失敗する呼び出しを1回実行し、ステータス行を読んでください。以降のすべては、その内容に依存します。

debug.sh
claude --debug 2>&1 | tee claude-debug.log

grep -iE 'status|http/|error' claude-debug.log | head -20

同じ呼び出しをcurlで再現する

ツールからbase URLと認証情報を取り出し、リクエストを直接実行します。これにより「ホストに拒否された」のか「クライアントの形式が不正」なのかを一度で切り分けられます。生の本文には通常、ラッパーが破棄した問題が平易な言葉で記載されています。

reproduce.sh
curl -i "$ANTHROPIC_BASE_URL/v1/messages" \
  -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":16,
       "messages":[{"role":"user","content":"ping"}]}'

base URLに末尾パスがないことを確認する

Claude Codeは独自の`/v1/...`パスを追加します。すでに`/v1`で終わるbase URLを指定すると、`/v1/v1/messages`が生成されます。どのホストもこれに404で応答し、再びbad_response_status_codeとしてラップされます。オリジンのみを設定してください。

base-url.sh
# Wrong — doubles the version segment
export ANTHROPIC_BASE_URL="https://api.kunavo.com/v1"

# Right — origin only
export ANTHROPIC_BASE_URL="https://api.kunavo.com"

Kunavo経由で呼び出している場合

Kunavoで直ちに見分けるべきステータスは402と401です。402はウォレットがリクエストをカバーできないこと、つまり設定ではなく残高の問題を意味します。401は、Kunavoが使用可能なsk-kn-キーを受け取らなかったことを意味します。KunavoはAuthorization: Bearerまたはx-api-keyのどちらからでもキーを読み取るため、Claude Codeが実際に送信した内容を確認してください。ANTHROPIC_API_KEY内のキーは対話セッションで一度承認する必要があり、拒否すると無視されます。一方、ANTHROPIC_AUTH_TOKENは直ちに使用されます。どちらのステータスも理由を示すJSON本文とともに返されるため、デバッグログが決定的な手掛かりになります。失敗したリクエストには課金されません。 どの変数を設定するか、そしてその理由については、 認証変数ガイド.

よくある質問

このエラーがClaude Code自身のバグであることはありますか?

まれです。これはトランスポートレベルのラッパーです。何かが応答し、その応答が成功ではなかったという意味です。curlで再現すれば判定できます。curlでも失敗するなら、問題はクライアントではありません。

公式APIでは動作しますが、私のゲートウェイでは動作しません。

その場合、違いはツールではなく認証情報またはbase URLです。ゲートウェイが要求する認証ヘッダーと、base URLにすでに/v1が含まれていないかを確認してください。

自動的に再試行すべきですか?

ステータスを確認してからにしてください。401や404の再試行には意味がありません。429や529をバックオフ付きで再試行するのは正しい対応です。

関連ガイド

エラーの詳しい意味はエラーリファレンスをご覧ください。キーは新規登録と認証ガイドから1分で取得できます。