Кэши подсказок привязаны к конкретной модели. Когда Claude Fable 5 отклоняет запрос и вы повторяете его на другой модели, префикс разговора, который уже был закэширован для Claude Fable 5, должен быть записан в кэш новой модели с нуля. Записи в кэш стоят дороже, чем чтения из кэша. «Fallback credit» (кредит резервного переключения) устраняет эту дополнительную стоимость. Отказ содержит токен кредита, вы передаёте этот токен в повторном запросе, и повторный запрос тарифицируется так, как будто разговор с самого начала вёлся на новой модели.
Эта страница нужна вам только в том случае, если вы строите повторный запрос самостоятельно: через «сырой» HTTP или с помощью собственной логики повторных попыток. Серверное резервное переключение и промежуточное ПО SDK применяют кредит резервного переключения автоматически. Если вы используете любой из них, пропустите эту страницу.
Отказы и резервное переключение описывает обнаружение отказов и выбор подхода к резервному переключению. Кэширование подсказок объясняет чтения из кэша и записи в кэш, если эти термины для вас новые.
Включите функцию с помощью бета-заголовка
Отправьте запрос, который может быть отклонён, с заголовком 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-credit-2026-07-01. Заголовок необходим повторному запросу для погашения токена.
Поле fallback_has_prefill_claim сообщает вам, может ли повторный запрос продолжить частичный вывод отклонившей модели вместо того, чтобы начинать заново:
fallback_has_prefill_claim | Тело повторного запроса |
|---|---|
true | Тело отклонённого запроса без изменений плюс одно добавленное в конец сообщение ассистента, чьё content повторяет content отклонённого ответа. Модель повторного запроса продолжает ответ с того места, где остановилась отклонившая модель, а завершённые вызовы серверных инструментов не выполняются повторно. |
false | Тело отклонённого запроса без изменений. |
Следующий пример выполняет запрос, который может быть отклонён, и погашает токен кредита в повторном запросе к Claude Opus 4.8. Когда попытка повтора отклоняется, пример спускается по лестнице отклонений: последовательности постепенно упрощающихся форм повторного запроса, описанной в разделе Когда повторный запрос отклонён.
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}
# Предпочитаем форму продолжения, если утверждение не равно 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:
# Возвращаемся к неизменённому телу, по-прежнему с токеном
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
# Сам токен был отклонён: отказываемся от него и повторяем попытку без него.
response = send("claude-opus-4-8", request)
print(json.dumps({"stop_reason": response.stop_reason, "model": response.model}))Кредит резервного переключения находится в бета-версии в Claude API, Amazon Bedrock, Claude Platform на AWS, Google Cloud и Microsoft Foundry. Отказы в Message Batches не создают токены кредита, а погашение применяется только к прямым запросам Messages API: токен, переданный в пакетном запросе, принимается, но игнорируется.
Модель повторного запроса должна быть одной из разрешённых целевых моделей резервного переключения для отклонившей модели. Разрешённые целевые модели для Claude Fable 5 — это Claude Opus 4.8 (claude-opus-4-8) и Claude Opus 5 (claude-opus-5).
Возврат виден в usage повторного запроса. По сравнению с тем, что тот же запрос сообщил бы без токена, cache_creation_input_tokens ниже, а cache_read_input_tokens выше на ту же величину. Нулевой сдвиг означает, что токен был принят, но переоценивать было нечего, например потому, что кэш модели повторного запроса уже был прогрет.
Большинство повторных запросов погашаются с первой попытки. Когда этого не происходит, API возвращает ошибку 400, которая сообщает вам, что попробовать дальше.
Продолжение отклонено: отправьте неизменённое тело повторно
Если повторный запрос, добавляющий сообщение ассистента, отклонён с ошибкой 400, отправьте тело отклонённого запроса без изменений, по-прежнему с токеном.
Токен отклонён: уберите токен
Если неизменённое тело также отклонено с ошибкой 400, в сообщении которой упоминается fallback_credit_token, повторите запрос без токена. Кредит теряется, но сам повторный запрос проходит.
Если отклонённый запрос выполнял серверные инструменты, повторный запрос без токена повторно запускает и повторно тарифицирует эти инструменты. В этом случае передайте ошибку 400 вызывающей стороне вместо того, чтобы переходить к повторному запросу без токена.
Разделы ниже описывают граничные случаи и полные правила погашения. Большинству интеграций они не нужны.
Обнаруживайте отказы и выбирайте между серверным резервным переключением, промежуточным ПО SDK и ручным повторным запросом.
Как тарифицируются чтения из кэша и записи в кэш.
Каждое значение stop_reason и как его обрабатывать.
Вспомогательный инструмент SDK, который применяет кредит резервного переключения автоматически.
Was this page helpful?