Rate limits
Stay within your plan's limits and build resilient integrations.
Rate limits protect the platform and keep responses fast for everyone. Exact limits depend on your plan. Contact [email protected] for the quotas attached to your account.
When you hit a limit
Requests over the limit return 429 Too Many Requests. When that happens:
- Back off: wait, then retry with exponential backoff (e.g. 1s, 2s, 4s, 8s) plus jitter.
- Cap retries: give up after a few attempts and surface the error.
- Don’t hammer: a tight retry loop will only extend the throttling.
async function call(url, opts, attempt = 0) {
const res = await fetch(url, opts);
if (res.status === 429 && attempt < 4) {
const wait = (2 ** attempt) * 1000 + Math.random() * 250;
await new Promise((r) => setTimeout(r, wait));
return call(url, opts, attempt + 1);
}
return res;
}
Reduce how many calls you make
- Cache catalogs:
/orders/countriesand city/airport lookups change rarely. Cache them for hours. - Reuse search context: searches return a
sidand aheader; paginate withpageinstead of re-querying from scratch. - Debounce autocomplete: wait for the user to pause typing before calling
/search/autocompleteor/search/fastAutocomplete. - Lock late: only call
/orders/lockwhen the customer is ready to buy; a lock holds the ticket for just 5 minutes.
Run load tests against the sandbox environment, not production.

API