Rate limits
Each API key has a request limit that depends on your Space's plan tier.
The limit is counted per key, in one-minute windows. The number of requests per minute comes from your Space's plan.
The per-plan figures are not published yet. Read your own limit from the RateLimit-Limit header.
If your plan has no figure set, the limit is 0 and every call answers 429 rate_limited: the
API is never unlimited. Contact XQUARE support if that happens.
Headers on every response
| Header | Meaning |
|---|---|
RateLimit-Limit | Requests allowed per minute for this key |
RateLimit-Remaining | Requests left in the current one-minute window |
RateLimit-Reset | Seconds until the window resets |
When you hit the limit
You get 429 Too Many Requests (code: rate_limited) with a Retry-After header — the number of seconds to wait.
Wait at least that long, then retry with the same Idempotency-Key.
HTTP/1.1 429 Too Many Requests
Retry-After: 12
Good practice:
- Back off on every
429; never retry in a tight loop. - Spread bulk jobs (imports, nightly syncs) over time.
- Prefer webhooks over polling — they cost you no requests.
Limits vs. credits
A rate limit caps how fast you call. Your plan's monthly action allowance caps how many
actions you take per calendar month (Asia/Jakarta). A sponsor redemption counts against the
allowance and costs its credits; when the allowance is used up you get
429 allowance_exhausted with Retry-After (seconds to the next month) and nothing is charged.
Key verifications are also limited per IP address, before the key is checked: every request
whose key is not already cached counts, valid or not, against a budget of 30 verifications per IP
address per minute. A verified key stays cached for about a minute, so a steady integration spends
about one verification per key per minute; many processes or keys behind one address share the
budget. Over it you get 429 rate_limited with Retry-After.