List Polymarket wallet positions
Returns the current Polymarket positions for a wallet.
Returns the current Polymarket positions for a wallet. The upstream source is Polymarket Data API v2; this public route keeps its existing response shape. Accepts either a wallet address (proxy address only — see note below) or a Polymarket username. Exactly one of the two must be supplied — passing both returns 400.
v1 surfaces a minimal field set so the endpoint scaffolding can be verified end-to-end: condition_id (which market), outcome (which side), and shares (how much). Title/slug, avg/current price, PnL (cash_pnl, realized_pnl), redeemable/mergeable flags, and event metadata will be added in follow-ups.
pagination.total is always null because the upstream Data API does not return a total count and this route does not walk the pages to compute one (it published 0 until 2026-10-09, which read as an empty wallet beside a page of positions); 0 only ever means an empty result on the routes that count. Rely on has_more + next_cursor to paginate.
EOA inputs are not auto-resolved on this endpoint. Unlike /v1/polymarket/wallet, this endpoint does not perform the EOA→proxy CREATE2 resolution. Callers with a signer EOA should call /v1/polymarket/wallet first to resolve the proxy, then pass the returned address. Passing an EOA directly will return an empty data array.
Authorization
BearerAuth In: header
Query Parameters
Polymarket proxy wallet address. Must match ^0x[a-fA-F0-9]{40}$. Mixed-case input is accepted and lowercased in the response. Mutually exclusive with username; exactly one of the two is required.
^0x[a-fA-F0-9]{40}$Polymarket display name to resolve to a proxy wallet. Match is case-insensitive and exact against the user's stored name. A leading @ is accepted and stripped. Mutually exclusive with address.
1 <= lengthNumber of items requested for the first page. Defaults to 50. Once a cursor is supplied, the cursor's page size is used.
1 <= value <= 10050Opaque cursor from a previous response's pagination.next_cursor. Bound to the resolved wallet address — replaying a cursor against a different wallet returns 400. Cursors issued by the previous offset-based implementation are rejected; restart from the first page. A cursor cannot carry a page size above 100.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/polymarket/wallet/positions"{ "address": "0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b", "data": [ { "condition_id": "0x7ad403c3508f8e3912940fd1a913f227591145ca0614074208e0b962d5fcc422", "outcome": "Yes", "shares": 300000 }, { "condition_id": "0x7ad403c3508f8e3912940fd1a913f227591145ca0614074208e0b962d5fcc422", "outcome": "No", "shares": 300000 } ], "pagination": { "limit": 2, "total": null, "has_more": true, "next_cursor": "eyJzIjoiYjU3MWNkYTAiLCJ1IjoibmF0aXZlLW5leHQifQ" }}