サーバー側フォールバックとフォールバッククレジット
Opus 5 以前、Claude の拒否は あなたの 問題でした。分類器が拒否すると、幸せそうな HTTP 200 の上に stop_reason: "refusal" が返ってきて、リトライはあなたの責任 — 別のモデルを選び、履歴全体を送り直し、新しいモデルには別のキャッシュ名前空間があるためプロンプトキャッシュが溶けるのを見つめ、同じ会話が二重請求される理由を経理チームに説明することになります。
Opus 5 のローンチ(2026年7月24日)では、これらすべてを 1回の API 呼び出しに集約する 2つの関連ベータ機能 が出荷されました:
- サーバー側フォールバック (
server-side-fallback-2026-07-01) —fallbacks: "default"を設定すると、API は同じラウンドトリップ内で、拒否カテゴリに対して Anthropic が選択したモデルで拒否されたリクエストをリトライします。自分で最大3つのターゲットを指定することもできます。 - フォールバッククレジット (
fallback-credit-2026-07-01) — すべての拒否に添付される一度きりのクレジットトークンで、リトライ時にエコーすると、会話が最初からフォールバックモデル上にあったかのようにリトライが再課金されます。新しいモデルでのキャッシュ書き込みがキャッシュ読み取りになります。
2つのベータは独立しています — すでにクライアント側のリトライロジックがあるならフォールバッククレジットだけを使うこともできますが、このリリースの主眼は、ほとんどの場合それが不要になることです。このページでは、コピペで済むワンライナーから本番を刺すコーナーケース(tool_use の途中でのストリーミング、スティッキールーティング、output_config.format が継続シェイプをロックアウトすること)まで、両方を順に解説します。
- ワイヤー上で拒否が実際にどのように見えるか(JSON、5つの停止カテゴリ、トークンが課金されるタイミング)
- フォールバックの3つの方法(サーバー側 / SDK ミドルウェア / 手動生 HTTP)と、それぞれがいつ正解になるか
- ワンライナー: fallbacks: 'default' とベータヘッダー、そしてレスポンスシェイプに何が追加されるか
- 明示的リストとデフォルトモード、allowed_fallback_models、そしてなぜ順序が重要か
- フォールバッククレジットがプロンプトキャッシュの二重支払いを止める仕組み — トークン、2つのリトライボディシェイプ、usage.iterations に何が表示されるべきか
- すべての手動リトライが実装しなければならない3段階の拒絶ラダー(継続 → 変更なしボディ → トークン放棄)
- 動作しない場所: Message Batches、Bedrock/GCP/Foundry のギャップ、Sonnet 5、tool_use 途中のストリーミング拒否、output_config.format + サーバーツール
★ Insight ─────────────────────────────────────
ここで内在化すべき Anthropic 固有の指紋が2つあります。まず、分類器の拒否は stop_reason: "refusal" を伴う 200 です — 4xx ではありません。エラーハンドラが非 2xx を「リトライ」として扱うなら、拒否は静かに無視されます。200 を「成功」として扱うなら、空のコンテンツを静かに表示します。どちらも望むものではありません。次に、プロンプトキャッシュは モデルごと です。そのため、別の Claude モデルへの素直なリトライは、会話プレフィックスがバイト単位で同一でも、常にキャッシュ書き込みコストを最初から支払います。クレジットトークンはその穴を塞ぐピースであり、fallback-credit がサーバー側フォールバックとは別のベータとして存在する理由です。
─────────────────────────────────────────────────
拒否が実際にどう見えるか
分類器の拒否は、空の content 配列と stop_reason: "refusal" を持つ通常のメッセージレスポンスです:
{
"id": "msg_01XFUDYJgAACzvnptvVoYEL",
"type": "message",
"role": "assistant",
"model": "claude-fable-5",
"content": [],
"stop_reason": "refusal",
"stop_details": {
"type": "refusal",
"category": "cyber",
"explanation": "This request was declined because it could enable cyber harm."
},
"usage": {
"input_tokens": 412,
"output_tokens": 0
}
}
stop_details.category は5つの値のいずれかです。2つは、拒否が名前付きカテゴリにマッピングされない場合 null になります(プレースホルダーではなく恒久的な null):
category | 何がトリガーしたか |
|---|---|
"cyber" | サイバー被害を可能にする可能性のあるリクエスト(マルウェア、エクスプロイト開発)。良性のサイバーセキュリティ作業でも発火することがあります。 |
"bio" | 生物学的被害を可能にする可能性のあるリクエスト。有益な生命科学の作業でも発火することがあります。 |
"frontier_llm" | 競合する AI モデルの開発を支援する可能性のあるリクエスト、Anthropic の商用条件により制限されています。 |
"reasoning_extraction" | モデルに内部推論を応答テキストで再現するよう要求するリクエスト。構造化された形式で推論を取得するには 適応的思考 を使ってください。 |
"general_harms" | その他の被害領域;良性の作業でも時折発火します。 |
出力前 に到着する拒否は課金されません(usage にトークンが表示されますが課金されません);レート制限にはカウントされます。ストリーム途中の拒否 は入力とすでにストリーミングされた出力を通常レートで課金します。いずれにせよ、部分的な出力は不完全とみなして破棄してください — 安全分類器はモデル自身の軌道で発火しました。
explanation 文字列はバージョン間で安定していません。表示してください、パースしないでください。
フォールバック方法を選ぶ
3つの方式があります。自分に合う行を選んでください:
| あなたの状況 | 使うもの | 理由 |
|---|---|---|
| Claude API、最もシンプルなものが欲しい | サーバー側フォールバック with fallbacks: "default" | 1リクエスト、1レスポンス。API がフォールバックを選択し、クレジットを適用します。 |
| 任意のプラットフォーム(Bedrock、Vertex、Foundry)で Anthropic SDK 使用 | SDK ミドルウェア (BetaRefusalFallbackMiddleware) | クライアントで一度設定。リトライ + クレジットは自動。Bedrock / Vertex / Foundry では今日これが唯一の道。 |
| 生 HTTP、カスタムリトライロジック、または非 Anthropic SDK | 手動リトライ with fallback-credit-2026-07-01 ヘッダー | 完全な制御。3段階ラダーを自分で実装。 |
サーバー側フォールバックと SDK ミドルウェアはフォールバッククレジットを自動的に適用します。リトライを自分で構築する場合にのみクレジットトークンダンスを考える必要があります。
ワンライナー: fallbacks: "default"
機能全体を1リクエストで:
デフォルトモードでのサーバー側フォールバック
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: server-side-fallback-2026-07-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-fable-5",
"max_tokens": 1024,
"fallbacks": "default",
"messages": [{"role": "user", "content": "Hello, Claude"}]
}'Fable 5 が拒否し、拒否カテゴリに Anthropic 推奨のフォールバックがあれば、API は同じ呼び出しで同じリクエストをそのモデルで実行します。1つのレスポンスが返ってきて、トップレベルの model フィールドは実際に回答したモデルを示します。カテゴリに 推奨 フォールバックが ない 場合、拒否は残り、fallbacks を未設定にしたのと同じように拒否がそのまま返ってきます。
「default」が実際に行っていること: API はリクエストされたモデルのサーバー定義ルーティングテーブルを読み、拒否カテゴリに基づいてそこからフォールバックを選択します。Anthropic がそのテーブルを更新すると(カテゴリに新しいフォールバックを追加、Opus 5 を Fable 5 のデフォルトターゲットに昇格、など)、新しいルーティングを無料で手に入れられます。それが売り文句です: 1ヶ月後には間違いになるフォールバックモデルリストを保守するのをやめる。
ピン留めが必要な場合の明示的リスト
自分でルーティングを制御したい場合は、"default" の代わりにリストを渡します。最大3エントリ、順に試されます:
response = client.beta.messages.create(
model="claude-fable-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Claude"}],
fallbacks=[
{"model": "claude-opus-5"}, # try Opus 5 first
{"model": "claude-opus-4-8"}, # then Opus 4.8
],
betas=["server-side-fallback-2026-07-01"],
)
読まないとつまずくルール:
- すべてのターゲットは、リクエストされたモデルに対して許可されたフォールバックでなければなりません。 許可されたターゲットのリストは、
server-side-fallback-2026-07-01ベータヘッダーが設定されているとき、Models API の各モデルエントリでallowed_fallback_modelsとして公開されます。(Claude Fable 5 の場合、執筆時点でそのリストはclaude-opus-4-8とclaude-opus-5です。) - エントリは互いに、そしてリクエストされたモデルとも別のものでなければなりません。
- 各エントリはそのアテンプトについてのみ
max_tokens、thinking、output_config、およびspeedを上書きできます。これが「フォールバックでは低い効率で実行する」と言う方法で、メインリクエストに触れずに済みます。 - リクエストは、指名されたすべてのモデルに対して直接リクエストとして有効でなければなりません。 フォールバックがリクエストの使用する機能をサポートしていない場合(例: フォールバックモデルが受け入れないベータ)、API はフォールバックアテンプトだけでなくリクエスト全体を事前に拒否します。
- 分類器の拒否のみがフォールバックをトリガーします。 リクエストされたモデルでのレート制限、過負荷、およびサーバーエラーはそのまま返ってきます。
"default" モードは server-side-fallback-2026-07-01 の下でのみ動作します。明示的リスト形式は古い server-side-fallback-2026-06-01 ヘッダーの下でも動作します。
レスポンスに含まれるもの
レスポンスは、2つの追加を伴う通常のメッセージです:
- トップレベルの
modelフィールドは、返されたメッセージを生成したモデル(リクエストまたはフォールバック)を示します。 fallbackコンテンツブロックは、あるモデルの出力が次のモデルに引き継がれる各ポイントをマークします:{"type": "fallback", "from": {"model": ...}, "to": {"model": ...}}。出力前の拒否では、このブロックが 最初の コンテンツブロックです。ストリーム途中のフォールバックでは、引き継ぎポイントに現れます。usage.iterationsはすべてのアテンプトを記録します。拒否したモデルはmessageエントリとして表示され(トークンは報告されますが課金されません)、ターンを提供したモデルはfallback_messageエントリとして表示されます。
出力前の拒否の後、デフォルトルーティングが Opus 4.8 を選択した場合の例:
{
"id": "msg_01XFUDYJgAACzvnptvVoYEL",
"type": "message",
"role": "assistant",
"model": "claude-opus-4-8",
"content": [
{ "type": "fallback", "from": { "model": "claude-fable-5" }, "to": { "model": "claude-opus-4-8" } },
{ "type": "text", "text": "Hi! How can I help you today?" }
],
"stop_reason": "end_turn",
"stop_details": null,
"usage": {
"input_tokens": 412,
"output_tokens": 264,
"iterations": [
{ "type": "message", "model": "claude-fable-5", "input_tokens": 535, "output_tokens": 0 },
{ "type": "fallback_message", "model": "claude-opus-4-8", "input_tokens": 412, "output_tokens": 264 }
]
}
}
チェーンのすべてのモデルが拒否した場合、レスポンスは最後のモデルの拒否で、それより前のホップごとに message エントリが、最後のものに fallback_message エントリが付きます。
会話を継続する
次のターンでは、受け取ったままアシスタントのコンテンツをエコーします。ミッド出力フォールバックの後、受け取った content には引き継ぎ前に拒否モデルが生成したブロックが含まれる場合があります。何を保持し何を落とすか:
| ブロックタイプ | 次のターンで |
|---|---|
fallback | 保持 して、そのままの位置に。位置は周囲の thinking ブロックの検証に使用されます。移動または削除 → 400。 |
text | 保持。 |
最後の fallback ブロックの 後 の任意のブロック | 保持。 |
最後の fallback の 前 の thinking、redacted_thinking、connector_text | 落とす。 |
最後の fallback の 前 のクライアント側 tool_use | 落とす。 |
最後の fallback の 前 の server_tool_use | 結果とペアの場合は保持。マッチする結果がない場合は落とす。 |
メンタルモデル: フォールバックモデルで実行されたすべては残り、拒否モデルの裏付けのない中間作業は消えます。
スティッキールーティング
会話がフォールバックすると、API はそれを記憶します。その会話に関して fallbacks パラメータも含む後のリクエストは、リクエストされたモデルを完全にスキップして 直接 フォールバックモデルに行きます。これにより、常に拒否することが決まっていたセッションのすべてのフォローアップで拒否税を払うことを止めます。
知っておくべきプロパティ:
- 約1時間保持、あなたの組織にスコープされます。
- 会話プレフィックスのコンテンツハッシュ + それを提供したモデル として保存されます。メッセージのコンテンツ自体はサーバー側に保存されません。
- ベストエフォート — コードはリクエストされたモデルがいつでも再試行されうる状況を処理しなければなりません。
- スティッキー配信のターンには
fallbackコンテンツブロックがありません(そのターンには何も拒否しなかった)。usage.iterationsにfallback_messageがあること、リクエストされたモデルのmessageエントリがないこと、およびレスポンスのmodelフィールドで識別します。
ストリーミングでは、ルーティング決定はストリームが開く前に行われるため、message_start はすでにフォールバックモデルの ID を運びます。
ストリーミングの動作
リトライは 同じストリーム 上で発生します — すでに受け取ったものは無効化されません。
出力前の拒否
message_startはフォールバックモデルを指名します。fallbackブロックが最初のコンテンツブロックです。- 最初のバイトまでの時間は拒否されたアテンプトを含みます(
message_startはフォールバックの開始を待つため)。
出力途中の拒否
- 現在開いているコンテンツブロックが閉じられます。
fallbackブロック(content_block_start+content_block_stop、デルタなし)が境界をマークします。- フォールバックモデルは部分出力から続行します。
textブロックのみ が部分出力からフォールバックモデルへのコンテキストとして渡されます。他のブロックタイプはcontentに残りますがフォールバックには見えません。 message_startはすでにリクエストされたモデルを指名しているので、提供するモデルはfallbackブロックのto.modelおよび最終message_deltaのusage.iterationsのfallback_messageエントリから読んでください。
非ストリーミング、ミッド出力拒否: レスポンスは拒否モデルの部分出力を 省略 し、フォールバックはゼロから回答します。結果は出力前の拒否のように見えます — fallback ブロックが最初 — 拒否されたアテンプトのトークンは usage.iterations にまだ記録されます。これはストリーミングとの真の動作差であり、ストリームで行ったサイジングテストは、非ストリーミングに切り替えた際のコストを過小予測することがあります。
フォールバッククレジット: 目に見えない再課金
プロンプトキャッシュはモデルごとです。Fable 5 があなたの会話プレフィックスの 400k トークンをキャッシュして拒否した場合、Opus 5 での素直なリトライは 400k すべてを Opus 5 のキャッシュに最初から書き込まなければなりません — そして キャッシュ書き込みはキャッシュ読み取りよりコストがかかります。フォールバッククレジットはそのエクストラコストを削除します。拒否は 一度きりのクレジットトークン を運び、リトライ時にトークンをエコーすると、リトライは会話が最初からフォールバックモデル上にあったかのように課金されます。
サーバー側フォールバックと SDK ミドルウェアはクレジットを自動的に適用します。生 HTTP でリトライを構築する場合にのみトークン自体を考える必要があります。
手動フローの4ステップ
- 最初のリクエストを anthropic-beta: fallback-credit-2026-07-01 で送信します。(server-side-fallback-2026-07-01 は同じフィールドを付与し、古い fallback-credit-2026-06-01 ヘッダーもまだ受け入れられます。)
- 拒否時、stop_details には fallback_credit_token(不透明な文字列)と fallback_has_prefill_claim(ブール値)が含まれます。拒否に対してクレジットがない場合、両方とも null です。
- 拒否されたリクエストボディから開始。model をフォールバックモデルに設定し、トークンをトップレベル fallback_credit_token として追加します。fallback_has_prefill_claim が false でない場合、拒否されたレスポンスのコンテンツをエコーするアシスタントメッセージを1つ追加します — リトライは拒否モデルが停止したところから続行し、完了したサーバーツール呼び出しは再実行されません。false の場合は、変更しないボディを再送信します。
- リトライはトークンを引き換えるために fallback-credit-2026-07-01 ヘッダーを運ばなければなりません。ベータヘッダーは2つのリクエスト間で一致しなければなりません(以下の厳格マッチルールを参照)。
すべての手動リトライが必要とする拒絶ラダー
ほとんどのリトライは最初のアテンプトで引き換えます。そうでない場合、API は次に何を試すべきかを教える 400 を返します。3つの段すべてを実装してください:
- 最も一般的な原因は、output_config.format またはツール使用を強制する tool_choice が継続シェイプを除外することです。追加されたアシスタントメッセージを落とし、トークンを維持します。
- トークン自体が拒絶されました。トークンなしでリトライします。クレジットは放棄されます;リトライ自体は通ります。
- トークンレスなリトライはそれらのツールを再実行し再課金します。コストまたはエラーを呼び出し元に表面化してください。
- 「redemption temporarily unavailable」は一時的なエラーであり、リトライシェイプに対する判決ではありません。5分ウィンドウ内で同じトークンで同じリクエストを再試行してください。ラダーを下がらないでください。
正確に一致しなければならないフィールド(厳格マッチルール)
引き換えは、リトライを拒否されたリクエストと比較します。プロンプトを形作るすべてのフィールドは一致しなければなりません:
| ルール | フィールド |
|---|---|
| 正確に一致 | system、messages、tools、tool_choice、thinking、cache_control、および(使用時)output_config、mcp_servers、context_management、container |
| リトライで変更可 | model、max_tokens、stop_sequences、temperature、top_p、top_k、stream、metadata、service_tier |
継続シェイプは messages マッチの唯一の例外です: messages の末尾にアシスタントメッセージをちょうど1つ追加します。
2つの微妙なトラップ:
- ベータヘッダーも一致しなければなりません。 2つのリクエストの片方だけにあるベータヘッダーは、ボディが同一でもマッチを失敗させます。400 は
request body ... does not matchと言いますが、これはボディの差異のように読めますが実際にはヘッダーの差異です。2つのファミリーは免除されます:server-side-fallback-*(リトライでfallbacksパラメータとともに落とす)、およびfallback-credit-*(両方に維持する)。 - リトライで前のターンの
thinkingまたはredacted_thinkingブロックを剥がさないでください、通常のトークンレスなリトライは通常剥がしますが。ボディは拒否リクエストと一致しなければなりません;サーバーはそれらのブロックを自分で処理します。
クレジットが実際に適用されたかを確認する
返金はリトライの usage で確認できます。トークンなしで同じリクエストが報告するものと比較して、cache_creation_input_tokens は 低く、cache_read_input_tokens は 同じ量だけ高く なります。ゼロシフトはトークンが受け入れられたが再課金するものがなかったことを意味します(例: リトライモデルのキャッシュがすでに温まっていた)。
トークンのスコープと寿命
- 拒否を受け取った組織とワークスペースからのみ引き換え可能(Foundry でも)。ワークスペースがない Bedrock と Vertex では、トークンはプラットフォームの呼び出し元 ID にバインドされます。
- 拒否から5分後に期限切れ。それ以降はトークンなしでリトライします。
- ステートレス — サーバーは何も保存せず、検査や取り消しのエンドポイントはありません。
動作しない場所(または異なる動作をする場所)
- fallbacks パラメータは Message Batches API でサポートされていません(それを含むバッチアイテムはエラー結果として返ってきます)。Message Batches での拒否はクレジットトークンを発行せず、バッチリクエストで渡されたトークンは受け入れられますが無視されます。バッチが解決した後にクライアント側のリトライにフォールバックしてください。
- fallbacks パラメータは Amazon Bedrock、Google Cloud、Microsoft Foundry では利用できません — 代わりに SDK ミドルウェアを使用してください。フォールバッククレジット自体は4つのプラットフォームすべてで動作します。
- Fable 5 と Opus 5 のみが現在、分類器の拒否を生成する分類器を含んでいます。Sonnet 5 の拒否は stop_reason: 'refusal' なしの通常の end-turn レスポンスとして到着し、フォールバックすべきものは何もありません。
- その1つの特定のケース(ストリーミング、未完了のクライアント / サーバー / MCP ツール呼び出し中の拒否)はサーバー側で再試行されません。拒否は直接返ります。fallback-credit-2026-07-01 が設定されている場合、拒否はまだ部分レスポンスを続行することで引き換え可能なクレジットトークンを運びます。非ストリーミングリクエストは影響を受けません。
- これは、クレジットトークンをどちらのボディシェイプでも引き換えできない唯一の組み合わせです: 継続シェイプは format/tool_choice によって除外され、変更なしボディは完了したサーバーツールが再実行して再課金するため除外されます。トークンを破棄;トークンなしでリトライし、コストを呼び出し元に表面化してください。
- フォールバックモデルがレート制限または過負荷の場合、フォールバックアテンプトは行われず、代わりに先行する拒否が返されます。stop_details.recommended_model は直接リトライするモデルを指名します(ヒント、保証ではない;利用不可時は null)。予想される拒否ボリュームに対してフォールバックのレート制限をサイジングしてください、さもなくば負荷下でフォールバックは拒否に劣化します。
本番 Claude アプリのための実践的なセットアップ
- Anthropic が推奨フォールバックを持つカテゴリに対するゼロエフォート保護。ルーティングテーブルが自動的に更新されるため、手動アプローチのスーパーセットです。
- クライアントで一度、フォールバックリストで BetaRefusalFallbackMiddleware を設定します。同じ会話のリクエスト間で1つの BetaFallbackState を共有し、フォローアップが受け入れたモデルにピン留めされ続けるようにします。ミドルウェアはそれが処理するすべてのリクエストで fallback-credit-2026-07-01 を送信します。
- スティッキールーティングは、セッションでのターン N+1 がターン N とは異なるモデルで静かに実行される可能性があることを意味します。分析でコストや品質をリクエストされたモデルに帰属させると、間違ったことになります。response.model を読み、usage.iterations に fallback_message エントリが含まれる場合、それもログしてください。
- stop_details.category フィールドは、ユーザーがポリシーの壁にぶつかっているシグナルとして最も近いものです。'cyber' カテゴリの上昇は必ずしも悪意のあるユーザーを意味しません — サイバーセキュリティ作業は正当にトリップします — が、UI 注記またはカテゴリ固有のフォールバックをどこに置くかを教えてくれます。
- これに当たる1つの 400 ケース: サーバーツールがすでに実行された後の拒否 + output_config.format または強制された tool_choice。トークンは引き換え不可で、素直なリトライは web_search / code_execution / MCP ツール呼び出しを再実行(および再課金)します。エラーを表面化してください。
他のプロバイダーがすることとの比較
| プロバイダー | 1回の API 呼び出しでの自動拒否 → フォールバック? |
|---|---|
| Anthropic Claude Fable 5 / Opus 5 | はい — fallbacks: "default" + クレジットトークン。スティッキールーティングがフォローアップを運びます。 |
| Anthropic Claude Opus 4.8 | クレジットトークンのみのバリアントのターゲットモデルでした(2026年6月ベータ)。サーバー側デフォルトモードは Opus 5 で登場。 |
| OpenAI GPT-5 / 6 | ファーストパーティのサーバー側フォールバックなし。refusal finish_reason を自分で検出し、クライアント側で別のモデルにリトライします; Responses API は allowed_fallback_models の相当物を公開しません。 |
| Google Gemini 3 | 拒否は SAFETY ブロック理由として現れます; リトライはファミリー内の別のモデルに対してクライアント側で行います。 |
| AI ゲートウェイ (LiteLLM、Portkey、OpenRouter) | プロバイダー非依存のルーターレベルのフォールバックは存在しますが、各アテンプトで独立に課金されます — プロバイダーごとのキャッシュクレジット相当物はありません。AI ゲートウェイ を参照。 |
クロスモデルハーネスはまだクレジットトークンを使用できます: モデル固有ですが、コンセプト(リトライで不透明なトークンをエコーし、再課金される)はプロバイダーごとに機能検出できます。
一般的な失敗モードとその意味
- 空の
content配列が返ってきて UI が空白のメッセージを表示する。 レンダリング前にstop_reason: "refusal"をチェックし忘れました。検出して、カテゴリ固有のメッセージを表示するかフォールバックを配線してください。 - リトライが
request body ... does not matchで 400 し続ける。 ヘッダーの不一致の可能性が最も高いです。ボディだけでなく、2つのリクエスト間のすべてのanthropic-betaヘッダーを差分してください。 - SDK ミドルウェアを使用し、同じモデルが二重課金される。 同じ会話のリクエスト間で
BetaFallbackStateを共有し忘れました。スティッキールーティングはフォローアップをピン留めするために状態を必要とします。 - Fable 5 にいるつもりだったのに、コストレポートが Opus 4.8 の大きなジャンプを示す。 拒否後、スティッキールーティングがフォローアップを運びました。ログで
response.modelとusage.iterationsを見てスプリットを確認してください。 - リトライでベータヘッダーを忘れて 引き換え失敗になりました。リトライはトークンを引き換えるために
fallback-credit-2026-07-01を必要とします。 - バッチジョブがフォールバックを黙って落とす。 バッチは
fallbacksとクレジットトークンを無視します。バッチ完了後にリトライしてください。
Check yourself
0/7ソースと参考資料
- Refusals and fallback — Claude Platform Docs (
fallbacks、"default"モード、スティッキールーティング、ストリーミング動作の決定版リファレンス; 8-SDK 全コードサンプルを含む) - Fallback credit — Claude Platform Docs (クレジットトークンフロー、2つのボディシェイプ、拒絶ラダー、厳格マッチルール、5分 TTL)
- What's new in Claude Opus 5 (
"default"モードとデフォルト思考をリリースした2026年7月24日のローンチ) - Claude Platform release notes (
server-side-fallback-*およびfallback-credit-*ベータヘッダーのリリース履歴) - Prompt caching — Claude Platform Docs (なぜキャッシュ書き込みが読み取りよりコストがかかるか、およびなぜモデルごとのキャッシュ名前空間がクレジットトークンを必要とするか)
- Stop reasons and fallback — Claude Platform Docs (
stop_reason値の完全リスト、うち1つは"refusal") - Fallback and billing cookbook (コスト会計を含むエンドツーエンドの動作例)
- Models API —
allowed_fallback_models(モデルごとの許可されたフォールバックターゲットの正式ソース; フィールドを見るにはベータヘッダーを設定) - 関連(このサイト): 安全性、拒否、フォールバック, プロンプトキャッシング, エラーとレート制限, AI ゲートウェイ: LiteLLM、OpenRouter、Portkey