Rate limits
The gateway protects Brave websites: each partner key has a per-second and a per-day quota. Exceeding them returns 429 with a Retry-After header.
The two quotas
- Name
Per-second quota- Type
- integer
- Description
Sustained allowed rate (e.g. 10 calls/s). Exceeded → immediate
429.
- Name
Per-day quota- Type
- integer
- Description
Total daily volume (e.g. 20,000 calls/day), reset at midnight (company time). Exceeded →
429until the next day.
Your exact quotas are set with your Brave Booking contact and echoed in the ping response.
429 response
{
"error": {
"code": "rate_limited",
"message": "Quota exceeded. Retry later."
}
}
Response headers:
| Header | Value |
|---|---|
Retry-After | Delay to wait in seconds before retrying |
X-RateLimit-Limit-Second / X-RateLimit-Remaining-Second | Per-second quota and remaining |
X-RateLimit-Limit-Day / X-RateLimit-Remaining-Day | Daily quota and remaining |
Tracking your quota
GET /v1/{code}/ping returns your live quota status:
{
"status": "ok",
"quota": {
"perSecond": 10,
"perDay": 20000,
"remainingToday": 19982,
"resetAt": "2026-11-14T00:00:00+01:00"
}
}
Details: Ping.
Robots and crawlers
Declared robots are refused: any User-Agent presenting itself as an indexing robot is rejected (403). API calls must carry a User-Agent identifying your application, e.g. MyAgency-B2B/1.2.
Best practices
- Respect
Retry-Afterinstead of retrying in a loop; use exponential backoff (1s, 2s, 4s…). - Cache reads: catalogue and reference data change rarely (identical searches are already cached 5 minutes gateway-side).
- Avoid end-of-day bursts: spread your syncs across the reset window.
- Search is the most expensive call: a city search may query several hotels — don't run more than needed.