429 response immediately — no request is partially processed. Build your client to inspect the Retry-After header and pause before retrying, rather than hammering the endpoint in a tight loop.
Limits by endpoint
Limits are counted per API key in fixed one-minute windows: the counter starts again at the beginning of every minute. The one exception is the keyless price feed, which is limited per IP address.Sending 30 requests with invalid or missing API keys from the same IP address within one minute triggers an automatic 5-minute IP-level ban. During the ban every request from that IP returns
429 too_many_failed_auth, whichever key it carries. Fix the key and wait out the ban before retrying.429 response format
When you exceed a per-key limit the API returns:Retry-After header value is an integer number of seconds. On the per-key limits it is 60: waiting that long is always enough, because the counter resets at the start of the next minute.
The bulk snapshot endpoint uses a distinct error code when rate-limited:
GET /v1/public/prices is limited by IP address rather than by key, and its 429 body has no code field — branch on the status and Retry-After:
Handling 429s in your client
ReadRetry-After and sleep for at least that many seconds before retrying. The example below shows a simple retry loop in bash: