Rate limits
120 requests per minute per key, counted over a fixed 60-second window and shared between the REST API and the MCP server.
Every response tells you where you stand
All three headers are present on success, not just on a rejection, so you can pace a client without having to hit the limit first to discover it.
X-RateLimit-Limit: requests allowed in the window, currently 120.X-RateLimit-Remaining: how many are left.X-RateLimit-Reset: seconds until the window rolls over.
Fan-out is charged per variant
sweep and compare run one scoring query per value or variant, so they are charged accordingly: a sweep across five values costs five requests, a comparison of three rules costs three. Everything else costs one.
This is still far cheaper than the alternative. One sweep across 20 values costs 20 requests but a single round trip; 20 separate backtest calls cost the same quota plus 19 round trips and 19 reasoning turns for an agent.
Request caps
sweep: 2 to 20 values per callcompare: 2 to 10 variants per call/v1/eventsandquery_whale_events: up to 200 rows per call/v1/traders/compare: 2 to 10 traders per call, charged per trader/v1/traders/{platform}/{traderId}: each extraincludesection past the first costs one request/v1/stream: 3 concurrent streams per key, charged one request per minute connected- Webhook endpoints: 5 per account
- Orders: $5,000 maximum notional per order, plus any per-key daily spend cap
sinceDays: 1 to 365 everywhere it appears- Active API keys: 10 per account
Handling 429
A limited request returns 429 with code QUOTA_EXCEEDED and a retry-after header holding the seconds until the window resets. Wait that long and retry; there is no penalty beyond the wait. Agents driving the MCP server get the same header at the HTTP layer.
Retrying a rejected order is a special case: reuse the original Idempotency-Key rather than generating a new one. See Errors.
If the limit is genuinely in your way, write in to info@rivo.markets and tell us what you are building.