> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/polymarket/users-wallet-positions>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/polymarket/users-wallet-positions.mdx>

---

# Polymarket Positions API

A wallet's positions, with cost, current value and profit per outcome.

`GET /v1/polymarket/users/{wallet}/positions` returns a page of positions in `data.positions`. Each position has `tokenId`, `conditionId`, a `market` object with `title`, `slug` and `eventSlug`, `outcome`, `outcomeIndex`, `oppositeOutcome`, `oppositeTokenId`, `status`, `shares`, `totalShares`, `averagePrice`, `entryCost`, `entryFees`, `totalCost`, `currentPrice`, `currentValue`, `realizedPnl`, `unrealizedPnl`, `totalPnl`, `percentPnl`, `percentRealizedPnl`, `redeemable`, `mergeable` and dates.

`status` is `open` (default), `closed`, `redeemable` or `mergeable`. `sort` is `currentValue` (default), `totalPnl`, `realizedPnl`, `unrealizedPnl`, `tokens` or `price`. `eventId` narrows to one event, `limit` is 1 to 1000 and defaults to 50. A wallet with no positions returns a found answer with an empty list.

## Request

- **Endpoint:** `GET /v1/polymarket/users/{wallet}/positions`
- **Credits:** 1 credit
Failed requests are free
- **Input:** by wallet
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/polymarket/users/wallet/positions/get)
- **Platform page:** [/platforms/polymarket](https://www.socialfetch.dev/platforms/polymarket)

## FAQ

### What does redeemable or mergeable mean?

redeemable marks a position in a resolved market that can be exchanged for its payout. mergeable marks opposite positions that can be combined. They are status filters on this route, not actions this API takes.

### Are closed positions included?

Not by default. Pass status=closed for positions that have been closed, or status=redeemable or mergeable for those states. A position's totalPnl includes realized and unrealized profit.

### How do I page a large portfolio?

Read data.page.nextCursor and pass it as cursor with the same status, sort and eventId filters. Keep the filters stable while paging or the cursor may no longer match.

### What does lookupStatus mean on this route?

found means the object or list was returned. not_found means no matching object exists. HTTP 200 only means the request finished, so branch on data.lookupStatus before storing a row.

### How much does this route cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth.
