Identifier dan pengecualian
Didit menerapkan beberapa lapisan batas laju untuk menjaga API tetap stabil sekaligus tetap mengizinkan lonjakan lalu lintas yang wajar. Batas diterapkan per pengidentifikasi, yaitux-api-key Anda atau, jika tidak ada kunci API yang dikirim, IP klien Anda. Setiap cakupan memiliki penghitung independen dengan jendela geser 60 detik.
Middleware memilih pengidentifikasi batas laju dalam urutan berikut:
- Header
x-api-key→ penghitung berbasis kunci. - Hop pertama
X-Forwarded-For→ penghitung berbasis IP. REMOTE_ADDR→ penghitung berbasis IP.
- Kunci internal
DIDIT_WEBAPP_API_KEY(hanya digunakan oleh konsol Didit). - Endpoint yang dilindungi oleh izin
IsValidSession(lalu lintas sesi embedded/SDK). GET /system/healthcheck(dilayani olehHealthMiddlewaresebelum tumpukan ini).- Webhook penyedia: Stripe, skrining AML, callback verifikasi wajah, perubahan daftar KYC.
Batas global
Setiap permintaan yang terautentikasi juga dikelompokkan berdasarkan metode HTTP ke dalam cakupan umum, sehingga setiap rute baru mewarisi batas default yang wajar:
Pembuatan transaksi dan ingesti event dihitung ke
ingest-write alih-alih generic-write: integrasi dengan ingesti volume tinggi mendapatkan 600 permintaan per menit per kunci API tanpa menghabiskan kuota penulisan lainnya.
Batas khusus endpoint (bagian berikutnya) berlaku selain batas global. Cakupan pertama yang melampaui penghitungnya adalah yang mengembalikan 429.
Batas khusus endpoint
Middleware mendefinisikan cakupan yang lebih ketat untuk rute dengan dampak terbesar:GET /v3/session/<id>/decision/ dilayani oleh SessionV3RetrieveView dan tidak termasuk dalam cakupan session-decision. Endpoint ini hanya dibatasi oleh batas maksimum generic-get sebesar 600/menit. Pembatasan keputusan 100/menit hanya berlaku pada jalur keputusan v1 dan v2.Bentuk respons 429
Saat Anda melampaui cakupan mana pun, Anda menerima HTTP429 dengan isi dan header berikut:
Header
X-RateLimit-* hanya dikirim pada respons 429: respons sukses saat ini tidak menyertakannya. Gunakan nilai Retry-After (atau X-RateLimit-Reset - now) sebagai jeda sebelum percobaan berikutnya.
Panduan untuk klien
- Hormati
Retry-Aftersebagai batas minimum backoff Anda. Di atasnya, terapkan exponential backoff dengan jitter (5s → 10s → 20s → 40s ± random) agar dua klien yang menerima429pada waktu yang sama tidak tersinkron. - Hentikan percobaan ulang setelah mencapai batas maksimum yang rendah (misalnya 5 percobaan). Teruskan error ke pemanggil dan beri tahu tim Anda. 429 yang terus-menerus biasanya berarti loop yang tidak terkendali, bukan lonjakan sesaat.
- Gunakan satu pengidentifikasi per beban kerja. Berbagi
x-api-keydi banyak backend menggabungkannya ke penghitung yang sama, yang dapat membuat satu backend yang ramai dapat membuat yang lainnya kehabisan jatah. Buat aplikasi terpisah (dan karenanyaapi_keyterpisah) untuk setiap lingkungan, merek, atau pelanggan. Lihat Pendaftaran terprogram. - Simpan hasil baca keputusan dalam cache. Endpoint
/decision/tidak dirancang untuk loop polling yang rapat. Jika Anda memerlukan pembaruan real-time, gunakan Webhook dan hanya panggilGET /v3/session/<id>/decision/untuk pengisian data susulan atau audit. - Buat PDF secara offline. Rendering PDF bersifat intensif CPU (batas 50/menit). Picu pembuatan PDF dari antrean setelah sesi mencapai status terminal, bukan pada setiap tampilan halaman.
Contoh klien yang menangani 429
Butuh kapasitas tambahan?
Jika 600 sesi per menit tidak cukup, misalnya untuk peluncuran pemasaran atau pengisian data susulan, kirim email ke support@didit.me dengan UUIDapplication Anda serta perkiraan laju berkelanjutan dan laju lonjakan. Pengecualian dikonfigurasi per aplikasi.