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-Afteris present, wait for that duration before retrying. - Ignoring
429responses 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.
- First failure → wait 1 second, then retry
- Another failure → 2 seconds → 4 seconds → 8 seconds, doubling the wait each time
- Cap the retries (for example, 5) and the maximum wait (for example, 60 seconds), and fail the operation beyond that
- 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
- Status codes and error body format: Error codes
- Obligation to respect rate limits: API usage policy