Docs
Pusat PengembangDasboresimoa.com
    • Pengantar
    • Mulai cepat
    • Autentikasi
    • Overview
    • Daftar eSIM
    • Dapatkan eSIM
    • Negara
    • OpenAPI
    • Pelacakan & komisi
    • Batas laju & kesalahan
    • Overview
    • Claude
    • ChatGPT
    • Gemini
    • Klien MCP lainnya
    • Overview
    • Autentikasi
    • Produk
    • Detail produk
    • Negara
    • Errors & rate limits
  1. Docs
  2. API mitra (B2B)
  3. Errors & rate limits

API mitra (B2B)

Errors & rate limits

Partner API error codes, per-key rate limits with X-RateLimit headers, and how to retry.

On this page
  • Error format
  • Error codes
  • Rate limits
  • Retrying

Error format#

Body error berbentuk { statusCode, code, message }. message adalah teks bahasa Inggris yang mudah dibaca dan dapat berubah, jadi selalu gunakan code untuk percabangan logika.

json
// Success
{ "success": true, "data": ..., "total": 128, "page": 1, "limit": 20 }

// Error
{ "statusCode": 401, "code": "INVALID_API_KEY", "message": "The API key is invalid." }

Catatan

Kesalahan validasi kueri (400) menggunakan format standar { statusCode: 400, message: [...], error: "Bad Request" } tanpa kode.

Error codes#

HTTPcodeArti dan solusi
401API_KEY_REQUIREDTidak ada kunci yang dikirim — tambahkan header X-API-Key
401INVALID_API_KEYKunci tidak valid atau tidak dikenal — pastikan salinannya tidak terpotong dan bukan kunci Public API
401KEY_REVOKEDKunci dicabut — terbitkan kunci baru
401KEY_EXPIREDKunci kedaluwarsa (termasuk kunci lama setelah masa tenggang rotasi) — gunakan kunci baru
403PARTNER_SUSPENDEDAkun tidak aktif — hubungi esimoa
403INSUFFICIENT_SCOPEPermintaan di luar cakupan kunci
403IP_NOT_ALLOWEDDipanggil dari IP di luar daftar izin — tambahkan IP keluar server Anda
404PRODUCT_NOT_FOUNDProduk tidak dikenal atau sudah dihentikan
429RATE_LIMITEDBatas laju terlampaui — coba lagi setelah jumlah detik di Retry-After

Rate limits#

Catatan

Permintaan API B2B secara default dibatasi 20,000 per jam per kunci.

Jendela 3,600 detik dimulai sejak permintaan pertama; batas per menit juga berlaku. Kuota menghitung jumlah panggilan, bukan MB yang ditransfer. Pengaturan operasional dapat mengubah kuota.

X-RateLimit-Hour-Limit · X-RateLimit-Hour-Remaining · X-RateLimit-Hour-Reset

Header ini menunjukkan batas per jam, sisa panggilan, dan waktu reset (detik Unix). Jika kuota per jam habis, akan dikembalikan HTTP 429 dan Retry-After dalam detik. Panggilan yang ditolak oleh batas per menit tidak dihitung dalam kuota per jam.

Default-nya 300 permintaan per menit per kunci (per jendela 60 detik, dibagi untuk semua server). esimoa dapat menaikkannya per akun sesuai kontrak Anda. Setiap respons terautentikasi menyertakan header kuota.

  • X-RateLimit-Limit — permintaan yang diizinkan per menit
  • X-RateLimit-Remaining — sisa permintaan dalam jendela saat ini
  • X-RateLimit-Reset — waktu jendela direset (detik Unix)
  • Retry-After — saat 429, jumlah detik yang perlu ditunggu sebelum mencoba lagi
http
HTTP/1.1 200 OK
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1790000000

HTTP/1.1 429 Too Many Requests
Retry-After: 18
{ "statusCode": 429, "code": "RATE_LIMITED", "message": "Rate limit exceeded (300 requests per minute)." }

Retrying#

  • Saat menerima 429, tunggu sesuai detik di Retry-After, lalu coba lagi.
  • Coba ulang 5xx beberapa kali dengan exponential backoff.
  • 400, 401, 403, dan 404 tidak akan berubah saat dicoba ulang — perbaiki penyebabnya.
  • Menyimpan katalog dalam cache selama beberapa menit membuat Anda tetap jauh di bawah batas.
javascript
async function b2bFetch(url, attempt = 0) {
  const res = await fetch(url, { headers: { 'X-API-Key': process.env.ESIMOA_PARTNER_KEY } });
  if (res.status === 429 && attempt < 3) {
    const wait = Number(res.headers.get('Retry-After') ?? 1);
    await new Promise((r) => setTimeout(r, wait * 1000));
    return b2bFetch(url, attempt + 1);
  }
  const body = await res.json();
  if (!res.ok) throw Object.assign(new Error(body.message), { code: body.code, status: res.status });
  return body;
}

Terakhir diperbarui: 1 Oktober 2026

PreviousNegara

On this page

  • Error format
  • Error codes
  • Rate limits
  • Retrying

APIs and MCP for bringing esimoa eSIMs to your product

Resources

  • Docs
  • API reference
  • API mitra (B2B)
  • MCP server
  • OpenAPI spec

esimoa

  • Beranda
  • eSIM paket
  • Pusat Pengembang
  • Dasbor
  • Portal mitra

Company

  • Tentang kami
  • Kemitraan
  • Ketentuan layanan
  • Kebijakan privasi
  • Kebijakan pengiriman dan pengembalian dana

Bantuan

  • support@esimoa.com
  • Chat bantuan

NBase Korea Co., Ltd.

902, Bldg A, 767 Sinsu-ro, Suji-gu, Yongin-si, Gyeonggi-do (Dongcheon-dong, Bundang Suji U-TOWER)

Kantor pusat AS: NBASE CORP. · Corporate Park, Irvine, CA 92606, USA

© 2026 esimoa. Seluruh hak dilindungi.