Skip to main content

The two layers

Every request is evaluated against two independent limits on the same key.
  1. Sliding 60-second window — your tier’s requests-per-minute ceiling.
  2. 1-second burst cap — your tier’s requests-per-second ceiling.
Whichever limit you hit first triggers a 429 rate_limited response.

Per-tier ceilings

Exact values are the source of truth in Tiers and Quotas and are derived directly from api/config.py.

Headers on every response

Every response — success or failure — includes your current window state. A 429 additionally carries:

The 429 response body

Correct backoff pattern

Respect Retry-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.
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.
See Tiers and Quotas for exact values per tier.