Os caches de prompt são por modelo. Quando o Claude Fable 5 recusa uma solicitação e você tenta novamente em outro modelo, o prefixo da conversa que já estava em cache para o Claude Fable 5 precisa ser gravado do zero no cache do novo modelo. Gravações de cache custam mais do que leituras de cache. O "fallback credit" (crédito de fallback) remove esse custo extra. A recusa carrega um token de crédito, você ecoa o token na nova tentativa, e a nova tentativa é cobrada como se a conversa tivesse estado no novo modelo desde o início.
Você só precisa desta página quando constrói a nova tentativa por conta própria: sobre HTTP bruto ou com lógica de retry personalizada. O fallback do lado do servidor e o middleware do SDK aplicam o crédito de fallback automaticamente. Se você usa qualquer um deles, pule esta página.
Recusas e fallback cobre a detecção de recusas e a escolha de uma abordagem de fallback. Cache de prompt explica leituras de cache e gravações de cache se esses termos forem novos para você.
Opte por participar com o cabeçalho beta
Envie a solicitação que pode ser recusada com o cabeçalho anthropic-beta: fallback-credit-2026-07-01. O cabeçalho server-side-fallback-2026-07-01 também concede os mesmos campos, e o cabeçalho anterior fallback-credit-2026-06-01 continua sendo aceito e concede os mesmos campos.
Leia dois campos da recusa
Em uma recusa, stop_details inclui dois campos:
fallback_credit_token: uma string opaca que representa o crédito.fallback_has_prefill_claim: um booleano que indica qual formato de corpo usar na nova tentativa.Ambos são null quando nenhum crédito está disponível para a recusa.
Construa a nova tentativa
Comece a partir do corpo da solicitação recusada. Defina model como o modelo de fallback e adicione o token como o parâmetro de nível superior fallback_credit_token. Escolha o formato do corpo na tabela abaixo.
Envie a nova tentativa com o mesmo cabeçalho
Envie a nova tentativa com o mesmo cabeçalho beta fallback-credit-2026-07-01. A nova tentativa precisa do cabeçalho para resgatar o token.
O campo fallback_has_prefill_claim indica se a nova tentativa pode continuar a saída parcial do modelo recusado em vez de começar do zero:
fallback_has_prefill_claim | Corpo da nova tentativa |
|---|---|
true | O corpo da solicitação recusada, inalterado, mais uma mensagem de assistente anexada cujo content ecoa o content da resposta recusada. O modelo da nova tentativa continua a resposta de onde o modelo recusado parou, e as chamadas de ferramentas de servidor concluídas não são reexecutadas. |
false | O corpo da solicitação recusada, inalterado. |
O exemplo a seguir faz uma solicitação que pode ser recusada e resgata o token de crédito em uma nova tentativa contra o Claude Opus 4.8. Quando uma tentativa de retry é rejeitada, o exemplo degrada através da escada de rejeição: a sequência de formatos de retry progressivamente mais simples coberta em Quando uma nova tentativa é rejeitada.
client = Anthropic()
request = {
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello, Claude"}],
}
def send(model: str, body: dict[str, object]) -> BetaMessage:
return client.beta.messages.create(
model=model, betas=["fallback-credit-2026-07-01"], **body
)
response = send("claude-fable-5", request)
if (
response.stop_reason == "refusal"
and (details := response.stop_details)
and (token := details.fallback_credit_token)
):
exact_body = request | {"fallback_credit_token": token}
# Prefira a forma de continuação, a menos que a afirmação seja False
if details.fallback_has_prefill_claim is not False:
echoed = [block.model_dump() for block in response.content]
match echoed:
case [*_, {"type": "text"} as final_block]:
final_block["text"] = final_block["text"].rstrip()
attempt = exact_body | {
"messages": [
*request["messages"],
{"role": "assistant", "content": echoed},
]
}
else:
attempt = exact_body
try:
response = send("claude-opus-4-8", attempt)
except BadRequestError as error:
if "redemption temporarily unavailable" in error.message:
raise # Transient: retry with the token within its five-minute window
try:
# Recorra ao corpo inalterado, ainda com o token
response = send("claude-opus-4-8", exact_body)
except BadRequestError as retry_error:
if "redemption temporarily unavailable" in retry_error.message:
raise # Transient: retry with the token within its five-minute window
# O próprio token foi rejeitado: descarte-o e tente novamente sem ele.
response = send("claude-opus-4-8", request)
print(json.dumps({"stop_reason": response.stop_reason, "model": response.model}))O crédito de fallback está em beta na Claude API, Amazon Bedrock, Claude Platform na AWS, Google Cloud e Microsoft Foundry. Recusas em Message Batches não geram tokens de crédito, e o resgate se aplica apenas a solicitações diretas à Messages API: um token passado em uma solicitação de lote é aceito, mas ignorado.
O modelo da nova tentativa deve ser um dos alvos de fallback permitidos do modelo recusado. Os alvos permitidos do Claude Fable 5 são Claude Opus 4.8 (claude-opus-4-8) e Claude Opus 5 (claude-opus-5).
O reembolso é visível no usage da nova tentativa. Em comparação com o que a mesma solicitação reportaria sem o token, cache_creation_input_tokens é menor, e cache_read_input_tokens é maior na mesma quantidade. Uma diferença de zero significa que o token foi honrado, mas não havia nada para reprecificar, por exemplo, porque o cache do modelo da nova tentativa já estava aquecido.
A maioria das novas tentativas é resgatada na primeira tentativa. Quando uma não é, a API retorna um erro 400 que indica o que tentar em seguida.
Continuação rejeitada: reenvie o corpo inalterado
Se a nova tentativa que anexa a mensagem de assistente for rejeitada com um erro 400, reenvie o corpo da solicitação recusada inalterado, ainda com o token.
Token rejeitado: remova o token
Se o corpo inalterado também for rejeitado com um erro 400 cuja mensagem menciona fallback_credit_token, tente novamente sem o token. O crédito é perdido, mas a nova tentativa em si é processada.
Se a solicitação recusada executou ferramentas de servidor, uma nova tentativa sem token reexecuta e cobra novamente essas ferramentas. Nesse caso, exponha o erro 400 ao seu chamador em vez de recorrer a uma nova tentativa sem token.
As seções abaixo cobrem casos extremos e as regras completas de resgate. A maioria das integrações não precisa delas.
Detecte recusas e escolha entre fallback do lado do servidor, o middleware do SDK e uma nova tentativa manual.
Como leituras de cache e gravações de cache são cobradas.
Cada valor de stop_reason e como tratá-lo.
O auxiliar do SDK que aplica o crédito de fallback automaticamente.
Was this page helpful?