Rate limits
Three per-key tiers: free 60, pro 300, enterprise 6000 requests / minute. Sliding-window enforcement. Your tier is on the X-RateLimit-Tier header of every response and on /whoami.
Tier table
| Tier | Per-minute limit | Monthly quota | Who gets it |
|---|---|---|---|
free | 60 req/min | Unlimited | Trial keys + Professional default |
pro | 300 req/min | Unlimited | Production integrations on request: email hello@beresol.eu |
enterprise | 6,000 req/min | Unlimited | Partner integrations (e.g. GovClipping). Custom contract. |
The limit uses a sliding window over the last 60 seconds, not fixed calendar minutes. Bursting is allowed as long as you stay under your tier's ceiling in any rolling 60-second window.
Response headers
Every response carries:
X-RateLimit-Limit: your tier's per-minute ceiling (60 / 300 / 6000).X-RateLimit-Remaining: calls left in the current 60-second window.X-RateLimit-Tier:free,pro, orenterprise.
On 429 responses, additionally:
Retry-After: seconds to wait before retrying.
Check your limit any time
Your current limit and remaining quota ride on the response headers of every authenticated call. Use -i (or -D -) on any cheap endpoint and read the X-RateLimit-* headers:
curl -i -H "Authorization: Bearer $BRUBRU_API_KEY" \
"https://brubru.beresol.eu/api/v2/proprietary/guides?limit=1"
# HTTP/1.1 200 OK
# X-RateLimit-Tier: enterprise
# X-RateLimit-Limit: 6000
# X-RateLimit-Remaining: 5998
When you hit the limit
You get a 429 rate_limited response. The right behaviour is:
- Read
Retry-After. - Sleep that many seconds.
- Retry the same request.
import time, httpx
def call_with_backoff(url, headers):
for attempt in range(5):
r = httpx.get(url, headers=headers)
if r.status_code != 429:
return r
wait = int(r.headers.get("Retry-After", 60))
time.sleep(wait)
r.raise_for_status()
Good citizenship
- Cache aggressively. Our data refreshes daily for most endpoints. Don't poll faster than you need.
- Batch filters. Ask for
limit=100once instead of 10 calls withlimit=10. - Use
If-None-Matchwhen we expose ETags (June 2026 roadmap). - Monitor Newman runs. In CI, set
newman run --delay-request 1000to pace calls.
Need higher limits?
Email hello@beresol.eu with your use case. pro upgrades are usually approved within 24h for production integrations. enterprise is a custom contract for partner integrations: bundling resale rights, SLA, and the 6,000 req/min ceiling.
Next
Head to Endpoints for the full reference of all 82 routes across 36 folders.