429; cross it and you’ll get told exactly how long to wait.
The numbers
The bucket starts full (60 tokens) and refills at 1 token/second up to
the cap. Each request consumes 1 token regardless of which endpoint or
how big the response is.
Headers on every response
The four headers below ride on every API response, success or failure:
A simple polite client just respects
Retry-After whenever it sees
429:
When you hit 429
Retry-After seconds, then retry. The bucket refills
continuously — you don’t need to wait until it’s full to issue the
next request.
Tips
- Cache aggressively. History rows are immutable once written for a given
(universe, day, engine)triple — cache them client-side and you’ll rarely re-query. - Use
/tabs/{tab}instead of N/metrics/{metric}calls. One round-trip vs five. - Use
/historyto grab everything once a day. A single 2 MB response beats 50 small ones. - Spread bursts across keys if you’re running heavy back-fills. Multiple keys → multiple buckets.
Roadmap
- Tier-based limits — Enterprise customers will get higher buckets in a future release.
- Redis-backed counter — when we run multiple frontend instances, we’ll move the counter off in-process to keep the budget consistent across instances.