Developer

Rate Limits

Memahami rate limits dan quota untuk Wahero API

Apa itu Rate Limit?

Rate limit adalah batasan jumlah API requests yang dapat Anda lakukan dalam periode waktu tertentu. Ini untuk menjaga performa server dan mencegah abuse.

Wahero menerapkan rate limiting berdasarkan paket subscription Anda.

Rate Limits per Paket

Free

API Calls

100

per 15 menit

Device WhatsApp

1

Broadcast

50/bulan

POPULAR

Pro

API Calls

1.000

per 15 menit

Device WhatsApp

5

Broadcast

10.000/bulan

Enterprise

API Calls

Unlimited

Custom rate limit

Device WhatsApp

Unlimited

Broadcast

Unlimited

Rate Limit Headers

Setiap API response menyertakan header berikut untuk tracking rate limit:

X-RateLimit-Limit: 100          # Max requests per window (15 menit)
X-RateLimit-Remaining: 87       # Remaining requests
X-RateLimit-Reset: 1701691200   # Unix timestamp reset time
  • X-RateLimit-Limit - Batas maksimal requests per window
  • X-RateLimit-Remaining - Sisa requests yang bisa dilakukan
  • X-RateLimit-Reset - Timestamp kapan limit akan reset (Unix epoch)

Error Response - Rate Limit Exceeded

Jika Anda melebihi rate limit, API akan return status 429 Too Many Requests:

HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1701691260
Retry-After: 60

{
  "success": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded. Try again in 60 seconds."
  }
}

Best Practices

Monitor Rate Limit Headers

Selalu check rate limit headers di response untuk tracking usage Anda

Implement Exponential Backoff

Jika dapat 429, tunggu sesuai Retry-After header sebelum retry

Batch Requests When Possible

Gunakan batch endpoints (seperti /api/v1/messages/bulk) untuk mengurangi API calls

Cache Response When Appropriate

Cache data yang jarang berubah untuk mengurangi API calls unnecessary

Spread Request Load

Jangan kirim semua request sekaligus. Spread over time untuk stay within limit

Example: Handle Rate Limiting

JavaScript Example:

async function sendMessageWithRetry(phone, message, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    const response = await fetch('https://api.wahero.id/api/v1/messages/send', {
      method: 'POST',
      headers: {
        'X-Api-Key': 'YOUR_API_KEY',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({ instanceId: 'uuid-instance-anda', phone, message })
    });

    // Check rate limit headers
    const remaining = response.headers.get('X-RateLimit-Remaining');

    if (response.status === 429) {
      // Rate limit exceeded
      const retryAfter = response.headers.get('Retry-After');
      
      await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
      continue; // Retry
    }

    if (response.ok) {
      return await response.json();
    }

    throw new Error(`Request failed: ${response.status}`);
  }

  throw new Error('Max retries exceeded');
}

Perlu Limit Lebih Tinggi?

Jika rate limit paket Anda tidak cukup, Anda bisa:

  • Upgrade paket - Paket lebih tinggi = limit lebih besar
  • Contact sales untuk Enterprise custom limit
Lihat Paket & Harga

Questions about Rate Limits?

Hubungi tim support kami untuk diskusi kebutuhan rate limit Anda