Getting started
Quickstart
Rivo tracks every big trade on Polymarket and Kalshi and how each one ended. The API scores rules against that history and deploys the ones that hold up. 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; see Authentication for the details.
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.