PredictorSDK

List Polymarket wallet positions

Returns the current Polymarket positions for a wallet.

GET
/v1/polymarket/wallet/positions

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
AuthorizationBearer <token>

In: header

Query Parameters

address?string

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.

Match^0x[a-fA-F0-9]{40}$
username?string

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.

Length1 <= length
limit?integer

Number of items requested for the first page. Defaults to 50. Once a cursor is supplied, the cursor's page size is used.

Range1 <= value <= 100
Default50
cursor?string

Opaque 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"  }}