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

Starter

API Calls

60/min

1 request/second

Messages

50/day

Broadcast

50/day

POPULAR

Starter

API Calls

180/min

3 requests/second

Messages

500/day

Broadcast

500/day

Pro

API Calls

300/min

5 requests/second

Messages

2,000/day

Broadcast

2,000/day

Enterprise

API Calls

Unlimited

Custom rate limit

Messages

Unlimited

Broadcast

Unlimited

Rate Limit Headers

Setiap API response menyertakan header berikut untuk tracking rate limit:

X-RateLimit-Limit: 300          # Max requests per window
X-RateLimit-Remaining: 245      # 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: 300
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 /send-broadcast) 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/v1/send-message', {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({ phone, message })
    });

    // Check rate limit headers
    const remaining = response.headers.get('X-RateLimit-Remaining');
    console.log(`Remaining requests: ${remaining}`);

    if (response.status === 429) {
      // Rate limit exceeded
      const retryAfter = response.headers.get('Retry-After');
      console.log(`Rate limit exceeded. Waiting ${retryAfter}s...`);
      
      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