Conventions
Rate limits
Each API key may make 500 requests a minute. Every response says how many are left, and a 429 says exactly how long to wait.
- Default limit
- 500 requests per minute, per key
- Window
- One minute
The limit applies per API key: two integrations with their own keys do not slow each other down. Use in the app does not count against it. 500 a minute is the default and may change; read the headers rather than hard-coding the number.
Requests without a valid key — no Authorization header, a malformed key, or a key that was revoked — count against separate, much smaller budgets per client address, so a broken integration is slowed down quickly. Fix the key rather than retrying: those requests answer 401 and then 429.
Every response carries the state of the current window:
HTTP/1.1 200 OK
Content-Type: application/json
X-RateLimit-Limit: 500
X-RateLimit-Remaining: 497
X-RateLimit-Reset: 1791623520
X-Request-Id: 5f0c2e7a-9b4d-4a1c-8e3f-6d2b9a7c1e05
X-API-Version: 2026-10-10| Header | Meaning |
|---|---|
X-RateLimit-Limit | Requests allowed in the window. |
X-RateLimit-Remaining | Requests left in the window. |
X-RateLimit-Reset | When the window resets, as a Unix timestamp in seconds. |
Retry-After | On 429 only: seconds to wait. |
Requests over the limit are refused with 429 rate_limited and are not applied. Wait the number of seconds in Retry-After — also in details.retry_after — then carry on.
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 23
X-RateLimit-Limit: 500
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1791623520
{
"error": {
"code": "rate_limited",
"message": "Too many requests.",
"details": { "retry_after": 23 },
"request_id": "5f0c2e7a-9b4d-4a1c-8e3f-6d2b9a7c1e05"
}
}- Subscribe to webhooks instead of polling for changes.
- Page with
limit=100— one request instead of two. - Ask for what changed:
updated_at[gte]=<your last sync>on any list. - For bulk jobs, slow down when
X-RateLimit-Remainingruns low, rather than waiting for the429. - Honour
Retry-Afterexactly. Hammering a429does not shorten the wait.
The error-handling client on the Errors page retries a 429 after Retry-After.