On this page
Rate Limits
Requests are rate limited per business using a fixed window. Design syncs and pollers to stay within the budget and to back off when throttled.
The Limit
Two budgets apply per business, both enforced independently:
- A short burst budget of 300 requests per 60-second window.
- A daily budget of 10,000 requests per 24-hour window.
Each window is fixed and the budgets are per business: all of a business's API keys share the same budget. Exhausting either budget returns 429 until that window resets.
Headers
Every authenticated response carries the current budget state, so you can throttle proactively rather than waiting for a rejection:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Requests permitted in the current burst (60-second) window. |
X-RateLimit-Remaining | Requests remaining in the current burst window. |
X-RateLimit-Reset | Unix timestamp when the burst window resets and the budget refills. |
X-RateLimit-Limit-Day | Requests permitted in the current daily (24-hour) window. |
X-RateLimit-Remaining-Day | Requests remaining in the current daily window. |
X-RateLimit-Reset-Day | Unix timestamp when the daily window resets and the budget refills. |
When You Exceed It
Once either budget is exhausted the API responds 429 with the rate_limited error code and a Retry-After header (seconds until the exhausted window resets). The Remaining header for the exhausted window will be 0.
HTTP/1.1 429 Too Many Requests
Retry-After: 23
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1781560330
X-RateLimit-Limit-Day: 10000
X-RateLimit-Remaining-Day: 4173
X-RateLimit-Reset-Day: 1781603530
{
"success": false,
"error": { "code": "rate_limited", "message": "API rate limit exceeded. Please retry later." }
}
Recommended Handling
- Honour
Retry-Afteron a429: wait at least that long before retrying. - Watch
X-RateLimit-Remainingand slow down as it approaches zero rather than sprinting into a429. - Back off exponentially on repeated
429s, and add jitter so parallel workers don't retry in lockstep. - Prefer keyset pagination (the
cursorparameter) andview=simple/fields=to fetch more per request and reduce call volume. - Spread polling: for lead/message sync, poll on an interval comfortably within the budget rather than tight-looping (see polling guidance).






