Updated Jul 31, 2026
On this page

Rate Limits & Quotas

Two independent limits govern API usage:

Technical rate limit (429)

Per-user requests-per-minute cap enforced on every endpoint. When exceeded, the API returns 429 Too Many Requests. Back off and retry after the Retry-After header interval.

Billing quota (402)

Monthly request budget from your plan. When exhausted, the API returns 402 Payment Required. Quota resets on the first day of each calendar month (UTC).

What counts against the quota

Only successful responses (2xx) decrement the monthly quota:

Response Monthly quota Per-minute rate limit
2xx decremented counted
304 Not Modified not decremented counted
4xx / 5xx not decremented counted

The per-minute limit counts every request regardless of outcome — it is enforced before the response is produced.

Statistics endpoints — /stats/, /news/stats/, /jobs/stats/ — never decrement the quota, so you can poll them freely (the per-minute limit still applies). Requests made through the MCP server are not metered at all.

Handling limits in code

import time, requests

def call_with_retry(url, headers, max_retries=3):
    for attempt in range(max_retries):
        response = requests.get(url, headers=headers)
        if response.status_code == 429:
            retry_after = int(response.headers.get("Retry-After", 5))
            time.sleep(retry_after)
            continue
        response.raise_for_status()
        return response.json()
    raise RuntimeError("Max retries exceeded")

See Errors for the full error-envelope format.