Quickstart
Rivo tracks every big trade on Polymarket and Kalshi, who placed it, and how it ended. The API does two things with that: it scores rules against the history, and it answers who is worth copying, then lets you follow or copy them. Three steps from zero to a scored backtest.
01Create an API key
Keys live in Settings, under Developer. Create one, copy it, and store it somewhere safe: it is shown once and we keep only a hash. Keys require an active subscription.
Pick the scopes as you create it. A new key gets read, which covers every lookup and every backtest on this page. Add write to follow traders, save strategies or arm exit rules, and trade only if it needs to place orders. In the app these are called bots: a trader bot is a follow, a rule bot is a strategy. Scopes cannot be widened later, and a key you cannot widen is a key that cannot surprise you; see Authentication.
02Connect your agent
The MCP server is remote, so there is nothing to install. Add it to Claude, Cursor or any client that speaks the protocol, then ask for a strategy in plain English.
{
"mcpServers": {
"rivo": {
"url": "https://api.rivo.markets/mcp",
"headers": { "Authorization": "Bearer rivo_live_..." }
}
}
}Client-specific setup, including the Claude Code one-liner, is on the MCP server page.
03Or call the REST API
Everything the MCP tools can do is a plain REST endpoint underneath. Score a rule against the last 90 days of resolved markets:
curl -X POST https://api.rivo.markets/v1/backtest \
-H "Authorization: Bearer rivo_live_..." \
-H "Content-Type: application/json" \
-d '{
"criteria": {
"priceMax": 0.2,
"minAmountUsd": 10000,
"eventTypes": [
"open",
"add",
"flip"
]
},
"stake": 100
}'import requests
r = requests.post(
"https://api.rivo.markets/v1/backtest",
headers={"Authorization": "Bearer rivo_live_..."},
json={
"criteria": {
"priceMax": 0.2,
"minAmountUsd": 10000,
"eventTypes": ["open", "add", "flip"],
},
"stake": 100,
},
)
print(r.json()["data"])const res = await fetch("https://api.rivo.markets/v1/backtest", {
method: "POST",
headers: {
Authorization: "Bearer rivo_live_...",
"Content-Type": "application/json",
},
body: JSON.stringify({
criteria: {
priceMax: 0.2,
minAmountUsd: 10000,
eventTypes: ["open", "add", "flip"],
},
stake: 100,
}),
});
const { data } = await res.json();{
"success": true,
"data": {
"matched": 489,
"settled": 449,
"wins": 105,
"losses": 344,
"open": 40,
"winRate": 0.234,
"stakeUsd": 100,
"stakedUsd": 44900,
"pnlUsd": 25910,
"returnPct": 57.7,
"window": { "sinceDays": 90, "stake": 100 }
}
}Paper results at a flat stake per trade, on markets that already resolved. Not investment advice.
Next
- →Describe the universe first, so your rules match something.
- →Sweep a threshold to find where it actually matters, then validate with holdout.
- →Deploy what works as a live strategy that keeps claiming matching trades.
- →Or start from people rather than rules: rank traders, then replay one at a flat stake before believing the leaderboard.
- →Stop polling. Register a webhook or open the live stream.