Skip to main content
Every API key gets a per-key budget. Stay inside it and you’ll never see a 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

Wait at least 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 /history to 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.
Both of these are transparent to the API surface — the headers stay the same, just the numbers change.