Getting Started
Rate Limits
The API is rate limited to keep it fast and fair for everyone. Limits are applied per API key.
The limit
Each key may make up to 1,000 requests per 60 seconds. The window is rolling. When you exceed it, the API responds with 429 Too Many Requests and a Retry-After header.
Design for limits, not against them
Cache responses you read often, batch where the API allows it, and prefer webhooks over polling so you only call the API when something actually changes.
Response headers
Every response carries your current rate-limit state:
Example response headers
HTTP/1.1 200 OK
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 994
X-RateLimit-Reset: 1781000460Handling 429
When you receive a 429, wait for the period in Retry-After and retry with exponential backoff plus jitter.
429 Too Many Requests
{
"statusCode": 429,
"message": "ThrottlerException: Too Many Requests",
"error": "Too Many Requests"
}Retry with backoff
async function request(url, options = {}, attempt = 0) {
const res = await fetch(url, options);
if (res.status !== 429) return res;
const retryAfter = Number(res.headers.get("Retry-After")) || 1;
// Exponential backoff with jitter, capped at 30s.
const backoff = Math.min(retryAfter * 1000 * 2 ** attempt, 30_000);
const jitter = Math.random() * 250;
await new Promise((r) => setTimeout(r, backoff + jitter));
if (attempt >= 5) throw new Error("Rate limit: retries exhausted");
return request(url, options, attempt + 1);
}See also the full Errors reference.