Кэши подсказок привязаны к конкретной модели. Когда Claude Fable 5 отклоняет запрос и вы повторяете его на другой модели, префикс разговора, который уже был закэширован для Claude Fable 5, должен быть записан в кэш новой модели с нуля. Запись в кэш стоит дороже, чем чтение из кэша. «Fallback credit» (кредит на резервный запрос) устраняет эту дополнительную стоимость. Отказ содержит токен кредита, вы передаёте этот токен при повторной попытке, и повторная попытка тарифицируется так, как если бы разговор с самого начала вёлся на новой модели.
Эта страница нужна вам только в том случае, если вы реализуете повторную попытку самостоятельно: на Ruby или PHP SDK, через необработанный HTTP или с помощью собственной логики повторных попыток. Резервный запрос на стороне сервера и промежуточное ПО SDK применяют кредит на резервный запрос автоматически. Если вы используете один из этих вариантов, пропустите эту страницу.
Страница Отказы и резервные запросы описывает обнаружение отказов и выбор подхода к резервному запросу. Страница Кэширование подсказок объясняет чтение из кэша и запись в кэш, если эти термины вам незнакомы.
Включите функцию с помощью бета-заголовка
Отправьте запрос, который может быть отклонён, с заголовком anthropic-beta: fallback-credit-2026-06-01. Заголовок server-side-fallback-2026-06-01 также предоставляет те же поля.
Прочитайте два поля из отказа
При отказе stop_details включает два поля:
fallback_credit_token: непрозрачная строка, представляющая кредит.fallback_has_prefill_claim: логическое значение, которое указывает, какую форму тела повторного запроса использовать.Оба поля равны null, когда кредит для данного отказа недоступен.
Сформируйте повторный запрос
Начните с тела отклонённого запроса. Установите model на резервную модель и добавьте токен как параметр верхнего уровня fallback_credit_token. Выберите форму тела из таблицы ниже.
Отправьте повторный запрос с тем же заголовком
Отправьте повторный запрос с тем же бета-заголовком fallback-credit-2026-06-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, body):
return client.beta.messages.create(
model=model, betas=["fallback-credit-2026-06-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}
# Предпочитать форму продолжения, если только утверждение не ложно
if details.fallback_has_prefill_claim is not False:
# Повторить содержимое отказа, удалив конечные пробелы из
# последнего текстового блока (валидатор префилла отклоняет их; серверное
# сопоставление допускает эту правку). Запросы с инструментами также опускают
# непарные блоки tool_use, затем снова удаляют пробелы после всех пропусков.
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 str(error):
raise # Transient: retry with the token within its five-minute window
try:
# Откатиться к неизменённому телу, всё ещё с токеном
response = send("claude-opus-4-8", exact_body)
except BadRequestError as error:
if "redemption temporarily unavailable" in str(error):
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, Claude Platform на AWS, Amazon Bedrock, Google Cloud и Microsoft Foundry. Токены кредита, возвращённые в результатах Message Batches, не могут быть погашены. Погашение применяется только к прямым запросам Messages API.
Модель повторного запроса должна быть одной из разрешённых целевых резервных моделей для отклонённой модели. На момент запуска разрешённой целью для Claude Fable 5 является Claude Opus 4.8 (claude-opus-4-8).
Возврат средств виден в поле 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?