Menu dokumentasi
Dokumentasi API & Webhook Error & rate limit
Di halaman ini

Error & rate limit

Format error

Semua error memakai envelope yang sama:

json
{
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "Validasi gagal",
    "details": [
      { "field": "domainId", "issue": "Invalid input" }
    ],
    "requestId": "01HXY..."
  }
}
  • code — enum machine-readable. Cabang logika dari code, bukan message.
  • message — pesan human-readable (bahasa Indonesia).
  • details — opsional. Untuk VALIDATION_FAILED berisi array { field, issue }.
  • requestId — sama dengan header X-Request-Id. Sertakan saat lapor masalah.

Katalog kode error

HTTPcodeKapan
400BAD_REQUESTRequest malformed (mis. URL webhook di-blok)
401UNAUTHORIZEDSesi/kredensial tidak ada atau salah
401INVALID_TOKENJWT tidak valid / kedaluwarsa
401INVALID_API_KEYAPI key tidak valid, di-revoke, atau kedaluwarsa
402PAYMENT_REQUIREDSaldo tidak cukup — perlu topup
403FORBIDDENAkses ditolak (scope kurang, resource bukan milik key, endpoint tak dukung API key)
403SERVICE_SUSPENDEDLayanan ditangguhkan
404NOT_FOUNDResource/endpoint tidak ada
409CONFLICTKonflik data (mis. retry delivery yang sudah sukses)
409DOMAIN_NOT_VERIFIEDDomain belum lolos verifikasi DNS
409DOMAIN_ALREADY_EXISTSDomain sudah terdaftar di akun lain
410GONEResource sudah dihapus
410SERVICE_DELETEDLayanan telah dihapus
422VALIDATION_FAILEDBody/query gagal validasi (lihat details)
429RATE_LIMIT_EXCEEDEDMelewati batas rate limit
429QUOTA_EXCEEDEDKuota resource habis (mis. jumlah webhook per layanan)
500INTERNAL_ERRORKesalahan server
502UPSTREAM_ERRORLayanan eksternal gangguan
503SERVICE_UNAVAILABLESedang tidak tersedia
504UPSTREAM_TIMEOUTLayanan eksternal timeout

Rate limit

Rate limit dihitung per API key kalau request menyertakan X-API-Key, kalau tidak per IP klien tepercaya.

TierBatasBerlaku untuk
Authenticated1000 req / menitSemua endpoint /v1 terautentikasi (API key / JWT)
Public30 req / menitEndpoint /v1/public/ (per IP)
Payment callback60 req / menit/v1/payment/callback/ (per IP)
Unlock5 req / 15 menit/v1/public/unlock (anti brute-force, per IP)

Header response

Pada response terautentikasi:

  • X-RateLimit-Limit — batas tier
  • X-RateLimit-Remaining — sisa quota
Saat kena limit (429 RATE_LIMIT_EXCEEDED), response menyertakan Retry-After (detik) — tunggu segitu sebelum mencoba lagi.

Catatan: hanya X-RateLimit-Remaining yang di-expose lintas origin (CORS). X-RateLimit-Limit terbaca pada request same-origin.