Rate Limits
API rate limits are enforced per API key and vary by subscription tier. Limits apply as requests per minute (RPM) and requests per day (RPD).
Limits by Tier
| Tier | Requests / min | Requests / day | Reveals / month | Batch size |
|---|---|---|---|---|
| Free | 30 | 1,000 | 250 | 10 |
| Pro ($99/mo) | 120 | 10,000 | 5,000 | 50 |
| Team ($299/mo) | 300 | 50,000 | 25,000 | 100 |
| Enterprise (Custom) | 1,000 | 500,000 | Unlimited | 500 |
Rate Limit Headers
Every API response includes headers showing your current rate limit status:
| Header | Description |
|---|---|
| X-RateLimit-Limit | Your per-minute request limit |
| X-RateLimit-Remaining | Requests remaining in the current window |
| X-RateLimit-Reset | Unix timestamp when the window resets |
| X-DailyLimit-Remaining | Requests remaining for the current day (UTC) |
| Retry-After | Seconds to wait before retrying (only on 429 responses) |
Example Response Headers
http
HTTP/1.1 200 OK X-RateLimit-Limit: 120 X-RateLimit-Remaining: 87 X-RateLimit-Reset: 1711540800 X-DailyLimit-Remaining: 9234 Content-Type: application/json
Handling 429 Responses
When you exceed the rate limit, you receive a 429 status with a Retry-After header:
http
HTTP/1.1 429 Too Many Requests
Retry-After: 12
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1711540812
{
"error": {
"code": 429,
"type": "rate_limit_exceeded",
"message": "Rate limit exceeded. Retry after 12 seconds.",
"request_id": "req_abc123"
}
}Best Practices
- Monitor
X-RateLimit-Remainingand throttle proactively before hitting zero. - Use batch endpoints (contacts, signals) to reduce request count.
- Implement exponential backoff starting from the
Retry-Aftervalue. - Cache responses client-side when data freshness allows.
- Use webhooks or SSE streams instead of polling for real-time data.
- Contact support if you need higher limits for a specific use case.