Skip to main content

Positions

Returns your current positions with live market values and unrealized P&L.

Authentication

API key only — X-API-Key: <key> (or the PM-compat POLY_API_KEY / Authorization: Bearer ps_live_... aliases). A Supabase Bearer JWT is not accepted here.

Query Parameters

Default changed on 2026-06-10. Before 2026-06-10 the default (param omitted) returned positions across all wallets — UI MAIN/SANDBOX included — which could not reconcile with Balance / Portfolio (both API-wallet scoped). The default is now the API wallet, consistent with those endpoints. Pass wallet_id=all if you depended on the old cross-wallet behaviour.
This endpoint is unpaginated — there is no limit/offset. It returns every matching position in one response. For paginated results use Trade History. Polymarket’s status=ALL has no direct equivalent — simply omit status to get the unfiltered set.

Request


Response

When no live price is cached for a position, current_price, market_value, and unrealized_pnl are returned as null. (Aggregate endpoints like Balance and Portfolio fall back to entry-price valuation internally, but this per-position endpoint surfaces the missing price as null.)
With envelope=true the same rows are wrapped Polymarket-style:

Python Example


Position Lifecycle

A position closed by POST /v1/account/reset-api-balance carries the CLOSED_BY_RESET status. The status=CLOSED filter surfaces both CLOSED and CLOSED_BY_RESET positions.

Errors

All errors return {"error": "<CODE>", "message": "<human-readable>"}.

Next Steps