Inspect one trader
MCP tool: get_trader
The leaderboard ranks traders. This says whether the record survives a flat-stake replay, which is the question that matters before following anyone.
include controls what comes back. The default is profile and backtest together, because that is the shape of the actual decision. Each extra section costs one more call against the rate limit, since each is another query.
traderId is a wallet address on Polymarket and a nickname on Kalshi.
Query parameters
includestringdefault: profile,backtestComma-separated: "profile", "backtest", "trades". An unrecognised value falls back to the default rather than erroring.
stakenumberdefault: 100Hypothetical stake per trade for the replay. Return percentage is stake-invariant.
sinceDaysnumberdefault: 90Replay window, 7 to 90.
Response
backtest is null unless include asks for it, and trades is null unless include asks for it. Only buys ever settle, so the replay covers entries and reports the rest as open.
byCategory drops any bucket with fewer than 5 settled trades, so a missing category means too little evidence rather than no activity.
risk is null below 20 settled trades. maxDrawdownPct is null when the run never went above break-even, profitFactor is null when nothing was lost, and edgePts is win rate minus the average price paid, in percentage points, so a positive number means the market underpriced these trades.
curl "https://api.rivo.markets/v1/traders/polymarket/0x9f2c8e1b7a4d6035c8e1b7a4d60359f2c8e1b7a4?include=profile%2Cbacktest&stake=250" \
-H "Authorization: Bearer rivo_live_..."import requests
r = requests.get(
"https://api.rivo.markets/v1/traders/polymarket/0x9f2c8e1b7a4d6035c8e1b7a4d60359f2c8e1b7a4",
headers={"Authorization": "Bearer rivo_live_..."},
params={
"include": "profile,backtest",
"stake": 250,
},
)
print(r.json()["data"])const res = await fetch("https://api.rivo.markets/v1/traders/polymarket/0x9f2c8e1b7a4d6035c8e1b7a4d60359f2c8e1b7a4?include=profile%2Cbacktest&stake=250", {
headers: { Authorization: "Bearer rivo_live_..." },
});
const { data } = await res.json();{
"success": true,
"data": {
"platform": "polymarket",
"traderId": "0x9f2c...b7a4",
"displayName": "coldbrew",
"observedTrades": 214,
"observedWins": 131,
"observedNetPnlUsd": 48210.55,
"topCategories": [
{ "category": "sports", "trades": 143 },
{ "category": "politics", "trades": 51 }
],
"copyScore": 78,
"copyGrade": "A",
"isFollowed": false,
"recentTrades": [],
"backtest": {
"windowDays": 90,
"stakeUsd": 250,
"entries": 188,
"settled": 171,
"wins": 104,
"losses": 67,
"open": 17,
"winRate": 0.608,
"stakedUsd": 42750,
"pnlUsd": 9184.22,
"returnPct": 21.48,
"byCategory": [
{ "bucket": "sports", "settled": 122, "wins": 78, "pnlUsd": 8110.4, "returnPct": 26.6 }
],
"curve": [],
"risk": {
"settled": 171,
"maxDrawdownUsd": 4310.5,
"maxDrawdownPct": 38.2,
"maxDrawdownTrades": 19,
"returnOverDrawdown": 2.13,
"profitFactor": 1.74,
"grossProfitUsd": 21580.9,
"grossLossUsd": 12396.68,
"expectancyPerDollar": 0.2148,
"longestLossStreak": 7,
"avgEntryPrice": 0.541,
"winRate": 0.608,
"edgePts": 6.7
}
},
"trades": null
}
}