The limit
Every API key gets a sliding-window rate limit of 60 requests per minute. The counter resets one request at a time as older requests fall out of the trailing 60-second window. Bursts up to 60 in the same second are allowed; the 61st in the same 60-second window is rejected. The per-minute cap is a burst shaper. Your monthly quota (see Authentication) is the primary volume control.Rate-limit response
When the limit trips, the API returns HTTP429 with the standard
error envelope and a Retry-After header in seconds:
Retry-After and retry_after is the number of seconds
until the oldest in-window request expires and a fresh slot opens.
Rate-limit headers on every response
Every successful response also carries usage telemetry:
Cache the last-seen
X-RateLimit-Remaining in your client and pace
outbound calls when it drops below your safety threshold.
Recommended retry pattern
The official SDKs already implement this. If you are building your own client:- On
429, sleep forRetry-Afterseconds plus a small jitter (100 to 500 ms). - Retry once. If the second attempt also returns
429, back off exponentially (2, 4, 8 seconds capped at 60). - Never retry
4xxresponses other than429or408. - Retry
5xxat most twice.
Bulk instead of loops
If you find yourself firing dozens of/v1/calc requests in a tight
loop, switch to /v1/calc/bulk. One bulk call with 500 rows counts
as one request against the rate limit and consumes one entry against
the monthly quota, versus 500 rows sent one at a time (500 requests,
500 quota entries, guaranteed rate-limit trips).
/v1/compare fans out up to 6 origins in parallel server-side and
counts as one call. Prefer it over 6 sequential /v1/rates lookups.