Batas & Kuota (Rate Limits)

Daftar Isi
  1. Kuota harian per tier
  2. Header X-RateLimit-*
  3. Respons 429 & Retry-After
  4. Praktik terbaik

Rate Limits & Quota

AgenWebsite Rate API menerapkan dua lapis pembatasan: kuota harian (jumlah request per hari) dan burst per menit (kecepatan request). Keduanya dihitung per pengguna — dibagi rata di semua API key milik Anda — dan 1 request dihitung 1, bukan per baris kurir.

Kuota harian per tier

Kuota di-reset setiap hari pukul 00:00 WIB (Asia/Jakarta, UTC+7). Tabel berikut merangkum setiap tier:

Tier Kuota / hari Burst / menit Max key aktif Harga
Free 150 20 2 Rp 0
Pro 30.000 300 5 Rp 129.000 / bln
Max 60.000 600 20 Rp 229.000 / bln
Reset harian, bukan bulanan. Kuota Anda pulih penuh setiap tengah malam WIB. Jika hari ini Anda memakai 150 request di tier Free, besok pukul 00:00 WIB kuota kembali menjadi 150.

Header X-RateLimit-*

Setiap respons — sukses maupun error — menyertakan header berikut agar Anda dapat memantau sisa kuota tanpa memanggil /v1/usage:

Header Keterangan
X-RateLimit-Limit Total kuota harian untuk plan Anda (mis. 30000)
X-RateLimit-Remaining Sisa request untuk hari ini
X-RateLimit-Reset Waktu reset berikutnya (00:00 WIB hari berikutnya)

Informasi yang sama juga tersedia dalam body pada blok rate_limit, dan bisa diminta kapan saja lewat GET /v1/usage:

GET /v1/usage

curl https://api.agenwebsite.com/v1/usage \
  -H "x-api-key: awk_live_xxxxxxxx"

# Response 200
{
  "plan": "pro",
  "limit": 30000,
  "used": 2,
  "remaining": 29998,
  "reset_at": "2026-07-03T00:00:00+07:00"
}

Respons 429 & Retry-After

Bila kuota harian habis atau batas burst per menit terlampaui, API membalas HTTP 429 Too Many Requests dengan kode rate_limit_exceeded. Respons menyertakan header Retry-After (dalam detik) yang memberi tahu kapan Anda boleh mencoba lagi, di samping header X-RateLimit-*.

Response 429

HTTP/1.1 429 Too Many Requests
Retry-After: 43
X-RateLimit-Limit: 150
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 2026-07-03T00:00:00+07:00

{
  "success": false,
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Kuota permintaan Anda sudah habis. Coba lagi nanti atau upgrade paket.",
    "request_id": "req_9c3e11"
  }
}

Praktik terbaik

Agar integrasi Anda hemat kuota dan tahan terhadap limit:

  • Hormati Retry-After. Saat menerima 429, tunggu sesuai nilai header sebelum mengulang — jangan langsung retry.
  • Pakai exponential backoff untuk retry otomatis (mis. 1s, 2s, 4s) dengan sedikit jitter.
  • Cache hasil ongkir di sisi Anda. Tarif untuk kombinasi asal-tujuan-berat yang sama relatif stabil; cache beberapa menit memangkas request drastis.
  • Pantau X-RateLimit-Remaining dan beri notifikasi internal saat mendekati batas.
  • Gabungkan kurir dalam satu request. Satu POST /v1/rates dengan beberapa couriers tetap dihitung 1 request — jauh lebih hemat daripada memanggil per kurir.
  • Upgrade bila perlu. Toko volume tinggi sebaiknya naik ke Pro/Max; downgrade tidak pernah mencabut key Anda.
Tips efisiensi: karena penghitungan adalah 1 per request (bukan per baris kurir), meminta kelima kurir sekaligus adalah cara paling hemat kuota untuk mendapatkan perbandingan tarif lengkap.