Claude Platform Docs
MessagesMembangun dengan Claude

Kredit fallback

Hindari membayar biaya prompt-cache dua kali saat Anda mencoba ulang permintaan yang ditolak pada model lain.

Prompt cache bersifat per-model. Ketika sebuah model menolak permintaan dan Anda mencoba ulang pada model lain, prefiks percakapan yang sudah di-cache untuk model pertama harus ditulis ke dalam cache model baru dari awal. Penulisan cache (cache write) lebih mahal daripada pembacaan cache (cache read). "Fallback credit" (kredit fallback) menghilangkan biaya tambahan tersebut. Penolakan membawa token kredit, Anda mengirimkan kembali token tersebut pada percobaan ulang, dan percobaan ulang ditagih seolah-olah percakapan telah berada pada model baru sejak awal.

Anda memerlukan halaman ini hanya jika Anda membangun percobaan ulang sendiri: melalui HTTP mentah atau dengan logika percobaan ulang kustom. Fallback sisi server dan middleware SDK menerapkan kredit fallback secara otomatis. Jika Anda menggunakan salah satunya, lewati halaman ini.

Penolakan dan fallback membahas cara mendeteksi penolakan dan memilih pendekatan fallback. Caching prompt menjelaskan pembacaan cache dan penulisan cache jika istilah-istilah tersebut baru bagi Anda.

Alur dasar

  1. Ikut serta dengan header beta

    Kirim permintaan yang mungkin ditolak dengan header anthropic-beta: fallback-credit-2026-07-01. Header server-side-fallback-2026-07-01 juga memberikan field yang sama, dan header sebelumnya fallback-credit-2026-06-01 tetap diterima dan memberikan field yang sama.

  2. Baca dua field dari penolakan

    Pada penolakan, stop_details menyertakan dua field:

    • fallback_credit_token: string opaque yang merepresentasikan kredit.
    • fallback_has_prefill_claim: Boolean yang memberi tahu Anda bentuk body percobaan ulang mana yang harus digunakan.

    Keduanya bernilai null ketika tidak ada kredit yang tersedia untuk penolakan tersebut.

  3. Bangun percobaan ulang

    Mulai dari body permintaan yang ditolak. Atur model ke model fallback dan tambahkan token sebagai parameter tingkat atas fallback_credit_token. Pilih bentuk body dari tabel berikut.

  4. Kirim percobaan ulang dengan header yang sama

    Kirim percobaan ulang dengan header beta fallback-credit-2026-07-01 yang sama. Percobaan ulang memerlukan header tersebut untuk menukarkan token.

Field fallback_has_prefill_claim memberi tahu Anda apakah percobaan ulang dapat melanjutkan output parsial dari model yang menolak alih-alih memulai dari awal:

fallback_has_prefill_claimBody percobaan ulang
trueBody permintaan yang ditolak, tanpa perubahan, ditambah satu pesan asisten yang ditambahkan di akhir yang content-nya menyalin content dari respons yang ditolak. Model percobaan ulang melanjutkan respons dari titik di mana model yang menolak berhenti, dan panggilan alat server yang telah selesai tidak dieksekusi ulang.
falseBody permintaan yang ditolak, tanpa perubahan.

Contoh

Contoh berikut membuat permintaan yang mungkin ditolak dan menukarkan token kredit pada percobaan ulang terhadap Claude Opus 4.8. Ketika upaya percobaan ulang ditolak, contoh ini menurun melalui tangga penolakan: urutan bentuk percobaan ulang yang semakin sederhana yang dibahas di Ketika percobaan ulang ditolak.

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}
    # Utamakan bentuk continuation kecuali claim bernilai 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:
            # Kembali ke body yang tidak diubah, tetap dengan 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
            # Token itu sendiri ditolak: lepaskan dan coba lagi tanpanya.
            response = send("claude-opus-4-8", request)

print(json.dumps({"stop_reason": response.stop_reason, "model": response.model}))

Di mana fitur ini berfungsi

Kredit fallback berada dalam tahap beta di Claude API, Amazon Bedrock, Claude Platform on AWS, Google Cloud, dan Microsoft Foundry. Penolakan di Message Batches tidak menerbitkan token kredit, dan penukaran hanya berlaku untuk permintaan Messages API langsung: token yang diteruskan pada permintaan batch diterima tetapi diabaikan.

Model percobaan ulang harus merupakan salah satu target fallback yang diizinkan untuk model yang menolak. Untuk Claude Fable 5.1 dan Claude Fable 5, target tersebut adalah Claude Opus 4.8 (claude-opus-4-8) dan Claude Opus 5 (claude-opus-5).

Memeriksa bahwa kredit telah diterapkan

Pengembalian biaya terlihat di usage percobaan ulang. Dibandingkan dengan apa yang akan dilaporkan oleh permintaan yang sama tanpa token, cache_creation_input_tokens lebih rendah, dan cache_read_input_tokens lebih tinggi dengan jumlah yang sama. Pergeseran nol berarti token dihormati tetapi tidak ada yang perlu dihitung ulang harganya, misalnya karena cache model percobaan ulang sudah hangat.

Ketika percobaan ulang ditolak

Sebagian besar percobaan ulang berhasil ditukarkan pada upaya pertama. Ketika tidak berhasil, API mengembalikan error 400 yang memberi tahu Anda apa yang harus dicoba selanjutnya.

  1. Kelanjutan ditolak: kirim ulang body tanpa perubahan

    Jika percobaan ulang yang menambahkan pesan asisten ditolak dengan error 400, kirim ulang body permintaan yang ditolak tanpa perubahan, tetap dengan token.

  2. Token ditolak: hapus token

    Jika body tanpa perubahan juga ditolak dengan error 400 yang pesannya menyebut fallback_credit_token, coba ulang tanpa token. Kredit hangus, tetapi percobaan ulang itu sendiri berhasil.

Referensi

Bagian-bagian berikut membahas kasus tepi dan aturan penukaran lengkap. Sebagian besar integrasi tidak memerlukannya.

Langkah selanjutnya

Deteksi penolakan dan pilih antara fallback sisi server, middleware SDK, dan percobaan ulang manual.

Bagaimana pembacaan cache dan penulisan cache ditagih.

Setiap nilai stop_reason dan cara menanganinya.

Helper SDK yang menerapkan kredit fallback secara otomatis.

Was this page helpful?