Skip to main content
Returns one wallet’s Polymarket positions on Polygon, one row per outcome token, largest first. Each row carries the position’s size, average entry price, realized PnL, and total bought. Use it to build a portfolio view for a trader, or to rank a wallet’s positions by PnL.

Parameters

string
required
The wallet to look up: 0x followed by 40 hex characters, in any case.
string
Comma-separated outcome token IDs. Only return positions in these tokens.
string
default:"0"
Only return positions whose amount is greater than this value, in the same raw units as amount. The default leaves out closed positions.
boolean
default:"false"
Set to true to also return closed positions, whose amount is zero. When true, min_amount is ignored.
string
default:"amount_desc"
amount_desc, amount_asc, realized_pnl_desc, or last_updated_at_desc. Ties are broken by token_id, ascending. A null value sorts as zero, but comes back as null.
integer
default:"100"
Rows per page, up to 500. See pagination.
string
The next_cursor from a previous response. Use the same sort as the request that returned it.

Response

object[]
One entry per outcome token the wallet has a position in, in sort order.
integer
The page size used for this response.
string | null
Pass it as cursor to get the next page. null on the last page.

How the data behaves

  • Numbers are raw strings. amount, avg_price, realized_pnl, and total_bought come back as strings in raw units of 10^6, so no precision is lost. Divide by 1,000,000 before you show them. Activity is different: it returns plain JSON numbers already in shares and USDC.
  • A position isn’t a balance. amount is the net position from trades. The Balances feed returns the outcome tokens the wallet actually holds, which splits, merges, redeems, and plain transfers also change. The two can differ for the same token.
  • Positions are current. You can’t ask for a wallet’s positions at a past block. Responses carry Cache-Control: public, max-age=2.
  • PnL is realized only. realized_pnl doesn’t include gains or losses on shares the wallet still holds.

Errors

This endpoint returns the same errors as the other feeds. It returns 400 BAD_REQUEST when address is missing or isn’t 40 hex characters, when sort isn’t one of the values above, or when cursor was issued for a different sort.

Billing

With an API key, each row returned is one compute unit, at $10 per million. An empty page is free. With x402, each request costs 10 atomic USDC ($0.00001), however many rows it returns. See Feeds pricing.

Example

Get a wallet’s three largest positions:
The response has this shape. The values are illustrative, and token IDs are shortened: