scripx_test_…) are unmetered.
Headers on every response
You never have to guess where you stand. Every authenticated response carries the live numbers:
The same numbers are available as JSON at
GET /v1/usage.
When you hit a limit
Exceeding either the per-minute rate or the monthly quota returns:429 and a Retry-After header.
Handling 429 correctly
- On a
429, sleep for theRetry-Afterseconds, then retry the same request. - Watch
X-RateLimit-Remainingand slow down before you hit zero, rather than sprinting into the wall. - Spread bulk work: prefer
POST /v1/orders:batch(up to 500 orders in one call) over hundreds of single calls. - Never key retry logic on the
messagestring; branch on the stablecode(rate_limited). See Errors.
Idempotency and retries
Because retries are a normal part of living within a rate limit, make them safe. Send anIdempotency-Key on every POST /v1/orders: re-sending the same key returns the original order instead of creating a second one, so a retry after a 429 or a network blip can never double-place.
The public surface
The no-key public rate index and enquiry endpoints are rate-limited per IP, independently of any API key:- Rate endpoints (
/public/rates*) use a normal per-IP budget and are CDN-cacheable. - Enquiry endpoints (
/public/enquiry/*) use a stricter per-IP budget.
retry_after_s hint in its detail. These limits protect the open surface and are separate from your metered key quota.
Related
- Authentication, the header, scopes and error codes.
- Usage, the live meter as JSON.
- Errors, the full error contract.