Rate Limits
Rate limits help ensure fair usage and protect the API from abuse.
Default Limits
All API keys are created with the following default limits:
60 RPM
Requests per minute
10,000 RPD
Requests per day (resets at midnight UTC)
Rate Limit Headers
API responses include headers to help you track your rate limit status:
X-RateLimit-LimitYour rate limit (requests per minute)X-RateLimit-RemainingRemaining requests in the current windowX-RateLimit-ResetUnix timestamp when the rate limit resetsRetry-AfterSeconds to wait before retrying (only on 429 responses)Handling Rate Limits
When you exceed a rate limit, the API returns a 429 error:
{"error": {"code": "RATE_LIMIT_EXCEEDED","message": "Rate limit exceeded. Please try again later.","retryAfter": 30}}
Implement exponential backoff
When you receive a 429 error, wait before retrying. Use exponential backoff to gradually increase the wait time between retries.
Example retry logic:
async function fetchWithRetry(url, options, maxRetries = 3) {for (let attempt = 0; attempt < maxRetries; attempt++) {const response = await fetch(url, options);if (response.status === 429) {const retryAfter = response.headers.get('Retry-After') ||Math.pow(2, attempt) * 1000;await new Promise(r => setTimeout(r, retryAfter));continue;}return response;}throw new Error('Max retries exceeded');}
Best Practices
- Monitor rate limit headers in API responses
- Implement client-side rate limiting to stay under limits
- Use exponential backoff when retrying failed requests
- Batch operations when possible (e.g., import multiple contacts in one request)
- Cache responses when appropriate to reduce API calls
- Use webhooks instead of polling for status updates when available
Need Higher Limits?
If your use case requires higher rate limits, contact our support team to discuss your needs.
Enterprise plans include custom rate limits based on your requirements.