Rate Limits

Understand request quotas, response headers, and how to handle rate-limited responses.

Default limits

Rate limits are applied per API key using a sliding window. Each key has a general requests-per-minute (RPM) limit, plus tighter caps on expensive operations.

LimiterApplies toDefault
GeneralAll endpoints120 RPM
DealMap generationPOST /dealmap/generate20 RPM
DealMap generation (workspace)POST /dealmap/generate, all keys in a workspace combined40 RPM
OutreachPOST /outreach60 RPM

The general RPM limit may vary by plan; 120 requests per minute is the default per key. The DealMap generation (20 RPM) and outreach (60 RPM) caps are hard limits applied to all API keys, and DealMap generation is also capped at 40 RPM per workspace across all of its keys.

Batch in parallel

DealMap generation takes roughly 15–45 seconds per company, so work through a list in parallel rather than one request at a time: up to 10 concurrent DealMap generations and up to 10 concurrent outreach requests per key. On a 429, wait the Retry-After seconds and retry only the rejected requests.

Response headers

Every API response includes rate-limit headers so you can track your remaining quota:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the current window.
X-RateLimit-RemainingRequests remaining in the current window.
X-RateLimit-ResetSeconds until the window resets.
Example response headers
HTTP/1.1 200 OK
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 42
Content-Type: application/json

Handling 429 responses

When you exceed the rate limit, the API returns 429 Too Many Requests. Use the X-RateLimit-Reset header to determine when to retry.

{
  "error": "Rate limit exceeded. Try again in 18 seconds."
}

Retry strategy

Read X-RateLimit-Reset and wait that many seconds before retrying. If the header is missing, use exponential backoff starting at 1 second.

Rate Limits | DealSurface Docs