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
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 windowX-RateLimit-Remaining- Sisa requests yang bisa dilakukanX-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
Questions about Rate Limits?
Hubungi tim support kami untuk diskusi kebutuhan rate limit Anda