Limits and fair use
Understand burst controls, organisation limits, search fair use, and analyst allowances.
Search is unlimited as a subscription entitlement: it has no monthly usage counter. To keep that promise useful to everyone, the API prevents flooding and bulk corpus extraction.
| Control | Default | Applies to |
|---|---|---|
| Burst | 15 requests / 10 seconds | API key or OAuth client |
| Sustained key rate | 60 requests / minute | API key or OAuth client |
| Organisation rate | 120 requests / minute | Entire organisation |
| Search fair use | 2,000 content calls / day | Entire organisation |
| Analyst hourly | 10 / credential, 20 / organisation | Analyst requests |
| Analyst concurrency | 2 running | Entire organisation |
| Analyst monthly | 100 initially | Entire organisation |
The daily search ceiling is an anti-scraping protection, not a billable quota. Contact support before a legitimate integration approaches it; approved workloads can be reviewed without changing the product's “unlimited search” entitlement.
Handling 429 responses
Respect Retry-After, add exponential backoff with jitter, and cap concurrency. Repeating the same request more aggressively will extend disruption and may trigger abuse controls.
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
for (let attempt = 0; attempt < 4; attempt++) {
const response = await fetch(url, options);
if (response.status !== 429) return response;
const retryAfter = Number(response.headers.get('retry-after') ?? 1);
await delay((retryAfter * 1000) + Math.random() * 500);
}Analyst responses include X-Agent-Limit, X-Agent-Remaining, and X-Agent-Reset. /v1/usage and the MCP viralspy_get_usage tool return the same organisation-level view.