---
title: "Close a paper position"
method: POST
path: "/api/bot/v1/close"
tags: ["Paper trading"]
---

# Close a paper position

`POST /api/bot/v1/close`

## Request

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

Close a simulated position fully or partially. P&L settles net of the round-trip taker fee and accrued funding.

## Request body

- CloseRequest
  - `id` string, required
  - `pct` number: Percent to close. Omit for the whole position.
  - `symbol` string: The position symbol, copied from /positions. Optional but strongly recommended: it lets the server price exactly one feed and skip a lookup round trip, which is worth several hundred milliseconds from Asia. A wrong value costs nothing - the server falls back automatically.

## Response `200`

ok

- object
  - `ok` boolean
  - `closed` Position
    - `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.
  - `remaining` Position
    - `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.
  - `position` Position
    - `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

- `400`: error

---

[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)
