Rate Limit & Error
Pelajari tentang rate limiting, kode error, dan praktik terbaik untuk menangani error pada Kode Pos API.
Rate Limiting
Untuk menjaga stabilitas layanan, Kode Pos API menerapkan rate limit berbasis mode akun (Sandbox dan Production). Batas dihitung per menit per akun.
Window 1 menit (per menit, per akun) — batas dihitung ulang setiap menit (window fixed 1 menit).
Berlaku untuk semua antarmuka — REST API, GraphQL API, dan MCP Server
Override per akun tersedia — hubungi admin jika membutuhkan batas khusus (enterprise, migrasi, beban sementara).
Batas per Mode
Mode akun ditentukan oleh riwayat pembelian kredit. Akun baru beroperasi di mode Sandbox dan naik otomatis ke mode Production setelah pembelian kredit berbayar pertama.
| Mode | Status | Batas | Keterangan |
|---|---|---|---|
Sandbox | Aktif | 60 request/menit | Mode default untuk eksplorasi, uji coba integrasi, dan pengembangan. |
Production | Aktif | 600 request/menit | Mode aktif otomatis setelah pembelian kredit berbayar pertama. |
Contoh Response 429
Jika rate limit terlampaui, API mengembalikan response berikut dengan field retryAfter yang menunjukkan waktu tunggu dalam detik (karena window rate limit adalah 1 menit):
Ketika Rate Limit Terlampaui
Jika Anda melebihi batas rate limit, API akan mengembalikan HTTP status 429 dengan error code RATE_LIMIT_EXCEEDED:
Tunggu sesuai retryAfter — field ini dihitung dalam detik (window rate limit adalah 1 menit). Tunggu selama nilai retryAfter detik sebelum mengirim request berikutnya.
Kode Error
Berikut adalah daftar lengkap kode error yang mungkin dikembalikan oleh API:
| HTTP Status | Error Code | Deskripsi |
|---|---|---|
400 | BAD_REQUEST | Parameter query tidak valid atau format request salah |
401 | AUTHENTICATION_REQUIRED | Autentikasi diperlukan — sertakan header Authorization: Bearer |
401 | INVALID_API_KEY | API key tidak valid atau sudah dicabut |
402 | INSUFFICIENT_CREDITS | Kredit habis — perlu top up untuk melanjutkan |
404 | NOT_FOUND | Resource yang diminta tidak ditemukan |
422 | VALIDATION_ERROR | Validasi input gagal |
429 | RATE_LIMIT_EXCEEDED | Terlalu banyak request — coba lagi nanti |
500 | INTERNAL_ERROR | Kesalahan server tak terduga |
Contoh Error Response
Berikut adalah contoh response untuk setiap jenis error:
BAD_REQUEST
AUTHENTICATION_REQUIRED
INVALID_API_KEY
INSUFFICIENT_CREDITS
NOT_FOUND
VALIDATION_ERROR
RATE_LIMIT_EXCEEDED
INTERNAL_ERROR
Praktik Terbaik
Untuk menangani error dengan efektif, ikuti praktik terbaik berikut:
1. Gunakan Exponential Backoff
Saat menerima error 429 atau 500, jangan langsung mencoba lagi. Gunakan exponential backoff — tunggu dengan durasi yang meningkat secara eksponensial di setiap percobaan ulang.
2. Periksa retryAfter pada Error
Saat menerima error 429, response body mengandung field error.retryAfter yang menunjukkan waktu tunggu dalam detik. Gunakan nilai ini untuk menentukan kapan harus mencoba lagi.
3. Tangani Error Spesifik
Jangan hanya memeriksa HTTP status code — periksa juga error.code dalam response body untuk menentukan tindakan yang tepat. Misalnya, INSUFFICIENT_CREDITS memerlukan top up, sementara RATE_LIMIT_EXCEEDED hanya memerlukan tunggu.
4. Cache Response
Data kode pos relatif statis — cache response API di sisi klien untuk mengurangi jumlah request yang tidak perlu. Pertimbangkan menggunakan cache dengan TTL 24 jam untuk data yang jarang berubah.
Jika Anda memerlukan rate limit yang lebih tinggi, silakan hubungi admin untuk penyesuaian.