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:

  1. Back off: wait, then retry with exponential backoff (e.g. 1s, 2s, 4s, 8s) plus jitter.
  2. Cap retries: give up after a few attempts and surface the error.
  3. 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/countries and city/airport lookups change rarely. Cache them for hours.
  • Reuse search context: searches return a sid and a header; paginate with page instead of re-querying from scratch.
  • Debounce autocomplete: wait for the user to pause typing before calling /search/autocomplete or /search/fastAutocomplete.
  • Lock late: only call /orders/lock when the customer is ready to buy; a lock holds the ticket for just 5 minutes.

Run load tests against the sandbox environment, not production.