Skip to content

Rate Limit & Kuota ​

Gateway membatasi kecepatan pengiriman untuk menjaga kesehatan nomor WhatsApp Anda dan mencegah penyalahgunaan.


Endpoint mana yang dibatasi? ​

Semua pembatasan di halaman ini berlaku untuk setiap endpoint yang benar-benar mengirim pesan, bukan hanya POST /v1/messages:

EndpointRate limit & cooldownMenghitung kuota
POST /v1/messagesYaYa
POST /v1/sessions/{id}/newsletters/{nl}/messagesYaYa
Kirim uji cepat di DashboardYa (lebih ketat)Ya

Nomor yang sama berbagi satu jatah: mengirim lewat channel atau lewat tombol kirim uji di Dashboard ikut menghabiskan rate limit, cooldown, dan kuota nomor tersebut.


Empat Jenis Pembatasan ​

1. Rate Limit Per Tier (Kecepatan Pengiriman) ​

Membatasi berapa banyak pesan yang bisa Anda kirim per menit dari satu nomor, tergantung paket langganan.

PaketRate LimitBurst (1 menit pertama)Keterangan
Free10 pesan/menit10Hanya teks, 1 nomor
Pro20 pesan/menit20Teks + attachment, unlimited nomor
Max30 pesan/menit30Semua format + grup + channel, unlimited nomor
WagWay PartnerCustomCustomSesuai kesepakatan

Burst artinya boleh kirim hingga limit tersebut dalam 1 menit pertama, lalu di-pace di kemudian hari. Contoh: paket Pro boleh kirim 20 pesan sekaligus, tapi jika terus-menerus kirim 20/menit, akan dibatasi ke ~0.33 pesan/detik.

Per akun (lintas semua nomor): maksimal 20 pesan/detik dengan burst hingga 40. Ini adalah batas atas — rate limit per nomor itu yang lebih ketat menjadi pembatas sesungguhnya.

2. Cooldown Pesan Beruntun (Platform Hygiene) ​

Setelah mengirim 100 pesan berturut-turut dari satu nomor tanpa jeda, sistem otomatis mem-pause pengiriman dari nomor itu selama 5 menit.

"Berturut-turut" = tanpa jeda ≥ 60 detik antar pesan. Jika Anda berhenti 60+ detik, hitungan reset ke nol.

Tujuan: higiene nomor. Pola "senapan mesin" (ratusan pesan tanpa henti) adalah sinyal spam yang mudah dibaca Meta.

3. Batas Aksi Paralel Per Nomor ​

Maksimal 5 request paralel ke WhatsApp dari satu nomor untuk operasi sinkron (cek grup, ubah profil, validasi kontak, dll). Request ke-6 ditolak sambil menunggu yang lain selesai.

Tujuan: menjaga kesehatan koneksi sesi. Banyak request paralel ke WhatsApp = beban, risiko disconnect.

4. Kuota Periode Langganan ​

Membatasi berapa total pesan yang bisa dikirim dalam satu periode langganan.

  • Batas kuota tergantung paket langganan Anda
  • Periode dihitung rolling dari tanggal aktivasi paket, bukan kalender bulan
  • Sisa kuota bisa dilihat di Dashboard → Penggunaan

Kuota hanya dipantau lewat portal

Belum ada endpoint API untuk mengecek sisa kuota/pemakaian secara programatik — pantau lewat Dashboard → Penggunaan. Secara program, Anda hanya tahu kuota habis saat menerima 429 dengan body {"error":"message quota exhausted"}.


Apa yang Terjadi Saat Limit Terlampaui? ​

Server merespons dengan 429 Too Many Requests. Bedakan berdasarkan pesan error:

Rate Limit Per Nomor ​

json
{
  "error": "session send rate exceeded"
}

Header: Retry-After: N (tunggu N detik).

Rate Limit Per Akun ​

json
{
  "error": "user rate limit exceeded"
}

Header: Retry-After: N.

Cooldown Pesan Beruntun ​

json
{
  "error": "consecutive send cooldown: too many messages sent back-to-back on this number; pause before sending again"
}

Header: Retry-After: N (standar 300 detik = 5 menit). Pesan error berbeda dari rate limit supaya Anda tahu ini adalah hygiene pause, bukan teknis congestion.

Batas Aksi Paralel ​

json
{
  "error": "too many concurrent requests for this number; retry shortly"
}

Header: Retry-After: 1. Terjadi saat mencoba operasi grup/profil/kontak saat sudah ada 5 request lain berlangsung untuk nomor itu.

Kuota Habis ​

json
{
  "error": "message quota exhausted"
}

Tidak ada header Retry-After — kuota pulih di perpanjangan periode langganan.


Cara Menangani Rate Limit ​

Cara 1 — Antrekan Pesan (Direkomendasikan) ​

Alih-alih mengirim langsung dari loop, masukkan pesan ke antrean internal aplikasi Anda, lalu proses dengan kecepatan yang terkontrol. Sesuaikan delay dengan paket Anda:

javascript
// Contoh: paket Pro (20 pesan/menit = 3 detik per pesan)
async function kirimDenganDelay(pesanList) {
  const delayMs = 3000 // 3 detik untuk Pro; gunakan 6 detik untuk Free, 2 detik untuk Max
  for (const pesan of pesanList) {
    await kirimPesan(pesan)
    await tunggu(delayMs)
  }
}

Cara 2 — Exponential Backoff saat 429 ​

Jika mendapat 429, tunggu sebelum retry. Setiap gagal, gandakan waktu tunggu:

javascript
async function kirimDenganRetry(payload, maxCoba = 5) {
  let tungguMs = 1000 // mulai 1 detik

  for (let coba = 1; coba <= maxCoba; coba++) {
    const resp = await fetch('/v1/messages', {
      method: 'POST',
      body: JSON.stringify(payload),
      headers: { /* ... */ }
    })

    if (resp.status === 429) {
      const retryAfter = resp.headers.get('Retry-After') || 1
      await new Promise(r => setTimeout(r, retryAfter * 1000))
      tungguMs = Math.min(tungguMs * 2, 30000) // maks 30 detik
      continue
    }

    return resp.json()
  }

  throw new Error('Gagal setelah beberapa kali retry')
}

Tips Menjaga Nomor WhatsApp Tetap Sehat ​

Selain batas teknis, ada batas "etika" penggunaan WhatsApp yang penting dijaga:

  • Kirim ke penerima yang relevan. Mengirim pesan ke banyak orang yang tidak mengenal Anda berisiko nomor dilaporkan sebagai spam dan diblokir oleh WhatsApp.
  • Hindari pengiriman massal ke nomor acak. WhatsApp aktif mendeteksi pola spam.
  • Jaga rasio balasan. Nomor yang banyak kirim tapi tidak pernah dibalas dicurigai sebagai spam.
  • Gunakan untuk komunikasi yang diharapkan pengguna — notifikasi transaksi, OTP, update pesanan, dll.

Pantau Penggunaan ​

Dari Dashboard → Penggunaan, Anda bisa melihat:

  • Total pesan terkirim hari ini dan pada periode langganan berjalan
  • Sisa kuota periode berjalan
  • Grafik penggunaan 14 hari terakhir

Produk independen: tidak terafiliasi dengan Meta Platforms, Inc. atau WhatsApp Inc.