Compare traders
MCP tool: compare_traders
Use this rather than calling the trader endpoint repeatedly when choosing between candidates. One stake, one window, one call, and the comparison is actually like for like.
Charged per trader against the rate limit, since it runs a replay each.
Body parameters
tradersobject[]required2 to 10 entries.
platformstringrequired"polymarket" or "kalshi".
traderIdstringrequiredWallet or nickname.
stakenumberdefault: 100Applied to every trader.
sinceDaysnumberdefault: 907 to 90.
Response
Each result is the same shape the trader endpoint returns under backtest, truncated here. Compare returnPct rather than pnlUsd when the settled counts differ.
curl -X POST https://api.rivo.markets/v1/traders/compare \
-H "Authorization: Bearer rivo_live_..." \
-H "Content-Type: application/json" \
-d '{
"traders": [
{
"platform": "polymarket",
"traderId": "0x9f2c...b7a4"
},
{
"platform": "kalshi",
"traderId": "riverboat"
}
],
"stake": 250
}'import requests
r = requests.post(
"https://api.rivo.markets/v1/traders/compare",
headers={"Authorization": "Bearer rivo_live_..."},
json={
"traders": [
{
"platform": "polymarket",
"traderId": "0x9f2c...b7a4",
},
{
"platform": "kalshi",
"traderId": "riverboat",
},
],
"stake": 250,
},
)
print(r.json()["data"])const res = await fetch("https://api.rivo.markets/v1/traders/compare", {
method: "POST",
headers: {
Authorization: "Bearer rivo_live_...",
"Content-Type": "application/json",
},
body: JSON.stringify({
traders: [
{
platform: "polymarket",
traderId: "0x9f2c...b7a4",
},
{
platform: "kalshi",
traderId: "riverboat",
},
],
stake: 250,
}),
});
const { data } = await res.json();response
{
"success": true,
"data": {
"results": [
{
"platform": "polymarket",
"traderId": "0x9f2c...b7a4",
"result": { "settled": 171, "wins": 104, "pnlUsd": 9184.22, "returnPct": 21.48 }
},
{
"platform": "kalshi",
"traderId": "riverboat",
"result": { "settled": 96, "wins": 51, "pnlUsd": -430.15, "returnPct": -1.79 }
}
]
}
}