Langsung ke konten utama
Jaringan bisa putus di tengah jalan. Tanpa idempotensi, kamu tidak tahu apakah request itu sudah membuat job atau belum — dan mengirim ulang berarti potensi kredit terpotong dua kali. POST /api/v1/generate menerima field idempotencyKey untuk kasus ini.

Cara pakai

1

Buat satu key per keinginan bisnis

Bukan per request HTTP. Kalau pengguna menekan “Generate” untuk order #4711, order itu punya satu key, dan seluruh retry memakai key yang sama.
2

Kirim, dan kalau koneksi terputus, ulangi dengan key yang sama

Gunakan key yang sama sampai kamu menerima respons JSON apa pun.
3

Pahami respons replay

Kalau server sudah pernah melihat key itu, kamu menerima 200 OK (bukan 202) dengan job yang lama:
Perbedaan status yang perlu kamu tangani:
Replay mengembalikan job yang sudah ada, tanpa membandingkan isinya. Kalau kamu mengirim key yang sama dengan prompt atau model yang berbeda, perubahan itu diabaikan diam-diam dan kamu hanya mendapat job lama. Kalau memang berubah, itu request baru — pakai key baru.

Aturan penamaan key

  • Panjang minimal 8 karakter. Kurang dari itu, server mengabaikan nilai kamu dan membuat key sendiri, sehingga retry-mu tidak terlindungi.
  • Gunakan karakter yang aman di semua sistem: huruf, angka, tanda hubung, garis bawah.
  • Campurkan id bisnis dengan bagian acak, contoh order-4711-a39f2c7b. Pencocokan key di server berlaku global, jadi key yang terlalu mudah ditebak (misalnya coba-1) berisiko bertabrakan dengan pengguna lain.
  • Key tidak kedaluwarsa. Sekali terpakai, selamanya tercatat — jadi jangan pakai timestamp sebagai key kalau kamu memang ingin request berikutnya menjadi job baru.

Contoh klien yang aman

Endpoint POST /api/v1/upload dan GET tidak perlu idempotensi. Setiap unggahan menghasilkan aset baru, dan GET sudah tidak berdampak.