The hour is a sliding window. For a key it is kept by the minute: a request counts until the minute it was made in is
an hour old, so for 60 to 61 minutes. Without a key, a request counts for 3,600 seconds. Every request the key is allowed
to make counts, whatever the endpoint and whatever its answer; one refused for a missing scope does not. A key’s
rate_limit is in GET /api/v1/api-keys/, and a key with the admin scope can change it with
PATCH /api/v1/api-keys/{id}/. A value outside 1 to 100,000 is refused with 400, naming rate_limit.
Headers
Every answer to a request with a key carries the state of its limit:When you hit it
The API answers429 Too Many Requests with a Retry-After header, in seconds:
Retry-After seconds, then retry. The Python SDK waits and retries by itself, up to 3 times. See
Errors for a retry loop.
Stay under it
- Use webhooks instead of polling. One webhook per job replaces every status check.
- Poll gently. If you poll, every 5 to 30 seconds is enough. The SDK starts at 2 seconds and backs off to 30.
- Page with the largest page. Read results with
limit=100. - Batch your input. One job with 50 profiles is one create request and one set of polls; 50 jobs are 50.