Claude Agent SDKでOpus 5.5がAPI Error 400になる原因と対処法
claude-agent-sdk(Python)でmodel="claude-opus-5-5"を指定すると400エラーになる原因は、SDKが同梱するCLIバージョンの古さです。修正済みバージョンと回避策をまとめます。
Claude Agent SDKで「API Error 400」が起きる原因
Python版のClaude Agent SDK(claude-agent-sdk)でmodel="claude-opus-5-5"を指定すると、実行のたびに次のエラーで止まることがあります。
API Error: 400 Claude Code 2.1.202 does not support this model; version 2.1.280 or newer is required. Run 'claude update', or update the Claude desktop app, then try again.原因は明快です。claude-agent-sdkはPythonパッケージの中にClaude Code CLIの実行バイナリを同梱しており、cli_pathを指定しない限り、その同梱バイナリでセッションを起動します。Claude Opus 5.5はClaude Code CLI 2.1.280以降でしか呼び出せないモデルのため、それより古いCLIを同梱したSDKでは、モデル名を渡した瞬間にAPIが400を返します。
この問題はGitHub issue #1281として2026年9月22日に報告されました。報告者が実際にヒットしたのはSDK 0.2.111(同梱CLI 2.1.202)でしたが、issue本文にある調査によれば、この時点で公開されていた最新版0.2.157(同梱CLI 2.1.277)でも同じ制約が残っていました。
厄介なのは、このエラーメッセージがSDK内部では「失敗した」という扱いにならないことです。関連issue #1156でも指摘されている通り、モデル未対応による400はメッセージのsubtypeがsuccessのままapi_error_status=400だけが立つ形で返ります。try/exceptで例外を捕まえる実装だと、この400を見逃したままターンが「成功」したように見えてしまうため、ログを都度確認しないと気づきにくい失敗パターンです。
影響を受けるバージョンと修正済みバージョンの対応表
claude-agent-sdkはリリースごとに同梱CLIのバージョンをclaude_agent_sdk/_cli_version.pyに記録しています。PyPIで配布されているwheelファイルを直接展開して確認したところ、Opus 5.5に対応する2.1.280以降のCLIが同梱されたのは0.2.158からでした。
そもそもの発端であるCLI 2.1.280自体は、issueが報告される約4時間半前の2026年9月22日15:44 UTC(日本時間23日0:44)にnpmへ公開されていました。つまりCLI本体はすでに存在していたのに、SDK側の同梱バージョンだけが追いついていない状態だったことになります。
| SDKバージョン | 同梱CLIバージョン | Opus 5.5 | リリース日 |
|---|---|---|---|
| 0.2.111 | 同梱CLIバージョン2.1.202 | Opus 5.5使えない(400) | リリース日— |
| 0.2.156 | 同梱CLIバージョン2.1.276 | Opus 5.5使えない(400) | リリース日— |
| 0.2.157 | 同梱CLIバージョン2.1.277 | Opus 5.5使えない(400) | リリース日2026-09-18 |
| 0.2.158 | 同梱CLIバージョン2.1.280 | Opus 5.5使える | リリース日2026-09-23 |
| 0.2.159 | 同梱CLIバージョン2.1.281 | Opus 5.5使える | リリース日2026-09-23 |
| 0.2.160 | 同梱CLIバージョン2.1.283 | Opus 5.5使える | リリース日2026-09-25 |
Claude Code CLI側でOpus 5.5が追加されたのは2.1.280(2026年9月22日リリース)です。公式changelogには「Added Claude Opus 5.5(claude-opus-5-5)、now the default Opus model」と明記されており、この版からOpus系列の既定モデルがOpus 5.5に切り替わっています(料金や破壊的変更の詳細はClaude Opus 5.5とはにまとめています)。SDK側の0.2.158はその翌日に、CLIの同梱バージョンを2.1.280へ引き上げる形でリリースされました。
つまり、issueが報告された2026年9月22日の段階では確かに「同梱していない」状態でしたが、その1日後にリリースされた0.2.158で修正されています。pip installで入れたパッケージが古いままロックされていたり、requirements.txtやDockerイメージのビルドキャッシュで0.2.157以前が固定されていたりする環境だけが、この400に引き続き遭遇することになります。
同梱バイナリの仕組み — プラットフォームごとに別wheelを持つ
claude-agent-sdkはPure Pythonのwheelを1つ配るのではなく、macosx_11_0_arm64 / macosx_11_0_x86_64 / manylinux_2_17_aarch64 / manylinux_2_17_x86_64 / win_amd64の5種類のプラットフォーム別wheelをPyPIに公開しています。それぞれのwheelがOS・CPUアーキテクチャに応じたClaude Code CLIの実行バイナリを内包する構成のため、同じバージョン番号のリリースでも「wheelのビルドが一部プラットフォームだけ遅れる」といった事態が起こり得ます。
バージョン番号の一致だけでなく、自分の環境向けのwheelが正しく最新化されているかまで確認したい場合は、pip download --no-deps claude-agent-sdk==<version>で対象プラットフォームのwheelを取得し、中身の_cli_version.pyを直接開くのが最も確実です。
対処法 — SDKを0.2.158以降にアップグレードする
最も単純な対処は、claude-agent-sdkを0.2.158以降に上げることです。
pip install --upgrade "claude-agent-sdk>=0.2.158"
python -c "from claude_agent_sdk._cli_version import __cli_version__; print(__cli_version__)"2行目の確認コマンドで表示されるバージョンが2.1.280以上であれば、model="claude-opus-5-5"を渡しても400にはなりません。uvでパッケージを管理している場合はuv pip install --upgrade、pyproject.tomlでバージョンを固定している場合は上限指定を>=0.2.158に緩めてからロックファイルを更新してください。
CI環境やDockerイメージでは、ベースイメージのビルド時にpipキャッシュが古いwheelを再利用してしまうケースがあります。pip install --no-cache-dir --upgrade claude-agent-sdkでキャッシュを無視して入れ直すと、同梱CLIのバージョンが上がっているのに気づかないまま同じエラーで悩む時間を減らせます。
アップグレードできないときの回避策
社内の依存関係管理の都合ですぐにアップグレードできない場合、issueの報告者が提示した回避策は2つあります。
- Opus 5.5を使わずOpus 5を指定する:
model="claude-opus-5"のように旧モデルを明示的に指定すれば、古い同梱CLIでもエラーは起きません。新モデルの機能が今すぐ必須でないなら、これが最も安全です。 cli_pathでホスト側のCLIを指定する:ClaudeAgentOptions(cli_path="/path/to/claude")のように、npm install -g @anthropic-ai/claude-codeなどで別途インストールした2.1.280以降のCLIバイナリを直接指定すれば、SDK同梱バイナリを使わずに済みます。claude --versionでホスト側のバージョンを確認し、パスはwhich claudeで取得したものをそのまま渡すのが手早い方法です。ただしこの構成はSDKがテストした組み合わせから外れるため、issue本文でも、リリースされていないCLIに対してSDKを動かすことになる点が注意点として挙げられています。バージョン間の互換性が保証されないので、本番環境で使う前にステージングで一通りの動作確認を挟むのが無難です。
どちらの回避策も、根本解決である「SDKを0.2.158以降に上げる」の代替にすぎません。恒久対応としては依存関係のアップグレードを予定に入れておくことをおすすめします。query()とClaudeSDKClientのどちらを使う実装でもClaudeAgentOptionsの扱いは共通なので、実装方式の選び方はquery() vs ClaudeSDKClient — Python Agent SDKの使い分けを参照してください。
GitHub Issueは公開時点でまだopenのまま
紛らわしい点として、issue #1281は2026年9月28日の公開日を過ぎてもGitHub上のステータスは「open」のままです。2026年9月25日には別の開発者が、自分のプロジェクトでも新しいOpusが使えないとコメントを寄せていますが、そのコメントが投稿された時点ではすでに0.2.158(9月23日リリース)が公開済みでした。
issueのopen/closedは修正の有無と連動しないことがあるため、PyPIのリリース履歴と同梱CLIバージョンで確かめるほうが確実です。
同じ制約は次の新モデルでも起こり得る
今回はOpus 5.5固有の問題ではなく、「新モデルの呼び出しには一定バージョン以上のCLIが必要」という仕組み自体に起因します。Opus 5.5では2.1.280未満のCLIが400で拒否されたため、今後リリースされる新しいモデルでも同じ型の制約が起き、SDKの同梱CLIが追いついていなければ同種の400が再発する可能性があります。claude-agent-sdkを固定バージョンで運用しているプロジェクトでは、新モデルの発表があったタイミングで_cli_version.pyの値を確認し、必要なら早めにアップグレードしておくと同じ切り分けを繰り返さずに済みます。
CI上で定期的にpython -c "from claude_agent_sdk._cli_version import __cli_version__; print(__cli_version__)"を実行し、社内で許可している最小バージョンと比較するチェックを組んでおくのも有効です。依存関係の自動更新ツール(Dependabotなど)を使っている場合でも、claude-agent-sdkのバージョン更新(0.2.157→0.2.158のような第3桁の更新を含む)は同梱CLIの入れ替えを伴うため、通常のライブラリ更新よりも優先度を上げて確認する価値があります。
まとめ
claude-agent-sdkでOpus 5.5を指定すると発生する400エラーは、SDKが同梱するClaude Code CLIのバージョンが古いことが原因です。CLI 2.1.280以降を同梱したSDK 0.2.158(2026年9月23日リリース)以降ではすでに解消されているため、まずは手元のclaude-agent-sdkのバージョンを確認し、古ければアップグレードしてください。アップグレードがすぐにできない場合は、旧モデルへの固定かcli_pathでの外部CLI指定で当座をしのぐことになります。GitHub issueの見た目のステータスに惑わされず、PyPIの実リリースで確認する習慣をつけておくと、同種のバージョン起因のエラーに早く気づけます。
claude-agent-sdkのパッケージ配布に関するトラブルは今回が初めてではなく、wheelそのものが公開されずインストールに失敗する障害も過去に起きています(詳細はclaude-agent-sdkのwheelが公開されず、pip installに失敗する原因と対処法)。大きな応答でSDKが止まるJSONDecodeErrorなど、他のPython版特有のつまずきは大きいメッセージでJSONDecodeErrorが発生し停止する原因と対処にまとめています。