On this page
Rate Limits#
The API enforces per-endpoint rate limits to protect shared infrastructure. Exceeding one is a transient, retryable condition — not an error in your integration.
Current Limits#
When you exceed the rate limit, the API responds with a 429 status code and a Retry-After header indicating when to retry.
| Endpoints | Sustained | Burst |
|---|---|---|
| All endpoints | 20 req/s | 50 req/s |
Handling Rate Limits#
Implement exponential backoff with the Retry-After header for robust rate limit handling:
async function fetchWithRetry(url, options, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, options)
if (response.status !== 429) return response
const retryAfter = response.headers.get("Retry-After") || "1"
await new Promise((r) => setTimeout(r, parseInt(retryAfter) * 1000))
}
throw new Error("Max retries exceeded")
}Rate limits are separate from billing. For what an operation costs and how usage is metered, see How Credits Work.