/wallets/{address}
One Polymarket trader's profile — lifetime volume, realized P&L and hit rate over a window, markets, recent trades, open positions and an equity curve.
GET https://data.vike.io/v1/polymarket/wallets/{address}One Polymarket trader, profiled from the on-chain trade tape: lifetime volume and trade counts,
realized P&L and hit rate over a chosen window, the markets the wallet traded, its recent trades,
open positions and a daily equity curve. It is the same answer the
polymarket_wallet MCP tool gives — the route runs that tool.
# profile one trader over the last 30 days: windowed P&L and hit rate beside lifetime volume, plus markets, trades, positions and the equity curve
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/wallets/0x204f72f35326db932158cba6adff0b9a1da95e14?window=30d"
# with no window the default is all: every windowed field then covers the wallet's whole history
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/wallets/0x204f72f35326db932158cba6adff0b9a1da95e14"
# what it did today: trades and volume in the last 24 hours, and the P&L of markets that resolved in them
# (this captured wallet's last_seen is 2026-08-26, so here it returns zeros: use a recently active address)
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/wallets/0x204f72f35326db932158cba6adff0b9a1da95e14?window=24h"
# a week of the same, for a short-horizon read on whether the recent record holds up
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/wallets/0x204f72f35326db932158cba6adff0b9a1da95e14?window=7d"
# this is a heavy call for its one unit (the correlated list alone scans hundreds of MiB), so save the response once and slice it locally instead of repeating it
curl -s -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/wallets/0x204f72f35326db932158cba6adff0b9a1da95e14?window=30d" -o wallet.json
# the scored fields: hit_rate is volume-weighted and hit_rate_ci is its Wilson half-width, so read resolved_markets and hit_rate_ci before ranking anyone on hit_rate
jq '{window, realized_pnl_usd, resolved_markets, hit_rate, hit_rate_ci}' wallet.json
# the wallets that trade many of the same markets (up to eight): the next addresses to profile
jq '.correlated' wallet.json
# its open positions (at most 30), each priced from the token's latest quote of the last seven days
jq '.open_positions' wallet.jsonaddresspathrequired0x-prefixed proxy-wallet address (40 hex digits). Anything else is a 400.windowqueryoptional24h, 7d, 30d or all. Default all. Any other value is a 400. See What the window moves for which fields it changes.The response is large — up to 100 trades, 30 markets and a few hundred equity-curve points — so the real one is abridged in this example, each list cut to its first element.
{
"proxy_wallet": "0x204f72f35326db932158cba6adff0b9a1da95e14",
"window": "30d",
"trades_window": 0,
"trades_all": 4331238,
"volume_window_usd": 0.0,
"volume_all_usd": 611448374.69,
"avg_trade_usd": 141.17,
"markets_count": 150749,
"first_seen": "2026-01-01 00:00:37",
"last_seen": "2026-08-26 09:17:49",
"realized_pnl_usd": 379.10,
"resolved_markets": 34,
"hit_rate": 0.4105,
"hit_rate_ci": 0.157,
"open_positions": [],
"open_exposure_usd": 0,
"markets": [ { "condition_id": "0x392b…", "title": "…", "trades": 673, "volume_usd": 1575609.82, "net_shares": 1971349.29, "resolved": true, "winning_outcome": "Argentina", "realized_pnl": 384904.21 } ],
"trades": [ "…" ],
"equity_curve": [ "…" ],
"category_breakdown": [ "…" ],
"daily_activity": [ "…" ],
"correlated": [ "…" ],
"tags": [ "…" ],
"is_active": false,
"streak": { "n": 6, "kind": "win" }
}What the window moves
window scopes some fields and leaves the rest alone.
| Field | Scoped by window? | Cut by |
|---|---|---|
trades_window, volume_window_usd | Yes | trade time |
realized_pnl_usd, resolved_markets, hit_rate, hit_rate_ci | Yes | resolution time — only markets resolved inside the window count |
trades_all, volume_all_usd, avg_trade_usd, markets_count, first_seen, last_seen, share and dollar totals | No | lifetime |
markets, trades, open_positions, equity_curve, category_breakdown, daily_activity, correlated | No | full history |
A wallet that traded long ago but resolved nothing inside the window reports trades_window: 0
and realized_pnl_usd: 0 — zeros that mean "nothing in this window", not "no activity".
Reading it
hit_rateis volume-weighted, not a count of wins. It is the share of the wallet's resolved dollar volume that sat in markets where it made money. Withresolved_markets: 34an integer number of won markets will not reproduce it.hit_rate_ciis the Wilson confidence half-width on that rate; with few resolved markets it is wide, so do not rank on the point value.realized_pnl_usdis realized only. An open position contributes nothing until its market resolves. Markets that resolved invalid are excluded from P&L, hit rate and the resolved count.open_positionsandopen_exposure_usdunderstate. A position is priced from the token's latest top-of-book quote within the last 7 days; one with no quote in that span, or no usable mid, is left out. The list is ordered by the size of the position's current value, largest first.- Lists are capped.
marketsandopen_positionshold at most 30 rows,tradesat most 100, however largemarkets_countis.correlatedlists up to 8 wallets that trade many of the same markets. - Not comparable with the L2 routes. This reads the trade tape;
/market_statsand/ohlcvread the recorded book, so the same wallet's volume can differ between them.
Errors
| Status | When |
|---|---|
400 | The address is not 0x plus 40 hex digits, window is not one of the four values, an unknown query parameter is sent, or the wallet has no recorded trades. The body is {"error": "…"}. |
401 / 429 | No or bad credential, or the hourly budget is spent — see Authentication and Rate limits. |
503 | The store behind it is unavailable. The body carries no driver text. |
This is a heavier call than its single budget unit suggests: the correlated list alone scans
hundreds of MiB. Cache the answer rather than polling it.
/markets/{condition_id}
One market's detail — the same row shape as the directory, for a single market you already hold a condition_id for.
/smart_money
Polymarket smart-money signals — markets with the largest net inflow from the profitable-wallet cohort, or markets that cohort bought well below the mid.