The two layers
Every request is evaluated against two independent limits on the same key.- Sliding 60-second window — your tier’s requests-per-minute ceiling.
- 1-second burst cap — your tier’s requests-per-second ceiling.
429 rate_limited response.
Per-tier ceilings
| Tier | Requests / minute | Burst (req / sec) |
|---|---|---|
| Watch | 30 | 5 |
| See | 120 | 20 |
| Know | 600 | 60 |
api/config.py.
Headers on every response
Every response — success or failure — includes your current window state.| Header | Meaning |
|---|---|
X-RateLimit-Limit | Your tier’s per-minute ceiling. |
X-RateLimit-Remaining | Requests remaining in the current 60-second window. |
X-RateLimit-Reset | UNIX seconds until the window resets. |
429 additionally carries:
| Header | Meaning |
|---|---|
Retry-After | Seconds to wait before retrying. Always present on 429. |
The 429 response body
Correct backoff pattern
RespectRetry-After. Do not retry faster. Do not retry synchronously in a tight loop. Use jitter.
Python
Node
PowerShell
Planning your request budget
The following heuristics work well in practice.- Polling dashboards: for Watch-tier (30 rpm) poll each topic no faster than every 10 seconds. For See-tier (120 rpm) every 2 seconds is fine.
- Batch pipelines: serialise requests, not parallelise, at Watch-tier. At See and Know you can safely run two to six parallel workers.
- Evidence drill-downs: post fetches are the slowest endpoints (500–1000 ms). Stagger them.
Related quotas
Rate limits are distinct from the quotas below, each enforced separately.- Alert subscriptions — cap on the number of active webhooks per key.
- Custom watchlists — cap on the number of custom scopes per client.
- Evidence lookback — maximum age of posts returned by evidence endpoints.