Rate limits
Per key
Section titled “Per key”Every call made with a key counts against that key’s limit, per minute on the clock. By default:
| Key | Calls a minute |
|---|---|
| Website (publishable) key | 600 |
| Secret key | 120 |
The seller, or the marketplace’s team for one key, can set another limit. Every answer to a key’s call carries three headers:
| Header | Says |
|---|---|
RateLimit-Limit |
The key’s limit this minute |
RateLimit-Remaining |
Calls left this minute |
RateLimit-Reset |
Seconds until the minute ends |
Over the limit the answer is 429 RateLimited, with a Retry-After header
and retry_after_seconds in the problem.
Requests that send emails or codes
Section titled “Requests that send emails or codes”A few requests are also limited on their own, to stop abuse:
| Request | Limit, by default |
|---|---|
POST /v1/public/auth/sign-in-link |
5 links an hour for one email, 20 an hour from one address |
POST /v1/public/auth/passkeys/sign-in/options |
20 an hour from one address |
POST /v1/public/bookings/{ref}/contact-changes |
5 an hour for one booking |
Past one of these the answer is also 429 RateLimited, with
retry_after_seconds: wait that long before trying again, and tell the
traveller when they can.
“One address” is the traveller’s IP address. Since your server makes the
request, pass the traveller’s address on in X-Forwarded-For, first in
the list; otherwise every traveller on your site shares your server’s
limit.
Stay within them
Section titled “Stay within them”- Cache catalog reads (trips, pages, menus) on your server for a short time; never cache quotes, holds or bookings.
- Watch
RateLimit-Remaining, and slow down before it reaches 0. - On a
429, wait as long asRetry-Aftersays, then try again; don’t retry in a tight loop. - Spread batch jobs, such as rebuilding a sitemap, over time.