Get Trader
This route returns one trader's record overall, in each category and in each kind of market. It also returns their average entry price and their place on the venue's profit ranking.
include adds extra sections to the response. Each include counts as a request of its own against your 120 requests a minute, so ?include=positions,curve uses 3.
| include | Adds |
|---|---|
positions | Adds the trader's open and recent positions. Each row folds every buy and sell on one side of one market into a single position. |
curve | Adds the trader's profit over time and by month. |
habits | Adds the trader's results by bet size and by price paid, how their trades change their positions, when they trade by weekday and hour in US Eastern time, and their streaks. |
similar | Adds traders who trade the same kinds of market. |
Example request
curl "https://api.rivo.markets/v2/traders/kalshi%3Arepanzuliog?include=positions%2Ccurve%2Chabits%2Csimilar" \
-H "Authorization: Bearer rivo_live_..."import requests
url = "https://api.rivo.markets/v2/traders/kalshi%3Arepanzuliog"
headers = {
"Authorization": "Bearer rivo_live_...",
}
params = [
("include", "positions,curve,habits,similar"),
]
res = requests.get(url, headers=headers, params=params)
res.raise_for_status()
print(res.json())const params = new URLSearchParams([
["include", "positions,curve,habits,similar"],
]);
const res = await fetch(`https://api.rivo.markets/v2/traders/kalshi%3Arepanzuliog?${params}`, {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.RIVO_API_KEY}`,
},
});
if (!res.ok) throw new Error(`Rivo API ${res.status}`);
const { data } = await res.json();Path parameters
reftrader refrequiredThe trader's
ref. You can take it from any row that names the trader.
Query parameters
includestringThe extra sections to add:
positions,curve,habitsorsimilar. Separate them with commas, or repeat the key.
Example response
{
"data": {
"ref": "kalshi:repanzuliog",
"name": "RepanzulioG",
"venue": "kalshi",
"record": {
"trades": 1404,
"settled": 1097,
"winRate": 0.8423,
"return": 0.0646,
"profit": 191467.44,
"volume": 2965383.35
},
"byCategory": [
{
"category": "sports",
"kind": null,
"trades": 1157,
"settled": 1083,
"winRate": 0.8532,
"return": 0.1097,
"profit": 192432.31,
"volume": 1754513.37,
"avgEntry": 0.795,
"lastTradeAt": "2026-09-30T03:14:23.912Z"
}
],
"byKind": [
{
"category": "sports",
"kind": "tennis",
"trades": 28,
"settled": 28,
"winRate": 1,
"return": 0.5344,
"profit": 33026.16,
"volume": 61795.96,
"avgEntry": 0.6775,
"lastTradeAt": "2026-09-28T15:25:09.900Z"
}
],
"avgEntry": 0.329,
"rank": { "position": 2, "outOf": 6335 },
"lastTradeAt": "2026-09-30T03:14:23.912Z",
"positions": {
"open": [
{
"market": {
"ref": "a2Fsc2hpOm1hcmtldDpLWE1WRUNST1NTQ0FURUdPUlktUzIwMjYwNTUyMkIwMTUxQy0xMjI1RDQxMzY5Rg",
"contract": "a2Fsc2hpOm1hcmtldDpLWE1WRUNST1NTQ0FURUdPUlktUzIwMjYwNTUyMkIwMTUxQy0xMjI1RDQxMzY5Rg",
"title": "no Over 3.5 goals scored,no Over 2.5 goals scored",
"venue": "kalshi",
"category": "culture",
"kind": null
},
"outcome": "Yes",
"entryPrice": 0.919,
"exitPrice": null,
"usd": 24845.01,
"soldUsd": null,
"status": "open",
"result": null,
"profit": null,
"openedAt": "2026-09-20T14:25:15.268Z",
"lastTradeAt": "2026-09-20T14:25:15.268Z"
}
],
"recent": [
{
"market": {
"ref": "a2Fsc2hpOm1hcmtldDpLWE1WRUNST1NTQ0FURUdPUlktUzIwMjY5M0Q2MkRCQzVFNy03NzFBODYxQkUwQQ",
"contract": "a2Fsc2hpOm1hcmtldDpLWE1WRUNST1NTQ0FURUdPUlktUzIwMjY5M0Q2MkRCQzVFNy03NzFBODYxQkUwQQ",
"title": "yes HOU Texans,yes SF 49ers,yes Atlanta wins by over 12.5 points",
"venue": "kalshi",
"category": "sports",
"kind": null
},
"outcome": "Yes",
"entryPrice": 0.362,
"exitPrice": null,
"usd": 42597.12,
"soldUsd": null,
"status": "settled",
"result": "win",
"profit": 75074.48,
"openedAt": "2026-09-30T03:14:23.912Z",
"lastTradeAt": "2026-09-30T03:14:23.912Z"
}
]
},
"curve": {
"points": [
{ "time": "2026-09-17T15:10:24.005Z", "profit": 86, "trades": 7 }
],
"months": [
{ "month": "2026-09", "trades": 1097, "profit": 191467.44 }
]
},
"habits": {
"bySize": [
{ "label": "$0 to $14", "trades": 351, "settled": 251, "winRate": 0.9124, "return": 0.0595, "profit": 90.91, "volume": 1527.17 }
],
"byPrice": [
{ "label": "Under 20¢", "avgEntry": 0.0454, "trades": 90, "settled": 28, "winRate": 0.3571, "return": 1.2214, "profit": 168476.68, "volume": 137938.89 }
],
"behaviour": [],
"hours": [
{ "weekday": 0, "hour": 1, "trades": 76 }
],
"streaks": { "current": 1, "currentKind": "win", "longestWin": 13, "longestLoss": 14 }
},
"similar": [
{ "ref": "kalshi:thebigdon", "name": "thebigdon", "profit": 189605.38 }
]
}
}Response fields
dataobjectThe trader you asked for.
Show 13 data fields
reftrader refThe trader's ref.
namestring or nullThe trader's public name. The API never returns a wallet address as a name.
venuestringThe venue the trader trades on.
recordobjectThe trader's whole record.
Show 6 record fields
tradesintegerThe number of trades Rivo has on record.
settledintegerThe number of settled bets.
winRatenumber or nullThe share of settled bets won, from 0 to 1. It is
nulluntil there are 10 settled bets.profitnumber or nullThe profit in USD.
volumenumber or nullThe dollars traded.
returnnumber or nullThe profit divided by the dollars traded. It is
nulluntil there are 10 settled bets.
byCategoryobject[]The trader's record in each category.
Show 10 byCategory fields
categorystringThe category this row covers.
kindstring or nullThe kind of market this row covers. It is
nullon a row for a whole category.tradesintegerThe number of trades Rivo has on record.
settledintegerThe number of settled bets.
winRatenumber or nullThe share of settled bets won, from 0 to 1. It is
nulluntil there are 10 settled bets.profitnumber or nullThe profit in USD.
volumenumber or nullThe dollars traded.
returnnumber or nullThe profit divided by the dollars traded. It is
nulluntil there are 10 settled bets.avgEntrynumber or nullThe average price paid, from 0 to 1.
lastTradeAtstring or nullWhen the trader last traded in this category or kind, in ISO 8601 UTC.
byKindobject[]The trader's record in each kind of market.
Show 10 byKind fields
categorystringThe category this row covers.
kindstring or nullThe kind of market this row covers. It is
nullon a row for a whole category.tradesintegerThe number of trades Rivo has on record.
settledintegerThe number of settled bets.
winRatenumber or nullThe share of settled bets won, from 0 to 1. It is
nulluntil there are 10 settled bets.profitnumber or nullThe profit in USD.
volumenumber or nullThe dollars traded.
returnnumber or nullThe profit divided by the dollars traded. It is
nulluntil there are 10 settled bets.avgEntrynumber or nullThe average price paid, from 0 to 1.
lastTradeAtstring or nullWhen the trader last traded in this category or kind, in ISO 8601 UTC.
avgEntrynumber or nullThe average price paid, from 0 to 1.
rankobject or nullThe trader's place on the venue's profit ranking. It is
nullwhen the trader is not ranked.Show 2 rank fields
positionintegerThe trader's place, where 1 is the top.
outOfintegerThe number of traders in the ranking.
lastTradeAtstring or nullWhen the trader last traded, in ISO 8601 UTC.
positionsobjectThe trader's positions, when you ask for
include=positions.Show 2 positions fields
openobject[]The positions the trader still holds.
Show 11 open fields
marketobject or nullThe market this position is on. It is
nullon the rare position whose market Rivo cannot name. Herekindis alwaysnull.Show 6 market fields
refmarket refThe market's ref. You can pass it to any
marketfilter or to Get Market. On a market of several outcomes, it names the whole event.contractmarket ref or nullThe ref of the exact contract. It is the same as
refon a market with one contract. On a market of several outcomes, such as a game with a moneyline and a spread, it tells the contracts apart. Pass it to Place Paper Order or a market bot.titlestringThe market's title, as the venue writes it.
venuestringThe venue that lists the market: one of
kalshi,polymarket,polymarket_usorgemini.categorystring or nullThe market's category: one of
sports,politics,crypto,finance,culture. It isnullwhen Rivo has not classified the market.kindstring or nullThe kind of market, such as
nflorbitcoin. It isnullwhen Rivo has not classified the market yet.
outcomestringThe side the trader holds.
entryPricenumber or nullThe average price paid, from 0 to 1.
exitPricenumber or nullThe average price the trader sold at, from 0 to 1.
usdnumberThe dollars the trader spent buying.
soldUsdnumber or nullThe dollars the trader received from selling.
statusstring or nullThe position's status:
open,reduced,exitedorsettled. A position stops counting as open once the trader sells 95% of it.resultstring or nullThe result once the market settles:
win,lossorvoid.profitnumber or nullThe profit in USD, once Rivo knows it.
openedAtstringWhen the trader first bought, in ISO 8601 UTC.
lastTradeAtstringWhen the trader last bought or sold, in ISO 8601 UTC.
recentobject[]Recent positions the trader has left or that have settled.
Show 11 recent fields
marketobject or nullThe market this position is on. It is
nullon the rare position whose market Rivo cannot name. Herekindis alwaysnull.Show 6 market fields
refmarket refThe market's ref. You can pass it to any
marketfilter or to Get Market. On a market of several outcomes, it names the whole event.contractmarket ref or nullThe ref of the exact contract. It is the same as
refon a market with one contract. On a market of several outcomes, such as a game with a moneyline and a spread, it tells the contracts apart. Pass it to Place Paper Order or a market bot.titlestringThe market's title, as the venue writes it.
venuestringThe venue that lists the market: one of
kalshi,polymarket,polymarket_usorgemini.categorystring or nullThe market's category: one of
sports,politics,crypto,finance,culture. It isnullwhen Rivo has not classified the market.kindstring or nullThe kind of market, such as
nflorbitcoin. It isnullwhen Rivo has not classified the market yet.
outcomestringThe side the trader holds.
entryPricenumber or nullThe average price paid, from 0 to 1.
exitPricenumber or nullThe average price the trader sold at, from 0 to 1.
usdnumberThe dollars the trader spent buying.
soldUsdnumber or nullThe dollars the trader received from selling.
statusstring or nullThe position's status:
open,reduced,exitedorsettled. A position stops counting as open once the trader sells 95% of it.resultstring or nullThe result once the market settles:
win,lossorvoid.profitnumber or nullThe profit in USD, once Rivo knows it.
openedAtstringWhen the trader first bought, in ISO 8601 UTC.
lastTradeAtstringWhen the trader last bought or sold, in ISO 8601 UTC.
curveobjectThe profit curve, when you ask for
include=curve.Show 2 curve fields
pointsobject[]The running total of profit, oldest first.
Show 3 points fields
timestringThe time of this point, in ISO 8601 UTC.
profitnumberThe total profit up to this point, in USD.
tradesintegerThe number of settled bets counted up to this point.
monthsobject[]The results for each month.
Show 3 months fields
monthstringThe month, written as
YYYY-MM.tradesintegerThe number of bets that settled that month.
profitnumberThe profit that month, in USD.
habitsobjectThe trader's habits, when you ask for
include=habits.Show 5 habits fields
bySizeobject[]The trader's results by bet size, split into four bands with the same number of trades in each.
Show 7 bySize fields
labelstringThe band this row covers, such as
$0 to $14orUnder 20¢.tradesintegerThe number of trades Rivo has on record.
settledintegerThe number of settled bets.
winRatenumber or nullThe share of settled bets won, from 0 to 1. It is
nulluntil there are 10 settled bets.profitnumber or nullThe profit in USD.
volumenumber or nullThe dollars traded.
returnnumber or nullThe profit divided by the dollars traded. It is
nulluntil there are 10 settled bets.
byPriceobject[]The trader's results by price paid, with
avgEntryfor each band.Show 8 byPrice fields
labelstringThe band this row covers, such as
$0 to $14orUnder 20¢.tradesintegerThe number of trades Rivo has on record.
settledintegerThe number of settled bets.
winRatenumber or nullThe share of settled bets won, from 0 to 1. It is
nulluntil there are 10 settled bets.profitnumber or nullThe profit in USD.
volumenumber or nullThe dollars traded.
returnnumber or nullThe profit divided by the dollars traded. It is
nulluntil there are 10 settled bets.avgEntrynumber or nullThe average price paid in this band.
behaviourobject[]How the trader's trades changed their positions, such as opening, adding, trimming or closing, with the most common first.
Show 2 behaviour fields
labelstringWhat this row counts.
tradesintegerThe number of trades.
hoursobject[]The trader's trades by weekday and hour, in US Eastern time.
Show 3 hours fields
weekdayintegerThe day of the week, where 0 is Sunday.
hourintegerThe hour of the day, from 0 to 23.
tradesintegerThe number of trades.
streaksobjectThe trader's win and loss streaks over settled bets.
Show 4 streaks fields
currentintegerThe length of the current streak.
currentKindstring or nullWhether the current streak is wins or losses:
winorloss.longestWinintegerThe longest run of wins.
longestLossintegerThe longest run of losses.
similarobject[]Similar traders, when you ask for
include=similar.Show 3 similar fields
reftrader refThe trader's ref.
namestring or nullThe trader's public name.
profitnumber or nullThe trader's profit in USD.
Rivo hides traders with a losing record from its lists, but you can still read them by ref. The API answers NOT_FOUND for a trader removed from the product.
Errors
| Code | When |
|---|---|
VALIDATION | ref is not a trader ref, or a parameter is unknown. |
NOT_FOUND | No trader has that ref. |
QUOTA_EXCEEDED | The includes would take the key past its per-minute limit. |