- Beranda
- Referensi API
- Tentang
- Rate limit
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.
Batas saat ini
Section titled “Batas saat ini”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-Afteradalah sisa waktu menit itu. - Rate limit bisa berubah. Perubahannya diumumkan di Changelog.
Kalau kamu merasa butuh lebih, hubungi dukungan.
Baca batasmu
Section titled “Baca batasmu”Setiap respons menunjukkan posisimu:
X-RateLimit-Limit: 600X-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 |
Menangani 429
Section titled “Menangani 429”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 RequestsRetry-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.
Ulangi dengan menunggu
Section titled “Ulangi dengan menunggu”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)); }}import randomimport time
import requests
def call(method, url, attempts=5, **kwargs): for attempt in range(1, attempts + 1): response = requests.request(method, url, **kwargs) if response.status_code != 429 or attempt == attempts: return response wait = float(response.headers.get("Retry-After", 1)) # sedikit acak, supaya beberapa worker tidak kembali bersamaan time.sleep(wait + random.random())Key yang salah juga dihitung
Section titled “Key yang salah juga dihitung”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.
Menghindari batas
Section titled “Menghindari batas”- Jangan polling pembayaran sampai lunas. Daftarkan endpoint webhook dan biarkan Baiyar yang memberi tahu.
- Baca sebuah daftar sekali, dengan
limitterbesar 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.
Halaman terkait
Section titled “Halaman terkait”- Autentikasi
- Idempotensi
- Error: error
rate_limited