Claude Opus 5.5 APIの初回リクエストと400エラー対処法
BetterToken API KeyでClaude Opus 5.5へ最小リクエストを送り、Model ID、max_tokens、thinking、tool_choiceに関する400エラーを切り分ける手順です。
目次
有効なAPI Keyがあっても、Claude Opus 5.5への最初の呼び出しが400 Bad Requestになることがあります。正確なModel ID、max_tokensなどMessages APIの必須項目、thinkingの設定、tool_choiceを確認してください。max_tokensの欠落はMessages共通の検証エラーであり、Opus 5.5で新たに導入された制限ではありません。モデル固有の移行変更にはthinkingとツールの強制指定が含まれます。
この記事ではまず最小構成のリクエストを送り、400エラーを順に切り分けます。必須項目はMessages APIリファレンス、Opus 5.5固有の変更はAnthropicの移行ガイドで確認してください。下の最小リクエストで現在の接続とモデル経路を一度確認し、失敗した場合は返されたエラー本文に沿って調べます。BetterToken経由でclaude-opus-5-5を使う前に、公開日または導入日に正確なModel IDが現行カタログにあるか確認してください。
1. API Key、Base URL、Model IDを先に確認する
初回リクエストに必要なのは、自分のBetterToken API Key、Anthropic-compatible Base URL、現在利用可能なModel IDの3つです。
- BetterToken Workspaceにログインし、自分のアカウントでAPI Keyを作成します。Secret Managerまたはローカルの環境ファイルに保存し、Gitやサポートメッセージには貼り付けないでください。
- 現在のモデル・料金カタログを開き、正確なID
claude-opus-5-5が利用可能か確認します。Anthropicは日付サフィックスのない固定IDとして定義していますが、BetterTokenでの提供状況と料金は動的です。 - Keyはアプリケーションに直接書かず、環境変数で渡します。
API Keyの作成には、自分のBetterTokenアカウントが必要です。 BetterTokenアカウントを作成
画面上の操作はBetterToken Quickstartで確認できます。
2. Base URLには/v1を付けず、直接HTTPパスには付ける
Anthropic SDKのBase URLはhttps://bettertoken.ai、直接Messages APIを呼ぶ完全なURLはhttps://www.bettertoken.ai/v1/messagesです。
https://bettertoken.ai
/messagesをBase URLにしないでください。また、SDKがリソースパスを追加する場合は/v1/messagesを二重に付けないでください。現在のshellで3つの値を設定します。
read -rs ANTHROPIC_API_KEY && export ANTHROPIC_API_KEY
export ANTHROPIC_BASE_URL="https://bettertoken.ai"
export CLAUDE_MODEL_ID="claude-opus-5-5"
最初の1行だけを実行してください。ターミナルが非表示入力を待つので、その状態でAPI Keyを入力または貼り付けてEnterを押します。文字は画面に表示されません。Keyは現在のshellだけにexportされ、履歴にはsecretではなくreadコマンドだけが残ります。Keyをコマンド行に追記しないでください。
claude-opus-5-5はAnthropicがClaude Platform向けに示しているModel IDです。現在のBetterTokenカタログにこの完全一致IDがなければ、別名を推測せず、提供状況を確認してください。
3. 最初は最小構成のリクエストを送る
初回テストではtools、tool_choice、thinkingを入れず、高度な設定と接続問題を分離します。
curl --fail-with-body "$ANTHROPIC_BASE_URL/v1/messages" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d "{
\"model\": \"$CLAUDE_MODEL_ID\",
\"max_tokens\": 4096,
\"messages\": [
{\"role\": \"user\", \"content\": \"次の文字列だけを返してください: pong\"}
]
}"
このリクエストは正確なModel IDを使い、正のmax_tokensを含み、thinkingを送らず、ツール呼び出しも強制しません。この例では、Anthropicの移行例でも使われている4096をmax_tokensに設定し、adaptive thinkingと短い応答の両方に余裕を持たせています。これは診断用の出発点であり、ここで実測した保証値や本番推奨値ではありません。本番では、期待する出力、effort、コスト、レイテンシ要件に合わせて調整してください。
--fail-with-bodyを付けると、HTTP 4xxまたは5xxでもレスポンス本文を確認できます。ログを共有する前に、API Key、完全なPrompt、モデル出力、その他の機密情報を削除してください。
4. content[0]が必ずtextだと決めつけない
HTTP 200でトップレベルのtypeがmessageなら、endpointがリクエストを受理して処理したことを示します。この短答テストでは、text blockが返れば内容生成まで完了したと判断できます。adaptive thinkingと応答テキストは同じmax_tokensを使うため、有効な応答でもテキストが現れる前に上限へ達することがあります。
次を確認します。
- トップレベルの
typeがmessageで、modelが要求したモデルと一致する。 - 短答テストが正常終了した場合、
stop_reasonはend_turnで、content配列にtypeがtextのblockが1つ以上ある。 stop_reasonがmax_tokensなら、応答は有効ですが途中で切れています。max_tokensを増やして再実行してください。明示的に高いeffortを指定していて深い推論が不要なら、effortを下げる方法もあります。- text blockがなく、
stop_reasonもmax_tokensではない場合は、KeyやBase URLを変更する前に完全な応答を保存し、その停止理由を調べます。テキストがないだけで接続失敗とは判断しません。 content[0].textを固定で読むのではなく、typeでblockを選ぶ。usageにinputとoutputのToken数がある。- BetterToken Dashboardで、想定した時刻のモデル、status、input/output/cache Token、消費額を確認できる。
レスポンス構造はAnthropic公式のMessages APIリファレンスで確認でき、stop_reasonのガイドには途中で切れた応答の扱いが説明されています。Dashboardはリクエストと利用記録の照合に使えますが、完全なPromptや完全な応答が必ず保存されるとは説明しないでください。
5. Messages共通のエラーとOpus 5.5固有の変更を確認する
旧モデル名が残っている
旧IDや推測した日付付きIDをclaude-opus-5-5に置き換えます。 Anthropicは日付サフィックスのない固定IDとして定義しています。クラウド各社では独自IDを使う場合がありますが、このBetterToken Anthropic-compatible例では、現行BetterTokenカタログに表示される正確なIDを使います。
max_tokensがない
すべてのMessagesリクエストに正のmax_tokensを指定します。 項目の欠落はMessages API共通の検証エラーであり、Opus 5.5への移行で新たに生じた変更ではありません。 これはthinkingと最終テキストを含む総出力の上限です。疎通確認でも両方のための余裕が必要です。stop_reasonがmax_tokensなら、接続失敗と判断せず、上限を増やして再実行してください。
thinkingを無効化、または手動予算を設定している
最も簡単な修正は、thinkingフィールド全体を削除することです。 Opus 5.5は常にadaptive thinkingを使います。Anthropicの移行ガイドでは、次の旧形式はいずれも400で拒否されると説明されています。
{"thinking": {"type": "disabled"}}
{"thinking": {"type": "enabled", "budget_tokens": 10000}}
明示する必要がある場合は{"thinking": {"type": "adaptive"}}を使います。推論の深さはoutput_config.effortで調整し、low、medium、high、xhigh、maxが利用できます。デフォルトはmediumです。最小の疎通確認では、どちらも追加する必要はありません。
tool_choiceを強制している
tool_choiceでは{"type": "auto"}または{"type": "none"}だけを使います。 Opus 5.5は{"type": "any"}と{"type": "tool", "name": "..."}を拒否します。ツールを使う場合はautoでモデルに選ばせ、Promptで利用条件を明示し、strict tool useを有効にする前に各schemaを検証してください。
6. その他のstatusは、設定変更前に本文を読む
| Status | 最初に確認すること | 避けること |
|---|---|---|
400 | JSON、model、max_tokens、messages、thinking設定、tool_choice | Keyを理由なく交換したり、同じ不正payloadを繰り返すこと |
401 / 403 | Key全体、正しいaccountまたはkey group、Base URL | 完全なKeyをサポートへ送ること |
404 | 直接HTTPでは/v1/messagesを使っているか | /messagesを完全なrouteとみなすこと |
429 | レスポンスの待機指示、残高、limit、履歴 | 待機なしでループ再試行すること |
別providerの古い環境変数が残っている場合は、再設定前に消します。
unset ANTHROPIC_API_KEY
unset ANTHROPIC_BASE_URL
unset CLAUDE_MODEL_ID
修正後は同じ最小リクエストを再実行します。モデル、endpoint、Prompt、高度なパラメータを同時に変えると、何が解決につながったか判断できません。
7. Anthropicの定価とBetterTokenの現在価格を分ける
Anthropicの2026年9月22日付ローンチページでは、Claude Platformの料金として100万Input Tokenあたり$4、Output Tokenあたり$20、cache readsは$0.20、cache writesは$5と記載されていました。 これはAnthropicが公開したローンチ時の公式料金です。BetterTokenの現在価格は動的に変わるため、現行の料金ページを確認し、自分で送った小さなリクエストをDashboard記録と照合してください。
Thinking TokenはOutput Tokenとして課金され、max_tokensにはthinkingと最終テキストの両方が含まれます。そのため、thinkingを無効にしていた旧設定から移行すると、Promptが同じでもoutput-tokenの構成が変わることがあります。本番前に現在のBetterToken料金ページを確認し、小さなリクエストをDashboard記録と照合してください。
SDK、streaming、本番トラフィックへ進む前に、Model ID、Keyの保管、max_tokensの大きさ、block typeごとの処理、forced tool choiceがないこと、機密情報を除いたエラー本文を再確認します。続きはBetterToken API ReferenceとAnthropic公式のOpus 5.5 migration guideを参照してください。