Skip to main content
Developers/Docs/Rate Limits

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

TierRequests / minRequests / dayReveals / monthBatch size
Free301,00025010
Pro ($99/mo)12010,0005,00050
Team ($299/mo)30050,00025,000100
Enterprise (Custom)1,000500,000Unlimited500

Rate Limit Headers

Every API response includes headers showing your current rate limit status:

HeaderDescription
X-RateLimit-LimitYour per-minute request limit
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the window resets
X-DailyLimit-RemainingRequests remaining for the current day (UTC)
Retry-AfterSeconds 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-Remaining and throttle proactively before hitting zero.
  • Use batch endpoints (contacts, signals) to reduce request count.
  • Implement exponential backoff starting from the Retry-After value.
  • 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.