できること
拒否を別モデルで再実行
fallbacks を "default" にすると、拒否されたリクエストを拒否カテゴリごとに Anthropic が推奨するフォールバック先モデルで、同じ API 呼び出しの中で再実行します。推奨先が無いカテゴリでは拒否のまま返ります。
再実行先を自分で指定
fallbacks には最大 3 つのモデルのリストも指定でき、拒否されると次のモデルが同じリクエストを実行します。各エントリーでは、その試行に限って max_tokens・thinking・output_config・speed を上書きできます。
応答したモデルの確認
レスポンス最上位の model フィールドに、返されたメッセージを生成したモデルが入ります。usage.iterations にはすべての試行が記録され、応答したモデルは fallback_message エントリーとして現れます。
機能解説
概要
通常は、同じリクエストを別の Claude モデルに送ると回答を得られます。fallbacks parameter (拒否時フォールバック) は、拒否されたリクエストを 1 回の API 呼び出しの中で別のモデルに再実行させる仕組みです。拒否が返る可能性のあるリクエストを扱うアプリケーションの設計に関わります。
安全分類器がリクエストを拒否した場合、レスポンスはエラーではなく通常の形で返り、stop_reason が "refusal" になります。Server-side fallback (サーバーサイドフォールバック) は、こうして拒否されたリクエストを 1 回の API 呼び出しの中で再実行します。
再実行のきっかけになるのは安全分類器による拒否だけです。要求したモデルで発生したレート制限・過負荷・サーバーエラーは、そのまま返ります。また、リストで指定したフォールバック先のモデルがレート制限や過負荷の状態にある場合、その試行は行われず、直前の拒否が返ります。
Claude Haiku 5.5 には Server-side fallback がありません。fallbacks: "default" を指定しても拒否は拒否のまま返り、フォールバック先モデルのリストを指定すると 400 エラーが返ります。
fallbacks パラメーターはオプトインで、Claude API と Claude Platform on AWS でベータとして提供されています。Message Batches API ではサポートされません。対象プランは公式のリリースノートには記載がありません。
応答の内容とストリーミング
- レスポンス最上位の
modelフィールドは、要求したモデルかフォールバック先かにかかわらず、返されたメッセージを生成したモデルを示します。 contentの中では、fallbackコンテンツブロックが、あるモデルの出力から次のモデルの出力に切り替わる位置を示します。usage.iterations配列にはすべての試行が記録されます。拒否したモデルは通常のmessageエントリー、応答したモデルはfallback_messageエントリーとして現れます。- ストリーミングのリクエストでは、再実行は同じストリーム上で行われ、受信済みの内容は無効になりません。出力の途中で拒否された場合、フォールバック先モデルは途中までの出力から続けます。
- ストリーミングでないリクエストで出力の途中に拒否された場合、レスポンスには拒否したモデルの途中までの出力が含まれず、フォールバック先モデルはその出力を文脈として使わずに回答します。
会話の継続と SDK ミドルウェア
Sticky routing (スティッキールーティング) により、フォールバックが起きた会話の以降のリクエストで fallbacks を含めると、要求したモデルを実行せずに直接そのフォールバック先モデルへ送られます。この判断は約 1 時間保持され、組織の範囲で適用されます。
サーバー側の仕組みとは別に、SDK の refusal-fallback ミドルウェアを使うクライアント側のフォールバックもあります。
BetaRefusalFallbackMiddleware(TypeScript ではbetaRefusalFallbackMiddleware()、Go ではbetafallback.BetaRefusalFallbackMiddleware()、C# ではBetaRefusalFallbackHandler、Java ではBetaRefusalFallbackInterceptor、PHP ではRefusalFallbackMiddleware) をクライアントのコンストラクターに渡し、1 つの会話のリクエスト間で 1 つのBetaFallbackStateインスタンスを共有します。- 設定後は、
client.beta.messagesを通した呼び出しで、拒否されたリクエストがプラットフォームを問わず自動で再実行されます。 - ミドルウェアは、処理するすべてのリクエストに
fallback-credit-2026-07-01ベータヘッダーを付けます。 - リストのすべてのモデルが拒否した場合、エラーを発生させずに最後の拒否レスポンスを返します。
- 受け入れたモデルは
BetaFallbackStateに記録され、同じ状態を共有する後続のリクエストはそのモデルに固定されます。 - ミドルウェアとサーバー側の
fallbacksパラメーターは、同じリクエストで両方を設定せず、どちらか一方だけを使います。
手動での再実行と Message Batches
自分で再実行を書く場合は、レスポンスに stop_reason: "refusal" があるかを確認し、model をフォールバック先モデル (例: Claude Opus 4.8) にした同じリクエストを送ります。複数ターンの会話では、元のモデルに戻さず、以降のターンもフォールバック先モデルを使い続けます。
fallbacks パラメーターは Message Batches API ではサポートされないため、バッチでは次の流れで扱います。
- バッチの結果から拒否された項目を集めます。
- 複数ターンの履歴に含まれる thinking ブロックは、そのまま残すか、入力トークンを節約するために取り除きます。
- 拒否された項目が
thinking: {"type": "between_tools"}を送っていた場合は、thinkingを省くか、フォールバック先モデルが受け付ける値にします。 - 拒否された項目を、フォールバック先モデルで新しいバッチまたは直接のリクエストとして再送信します。
使い方
fallbacks パラメーターはベータとして提供されており、"default" モードの利用には server-side-fallback-2026-07-01 ベータヘッダーが必要です。
- リクエストで
fallbacksパラメーターに文字列"default"を設定し、server-side-fallback-2026-07-01ベータヘッダーを付けて送信します。 - 拒否されたリクエストにどのモデルが応答したかを確かめるには、レスポンス最上位の
modelフィールドを確認し、usage.iterationsにfallback_messageエントリーがあるかを見ます。
利用シーン
拒否が返ったリクエストを、アプリケーション側に再試行の処理を書かずに別モデルへ回したい API 連携に向いています。
どのモデルが回答を生成したかを記録・確認したい運用に使えます。model フィールドと usage.iterations で応答したモデルを判別できます。
複数ターンの対話アプリケーションで、フォールバック後の会話を同じモデルで続けたい場面に向いています。
Message Batches で処理した結果のうち、拒否された項目だけを別モデルで再処理する場面に使えます。
ChatGPT・OpenAI の対応する機能
比較の単位となる業務: モデル拒否時のリクエストの別モデルでの自動再実行と拒否理由の把握
拒否やモデレーションの把握の仕方に違いがあります。Claude API では、安全分類器が拒否するとエラーではなく stop_reason: "refusal" の付いた通常のレスポンスが返り、stop_details フィールドで category (cyber、bio、または null) と人が読める説明を受け取れます。
Responses API では、生成リクエストに moderation オブジェクトを渡すと、モデルの入力と生成出力の両方のモデレーション結果を同じレスポンスで受け取れます。
これまでの変更
stop_details.categoryが"bio"、"frontier_llm"、"reasoning_extraction"の場合、出力前の拒否に対する課金が再開されました。その他のカテゴリの出力前の拒否は引き続き課金されず、フォールバッククレジットは変わりません。fallbacks パラメーターが
"default"モードに対応し、拒否カテゴリごとに Anthropic 推奨のフォールバックモデルを適用します。"default"モードにはserver-side-fallback-2026-07-01ベータヘッダーが必要です。Server-side fallback はベータです。オプトインの fallbacks パラメーターが Claude API と Claude Platform on AWS でベータとして提供されました (Message Batches API は非対応)。拒否されたリクエストを別のモデルで再実行し、フォールバック先モデルの料金で課金されます。出力が生成される前に拒否されたリクエストは課金されません。
Claude API で、Claude が何も出力を生成せずに
stop_reason: "refusal"を返したリクエストは課金されなくなりました。拒否レスポンスの
stop_detailsフィールドが公開ドキュメント化されました。category (cyber、bio、または null) と人が読める説明を返します。