Lewati ke konten

Rate limit

Berapa request yang boleh dibuat sebuah API key per menit, cara membaca batasnya dari header, dan cara menangani serta menghindari 429.


Rate limit membatasi jumlah request Merchant API per key. Jika kamu melewati batas dalam satu menit, API menjawab 429 dan mengirim header Retry-After.

Setiap operasi Merchant API berbagi satu batas per key:

Environment Request per menit, per key
Sandbox 600
Live 3000
  • Tiap key punya hitungannya sendiri, jadi satu layanan yang sibuk tidak menghabiskan jatah layanan lain.
  • Hitungannya per menit jam, dan jatahnya utuh lagi saat menit berikutnya dimulai. Retry-After adalah sisa waktu menit itu.
  • Rate limit bisa berubah. Perubahannya diumumkan di Changelog.

Kalau kamu merasa butuh lebih, hubungi dukungan.

Setiap respons menunjukkan posisimu:

X-RateLimit-Limit: 600
X-RateLimit-Remaining: 597
Header Artinya
X-RateLimit-Limit Berapa request yang boleh dibuat key per menit
X-RateLimit-Remaining Berapa yang tersisa di menit ini
Retry-After Hanya pada 429: detik yang harus ditunggu

Kalau lewat batas, API menjawab 429 dengan bentuk error yang sama dan header Retry-After berisi jumlah detik yang harus ditunggu:

HTTP/1.1 429 Too Many Requests
Retry-After: 12
{
"error": {
"type": "rate_limit_error",
"code": "rate_limited",
"detail": "Too many requests. Please try again later.",
"documentation_url": "https://docs.baiyar.com/resources/errors/rate_limited/"
},
"meta": { "request_id": "req_…" }
}

Tunggu sejumlah detik itu sebelum mengirim apa pun lagi dengan key tersebut. Sebar retry, jangan mengirim semuanya sekaligus, dan pertahankan Idempotency-Key yang sama pada retry request yang memilikinya.

async function call(url, options, attempts = 5) {
for (let attempt = 1; ; attempt++) {
const response = await fetch(url, options);
if (response.status !== 429 || attempt === attempts) return response;
const wait = Number(response.headers.get("retry-after") ?? 1);
// sedikit acak, supaya beberapa worker tidak kembali bersamaan
await new Promise((resolve) => setTimeout(resolve, (wait + Math.random()) * 1000));
}
}

Request berulang dengan key yang salah dari satu alamat juga diperlambat: setelah 60 dalam semenit, alamat itu mendapat 429 juga, baik key-nya ada maupun tidak.

  • Jangan polling pembayaran sampai lunas. Daftarkan endpoint webhook dan biarkan Baiyar yang memberi tahu.
  • Baca sebuah daftar sekali, dengan limit terbesar yang bisa kamu pakai, dan simpan yang sudah dibaca. Lihat Paginasi.
  • Ulangi request yang gagal dengan jeda yang makin panjang dan batas jumlah percobaan.
  • Pakai key terpisah untuk tiap layanan.