Rate Limits
Rate limits protect the API from abuse and ensure fair usage across all customers. Understanding and properly handling rate limits is essential for building reliable integrations.
Rate limits are applied per API key and are calculated using a sliding window algorithm.
Rate Limit Tiers
Rate limits vary by plan tier and endpoint type.
| Plan | Requests/min | Requests/day | Burst Limit |
|---|---|---|---|
| Starter | 60 | 10,000 | 100 |
| Professional | 300 | 100,000 | 500 |
| Enterprise | 1,000 | 1,000,000 | 2,000 |
| Custom | Unlimited* | Unlimited* | Custom |
* Subject to fair use policy and infrastructure capacity
Endpoint-Specific Limits
| Endpoint | Rate Limit | Notes |
|---|---|---|
| /v1/leads/verify | Standard | Real-time verification |
| /v1/leads/batch | 10/min | Max 1000 leads per batch |
| /v1/ping | 2x Standard | Higher limit for ping/post |
| /v1/analytics | 30/min | Heavy computation queries |
Response Headers
Every API response includes headers to help you track your rate limit status.
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 245
X-RateLimit-Reset: 1705312800
X-RateLimit-Window: 60X-RateLimit-LimitMaximum requests allowed in the current windowX-RateLimit-RemainingRequests remaining in the current windowX-RateLimit-ResetUnix timestamp when the window resetsX-RateLimit-WindowWindow size in secondsHandling 429 Errors
When you exceed the rate limit, the API returns a 429 Too Many Requests response.
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 30
{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please retry after 30 seconds.",
"retry_after": 30
}
}Implementing Retry Logic
async function apiRequestWithRetry(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;
console.log(`Rate limited. Retrying in ${retryAfter}ms`);
await new Promise(r => setTimeout(r, retryAfter));
continue;
}
return response;
}
throw new Error('Max retries exceeded');
}Best Practices
Start with short delays and increase exponentially on repeated failures.
Track remaining requests and proactively slow down before hitting limits.
Process multiple leads in a single request to reduce API calls.
Add randomness to retry delays to prevent thundering herd problems.
Requesting Higher Limits
If your use case requires higher rate limits, contact our team to discuss custom plans.
Enterprise customers can request custom rate limits based on their specific needs and infrastructure requirements.
Contact Sales