Skip to content
Meirra
Back to API Documentation

Overview

Rate limits protect the API from abuse and ensure fair usage for all customers. Each API key has a request quota that resets hourly. When you exceed your limit, requests will return a 429 (Too Many Requests) error until the limit resets.

Default Limits

Standard rate limits per API key: | Limit Type | Limit | Reset Period | |------------|-------|-------------| | Requests | 1,000/hour | Hourly | | Burst | 100/minute | Per minute | | Batch size | 100 items | Per request | **Per-endpoint limits:** • Email verification: 1,000/hour • Email finding: 500/hour • Enrichment: 200/hour • Lead search: 500/hour • SEO analysis: 200/hour Need higher limits? Contact support to discuss enterprise options.

Rate Limit Headers

Every response includes rate limit information in the headers: ``` X-RateLimit-Limit: 1000 X-RateLimit-Remaining: 856 X-RateLimit-Reset: 1709046000 Retry-After: 3600 ``` | Header | Description | |--------|-------------| | `X-RateLimit-Limit` | Maximum requests allowed per hour | | `X-RateLimit-Remaining` | Requests remaining in current window | | `X-RateLimit-Reset` | Unix timestamp when limit resets | | `Retry-After` | Seconds until you can retry (only on 429) |

Handling Rate Limits

When you receive a 429 response, implement retry logic: ```javascript async function makeRequest(url, options) { const response = await fetch(url, options); if (response.status === 429) { const retryAfter = response.headers.get('Retry-After') || 60; await sleep(retryAfter * 1000); return makeRequest(url, options); // Retry } return response; } ``` **Exponential backoff:** For repeated failures, use exponential backoff with jitter: ```javascript const delay = Math.min(baseDelay * 2 ** attempt + randomJitter, maxDelay); ```

Best Practices

Optimize your API usage to avoid rate limits: • **Use batch endpoints** - Verify 100 emails in one request instead of 100 requests • **Cache responses** - Don't re-fetch data you already have • **Spread requests** - Don't burst all requests at once • **Monitor headers** - Track remaining quota proactively • **Handle errors gracefully** - Implement proper retry logic • **Use webhooks** - For async operations, wait for callbacks instead of polling **Queue-based approach:** ```javascript // Process requests with rate limiting const queue = new RateLimitedQueue({ maxConcurrent: 10, minDelay: 100 // ms between requests }); await queue.addAll(requests); ```

Need More Help?

Contact Support