vike
API EndpointsPolymarket

/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.

cURL
# 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.json
addresspathrequired
The wallet's 0x-prefixed proxy-wallet address (40 hex digits). Anything else is a 400.
windowqueryoptional
24h, 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.

Example response (abridged)
{
  "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.

FieldScoped by window?Cut by
trades_window, volume_window_usdYestrade time
realized_pnl_usd, resolved_markets, hit_rate, hit_rate_ciYesresolution 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 totalsNolifetime
markets, trades, open_positions, equity_curve, category_breakdown, daily_activity, correlatedNofull 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_rate is 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. With resolved_markets: 34 an integer number of won markets will not reproduce it. hit_rate_ci is 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_usd is 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_positions and open_exposure_usd understate. 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. markets and open_positions hold at most 30 rows, trades at most 100, however large markets_count is. correlated lists up to 8 wallets that trade many of the same markets.
  • Not comparable with the L2 routes. This reads the trade tape; /market_stats and /ohlcv read the recorded book, so the same wallet's volume can differ between them.

Errors

StatusWhen
400The 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 / 429No or bad credential, or the hourly budget is spent — see Authentication and Rate limits.
503The 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.

cURL
# profile one trader over the last 30 days: windowed P&L and hit rate beside lifetime volume, plus markets, trades, positions and the equity curvecurl -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 historycurl -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 upcurl -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 itcurl -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_ratejq '{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 profilejq '.correlated' wallet.json# its open positions (at most 30), each priced from the token's latest quote of the last seven daysjq '.open_positions' wallet.json
Example response (abridged)
{  "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" }}