Skip to content

Rate limits

Per-partner API rate limits and what to do when you exceed them.

Limits

Limits apply to every partner by default. If you need a higher limit, request one through our support channels with your use case and expected traffic.

429 responses & Retry-After

When you exceed your limit, the API returns 429 Too Many Requests with a Retry-After header (wait time in seconds).

HTTP/1.1 429 Too Many Requests
Retry-After: 30
Content-Type: application/json; charset=utf-8
  • When Retry-After is present, wait for that duration before retrying.
  • Ignoring 429 responses and hammering the API can extend your limit period, or get your key suspended under the API usage policy.

Retry with exponential backoff

For cases where Retry-After is absent, and for transient errors (including 500), we recommend exponential backoff — increasing the interval between retries.

  1. First failure → wait 1 second, then retry
  2. Another failure → 2 seconds → 4 seconds → 8 seconds, doubling the wait each time
  3. Cap the retries (for example, 5) and the maximum wait (for example, 60 seconds), and fail the operation beyond that
  4. Add random jitter to the wait so concurrent retries do not pile up
import random
import time

def call_with_backoff(request_fn, max_retries=5):
    for attempt in range(max_retries):
        response = request_fn()
        if response.status_code != 429:
            return response
        retry_after = response.headers.get("Retry-After")
        wait = int(retry_after) if retry_after else (2**attempt) + random.random()
        time.sleep(wait)
    raise RuntimeError("Rate limit retry attempts exhausted")

See also