---
title: "Trader closed positions"
method: GET
path: "/api/public/v1/pulse/trader/{address}/closed-positions"
---

# Trader closed positions

`GET /api/public/v1/pulse/trader/{address}/closed-positions`

## Request

- Base URL: `https://api.coinversa.ai`
- URL: `https://api.coinversa.ai/api/public/v1/pulse/trader/{address}/closed-positions`
- Auth: API key in header `X-API-Key`
- TypeScript: <https://skmtc.dev/coinversa/apis/coinversa-api/docs/api/public/v1/pulse/trader/:address/closed-positions/get.ts> (a function with typed inputs; its response is checked against the schema)

Complete, closed perp lifecycles in the rolling lifecycle retention window. Same source and completeness filters as closed-positions/stats (stats is capped at the latest 10,000 rows). realizedPnl and fees come directly from the lifecycle; PnL is gross of fees. size is peak size. unrealizedPnl is 0 on closed positions. leverage and leverageType are null (not tracked per lifecycle).

## Path parameters

- `address` string, required

## Query parameters

- `limit` integer
- `offset` integer
- `coin` string

## Response `200`

OK

- ClosedPosition[], nullable
  - `address` string, required
  - `closedAt` string, required
  - `closedAtRaw` integer, required
  - `coin` string, required
  - `durationMs` integer, required
  - `entryPx` number, double, required
  - `exitPx` number, double, required
  - `fees` number, double, required
  - `id` integer, required
  - `leverage` number, double, nullable, required: null: leverage is not recorded per reconstructed lifecycle.
  - `leverageType` string, nullable, required: null: leverage type is not recorded per reconstructed lifecycle.
  - `notional` number, double, required
  - `openedAt` string, required
  - `openedAtRaw` integer, required
  - `realizedPnl` number, double, required
  - `side` string, required
  - `size` number, double, required
  - `unrealizedPnl` number, double, required

## Other responses

- `400`: Bad Request
- `403`: Forbidden
- `404`: Not Found
- `422`: Unprocessable Entity
- `429`: Too Many Requests
- `500`: Internal Server Error
- `504`: Gateway Timeout

## Changes

- **2026-10-12** `7aae8c32ff78`: 2 warning
  - for the `query` request parameter `limit`, the max was set to `500.00`
  - for the `query` request parameter `limit`, the min was set to `1.00`
- **2026-10-02** `18a9902cb107`: 2 breaking
  - the response property `items/leverage` became nullable for the status `200`
  - the response property `items/leverageType` became nullable for the status `200`
- **2026-09-23** `f2eba29805e5`: 8 info
  - added the non-success response with the status `403`
  - removed the non-success response with the status `401`
  - added the optional property `reason` to the response with the `400` status
  - added the optional property `reason` to the response with the `404` status
  - …4 more

[Operation history](https://skmtc.dev/coinversa/apis/coinversa-api/changes/api/public/v1/pulse/trader/:address/closed-positions/get.md)

---

[API](https://skmtc.dev/coinversa/apis/coinversa-api.md) - [All operations](https://skmtc.dev/coinversa/apis/coinversa-api/llms.txt) - [OpenAPI document](https://skmtc.dev/coinversa/apis/coinversa-api/revisions/3454317a5830?raw)
