size, avg_price, realized_pnl, and total_bought for every (wallet, token) pair the v2 exchange has ever touched. Joined to market metadata so every row carries question, slug, outcome, image, and condition_id.
Backed by the v2.position view. A position is considered closed when size = 0; otherwise open.
Request
Authentication
Paid tier required. Pass your API key viax-api-key, Authorization: Bearer, or ?key=:
402 Payment Required.
Query parameters
All parameters are optional. Calling the endpoint with no filters returns the 100 largest positions globally.
Parameter validation
wallet: regex^0x[a-f0-9]{40}$.condition_id: regex^0x[a-f0-9]{64}$.token_id: 1-78 digits,^[0-9]+$.status: whitelist{open, closed, all}.order: whitelist{asc, desc}.
400 Bad Request with {"error": "..."}.
Response
Response fields
Rate-limit headers
Every response includes:Examples
Error responses
Notes
- A position exists as soon as a wallet has touched a token on v2, even after it’s been closed (
size = 0). Closed positions still carry theirrealized_pnl_usdcfor historical accounting. total_bought_usdcis cumulative USDC spent acquiring — it does NOT decrease on partial exits. Use it for true cost basis.- On neg-risk markets (multi-outcome events like PGA winners), a wallet can hold positions on many outcomes under the same
event_title. Each outcome is its owncondition_id. - Positions with
size = 0andrealized_pnl = 0andtotal_bought = 0exist when a wallet held a position and fully transferred it off-chain without realizing PnL. - Numeric fields are returned as strings — parse to
Decimal/BigNumberbefore math.

