---
title: "List paper positions"
method: GET
path: "/api/bot/v1/positions"
tags: ["Paper trading"]
---

# List paper positions

`GET /api/bot/v1/positions`

## Request

- Base URL: `https://marginpad.io`
- URL: `https://marginpad.io/api/bot/v1/positions`
- Auth: API key in header `X-API-Key`

Your positions with live mark price and P&L net of fees. Supports If-None-Match (ETag over structural state, so a poll that changed nothing costs a 304) and ?since=<unix ms>.

## Query parameters

- `since` string

## Response `200`

ok

- Positions
  - `positions` Position[], required
    - `id` string, required: Pass to /close and /sltp.
    - `symbol` string, required
    - `side` 'long' | 'short', required
    - `entry_price` number, required
    - `margin_usd` number, required
    - `leverage` number, required
    - `qty` number, required
    - `liq_price` number
    - `sl` number, nullable
    - `tp` number, nullable
    - `status` 'open' | 'closed' | 'liquidated', required
    - `opened_ts` integer
    - `source` 'bot' | 'app'
    - `mark_price` number: Open positions only.
    - `unrealized_pnl_usd` number: Open positions only. NET of the round-trip fee and accrued funding - what the position actually settles at, not a gross figure.
    - `fees_usd` number: Round-trip taker fee already subtracted from unrealized_pnl_usd.
    - `funding_usd` number: Funding accrued so far, already subtracted.
    - `exit_price` number, nullable: Closed positions only.
    - `pnl_usd` number, nullable: Closed positions only. Net of fees and funding, floored at -margin_usd.
    - `closed_ts` integer, nullable
    - `partial_pct` integer: Present when this row is a partial close.

## Other responses

- `304`: nothing changed since your ETag

---

[API](https://skmtc.dev/marginpad/apis/marginpad-free-crypto-api.md) · [All operations](https://skmtc.dev/marginpad/apis/marginpad-free-crypto-api/llms.txt) · [OpenAPI document](https://skmtc.dev/marginpad/apis/marginpad-free-crypto-api/revisions/27d21fcd0bf0?raw)
