GET/v1/strategies/{id}/performance
Strategy performance
MCP tool: get_performance
Marks every open position to live prices at request time, so the numbers are where the strategy stands right now, not where it stood when something last settled.
Returns 404 when the strategy does not exist or belongs to a different account.
Query parameters
idstringrequiredThe strategy id, from the list or create response. Path parameter.
Response
events is the most recent slice only; rollup always covers every held event. curve is cumulative realized PnL over settled trades, chronological, downsampled for large strategies. The MCP tool returns rollup, totalEvents and curve without the events list.
curl "https://api.rivo.markets/v1/strategies/b4a4f7a0-4a5e-4e9d-9c1e-2f6d8f3a1c77/performance" \
-H "Authorization: Bearer rivo_live_..."import requests
r = requests.get(
"https://api.rivo.markets/v1/strategies/b4a4f7a0-4a5e-4e9d-9c1e-2f6d8f3a1c77/performance",
headers={"Authorization": "Bearer rivo_live_..."},
)
print(r.json()["data"])const res = await fetch("https://api.rivo.markets/v1/strategies/b4a4f7a0-4a5e-4e9d-9c1e-2f6d8f3a1c77/performance", {
headers: { Authorization: "Bearer rivo_live_..." },
});
const { data } = await res.json();response
{
"success": true,
"data": {
"rollup": {
"total": 489,
"settled": 449,
"wins": 105,
"losses": 344,
"realizedUsd": 25910,
"unrealizedUsd": 1240,
"totalUsd": 27150,
"stakedUsd": 48900,
"returnPct": 55.5,
"winRate": 0.234,
"open": 38,
"openUnpriced": 2,
"unscorable": 0
},
"events": [
{
"whaleEventId": "pm-1f4a...",
"marketTitle": "Will Argentina win the 2026 FIFA World Cup?",
"platform": "polymarket",
"direction": "buy_yes",
"entryPrice": 0.42,
"amountUsd": 240000,
"stakeUsd": 100,
"resolution": null,
"pnlUsd": null,
"currentPrice": 0.47,
"unrealizedUsd": 11.9,
"scorable": true
}
],
"totalEvents": 489,
"curve": [
{ "t": 1747300364000, "pnl": -100, "n": 1 },
{ "t": 1755071883000, "pnl": 25910, "n": 449 }
],
"defaultStakeUsd": 100
}
}