Rate Limiting
Understanding and working with API rate limits.
Overview
Rate limits prevent abuse and ensure fair resource allocation. Limits vary by user role and are enforced per minute.
Limits by Role
- Standard users: 100 requests per minute
- Premium users: 500 requests per minute
- Admin users: 1000 requests per minute
Rate Limit Headers
All responses include rate limit information:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1704110400
X-RateLimit-Limit: Maximum requests allowedX-RateLimit-Remaining: Remaining requests in current windowX-RateLimit-Reset: Unix timestamp when limit resets
Handling Rate Limits
Check Headers
const response = await fetch(url, options);
const remaining = parseInt(response.headers.get('X-RateLimit-Remaining'));
const resetTime = parseInt(response.headers.get('X-RateLimit-Reset'));
if (remaining < 10) {
// Approaching limit, slow down
const waitTime = (resetTime * 1000) - Date.now();
await new Promise(resolve => setTimeout(resolve, waitTime));
}
Handle 429 Responses
When rate limit is exceeded:
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Please try again later.",
"details": {
"limit": 100,
"reset_at": "2024-01-15T10:30:00Z"
}
}
}
Exponential Backoff
async function fetchWithRetry(url, options, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const response = await fetch(url, options);
if (response.status === 429) {
const retryAfter = response.headers.get('Retry-After') || Math.pow(2, i);
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
continue;
}
return response;
}
throw new Error('Max retries exceeded');
}
Best Practices
- Monitor headers: Always check
X-RateLimit-Remaining - Implement backoff: Use exponential backoff on 429 responses
- Cache responses: Cache static data to reduce API calls
- Batch requests: Combine operations when possible
- Use WebSockets: For real-time updates, prefer WebSocket over polling
See Also
- User Management API - Complete API documentation
- Error Handling - Handling rate limit errors