Skip to content
API Reference

Rate Limits

Per-endpoint request limits, the 429 contract, and retry with exponential backoff.

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.

EndpointsSustainedBurst
All endpoints20 req/s50 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.