---
title: "Get Portfolio"
method: GET
path: "/v1/account/portfolio"
---

# Get Portfolio

`GET /v1/account/portfolio`

Get current portfolio snapshot including open positions, margin summary, and withdrawable balance.

## Response `200`

Portfolio response.

- Portfolio
  - `positions` PortfolioPosition[], required
    - `instrument_id` integer, required — Instrument ID
    - `symbol` string, required — Instrument symbol
    - `size` string, required — Signed position size in no. of contracts (positive = long, negative = short)
    - `entry_price` string, required — Average entry price
    - `leverage` integer, required — Leverage
    - `cross` boolean, required — Whether to use cross margin mode
    - `initial_margin` string, required — Current collateral backing the position. For cross positions, this is the required initial margin based on position size, mark price, the applicable risk tier, and configured leverage. For isolated positions, this is the position's current equity: signed allocated margin plus unrealized PnL minus settled funding. The legacy `initial_margin` name is retained for API compatibility; `margin` would more accurately describe the field.
    - `maintenance_margin` string, required — Maintenance margin amount
    - `position_value` string, required — Notional position value in USD
    - `liquidation_price` string, required — Liquidation price
    - `unrealized_pnl` string, required — Unrealized PnL in USD
    - `return_on_equity` string, required — Unrealized PnL divided by the position's current required initial margin, as a decimal.
    - `cumulative_funding` string, required — Cumulative funding paid/received in USD
  - `margin` MarginSummary, required
    - `total_account_value` string, required — Total account value in USD (equity + unrealized PnL)
    - `total_initial_margin` string, required — Total initial margin in use across all positions
    - `total_maintenance_margin` string, required — Total maintenance margin across all positions
    - `total_position_value` string, required — Total notional position value in USD
  - `withdrawable` string, required — Withdrawable balance in USD
  - `in_liquidation` boolean, required — Whether the account is currently under liquidation
  - `timestamp` integer, required — Update timestamp in milliseconds

## Other responses

- `400` — Bad request — the request was malformed or failed validation (bad query parameters, unparseable body, invalid signature, or a domain pre-check). The `error` field is a human-readable validation detail.
- `401` — Unauthorized — missing or invalid `POLYMARKET-PROXY` / `POLYMARKET-SECRET` credentials. `error` is `unauthorized`.
- `429` — Too Many Requests. `error` distinguishes the limit that was hit: `ip_rate_limited` (per-IP token bucket), `action_rate_limited` (per-account action rate), or `open_orders_limit` (resting open-order cap).
- `500` — Internal server error. `error` is `internal_error`.

---

[API](https://skmtc.net/polymarket/apis/polymarket-perps-http-api.md) · [All operations](https://skmtc.net/polymarket/apis/polymarket-perps-http-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/polymarket/polymarket-perps-http-api/versions/e17c4709273e/schema)
