Skip to content

Rate limits

We apply rate limits per API key, measured in requests per minute (RPM).

PlanRPM
Free20
Monthly200
Annual300
Enterprise1500 (custom)

Headers we set

Every response includes the current rate-limit posture:

x-ratelimit-limit: 200
x-ratelimit-remaining: 187
x-ratelimit-reset: 1716040860

x-ratelimit-reset is a unix timestamp at which your bucket refills.

When you exceed the limit

We return HTTP 429 with the JSON error body:

{
"error": { "status": 429, "code": "rate_limited", "message": "Try again in 32 seconds." },
"request_id": "req_abc"
}

A retry-after header gives you the wait in seconds. Sleep, then retry — your client SHOULD honor it.

Quotas

Independent of RPM, every call charges credits from your plan balance. When the balance hits zero we return 429 quota_exceeded instead. Top up or wait for the next cycle to resume.

Best practices

  • Don’t poll faster than 1 request per second per endpoint.
  • For bulk work, use /v1/stays/batch (up to 50 entries per call) or walk /v1/search pages via nextPageToken. Page tokens are cheaper than re-querying.
  • Cache idempotent reads on your side too. We cache detail rows for 24h internally; you don’t need to re-fetch every hour.

Next