vike
Polymarket

/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
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/polymarket/wallets/0x204f72f35326db932158cba6adff0b9a1da95e14?window=30d"
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 a recent top-of-book quote (the last hour); one with no fresh quote is left out.
  • 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
curl -H "X-API-Key: $VIKE_API_KEY" \  "https://data.vike.io/v1/polymarket/wallets/0x204f72f35326db932158cba6adff0b9a1da95e14?window=30d"
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" }}