# Получить всю историю позиций

`GET /positions/{accountId}/portfolio/history`

Каждая позиция аккаунта на всех рынках, как открытая, так и закрытая, сначала новые, с общим количеством для пагинации.

- Ограничено фазой, в которой аккаунт находится в данный момент: позиции из более ранней фазы не возвращаются.

<a id="authorization"></a>

## Авторизация

bearer: http · bearer (обязательно). Персональный API-ключ с префиксом `usk_`.

<a id="parameters"></a>

## Параметры

- path: accountId (string · uuid; обязательно). Идентификатор торгового аккаунта. Должен принадлежать вызывающей стороне.

Тип: string · uuid

format: uuid

- query: limit (integer; необязательно). Размер страницы: сколько записей вернуть.

Тип: integer

Пример: 20

По умолчанию: 20

minimum: 1

maximum: 100

- query: offset (integer; необязательно). Сколько записей пропустить перед страницей.

Тип: integer

Пример: 0

По умолчанию: 0

minimum: 0

maximum: 9007199254740991

<a id="example-curl"></a>

## Пример · cURL

```bash
curl --request GET 'https://api.upscale.trade/positions/{accountId}/portfolio/history' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY'
```

<a id="example-javascript"></a>

## Пример · JavaScript

```javascript
const response = await fetch("https://api.upscale.trade/positions/{accountId}/portfolio/history", {
  method: "GET",
  headers: {
    "Accept": "application/json",
    "Authorization": "Bearer YOUR_API_KEY"
  },
});
console.log(response.status, await response.text());
```

<a id="example-python"></a>

## Пример · Python

```python
import requests

response = requests.request(
    "GET",
    "https://api.upscale.trade/positions/{accountId}/portfolio/history",
    headers={"Accept":"application/json","Authorization":"Bearer YOUR_API_KEY"},
    timeout=30,
)
print(response.status_code, response.text)
```

<a id="response-401"></a>

## Ответ 401

**401**  — Неавторизовано

<a id="response-403"></a>

## Ответ 403

**403**  — Аккаунт принадлежит другому пользователю (`account_access_denied`), или запрос аутентифицирован с помощью API-ключа, тогда как `api_trading` отключён на аккаунте (`api_trading_not_enabled`).

<a id="response-404"></a>

## Ответ 404

**404**  — Нет аккаунта с этим идентификатором.

<a id="response-429"></a>

## Ответ 429

**429**  — Превышен лимит частоты запросов API-ключа (`api_key_rate_limit_exceeded`). `Retry-After` указывает, когда вернуться; тело содержит бакет (`read` / `write`), окно, которое сработало, его лимит и `retryAt`.

<a id="response-default-positionspaginatedresponse"></a>

## Ответ default · PositionsPaginatedResponse

**default** application/json — Ответ

Тип: object[]

[]Схема: PositionsPaginatedResponse

[]Тип: object

[]Обязательные поля: data, totalCount

[]Типы обязательных полей: data (object[]; обязательно), totalCount (number; обязательно)

- []data (object[]; обязательно)

[]data пример: [
  {
    "idx": "string",
    "txId": "string",
    "version": 0,
    "openedAt": "2026-05-01T12:30:00.000Z",
    "lastUpdatedAt": "2026-05-01T12:30:00.000Z",
    "closedAt": "2026-05-01T12:30:00.000Z",
    "type": "long",
    "status": "opened",
    "market": "00000000-0000-4000-8000-000000000000",
    "trader": "00000000-0000-4000-8000-000000000000",
    "size": "1000000000",
    "notional": "1000000000",
    "fraction": "1000000000",
    "margin": "1000000000",
    "pnl": "1000000000",
    "funding": "1000000000",
    "rolloverFee": "1000000000",
    "settlementOraclePrice": "1000000000",
    "fee": "1000000000",
    "feeRate": "1000000000",
    "exchangedQuote": "1000000000",
    "exchangedBase": "1000000000",
    "direction": "long",
    "eventName": "addMargin",
    "pnlInEvent": "1000000000",
    "rawPnlInEvent": "1000000000",
    "profitAdjustmentApplied": true,
    "holdingTimeMs": "string",
    "feeInEvent": "1000000000",
    "fundingInEvent": "1000000000",
    "rolloverFeeInEvent": "1000000000",
    "executionFeeRate": "1000000000",
    "executionFeeInEvent": "1000000000",
    "executionFee": "1000000000",
    "timestamp": "2026-05-01T12:30:00.000Z",
    "isOnchain": true,
    "roe": "1000000000",
    "scalpingCoefficient": "1000000000",
    "closeReason": "string"
  }
]

[]data.Тип: object[]

[]data.Запрошенная страница позиций, сначала самые новые.

[]data.[]Тип: object

[]data.[]Обязательные поля: idx, txId, version, openedAt, lastUpdatedAt, closedAt, type, status, market, trader, size, notional, fraction, margin, pnl, funding, rolloverFee, settlementOraclePrice, fee, feeRate, exchangedQuote, exchangedBase, direction, eventName, pnlInEvent, rawPnlInEvent, profitAdjustmentApplied, holdingTimeMs, feeInEvent, fundingInEvent, rolloverFeeInEvent, executionFeeRate, executionFeeInEvent, executionFee, timestamp, isOnchain, roe, scalpingCoefficient, closeReason

[]data.[]Типы обязательных полей: idx (string · nullable; обязательно), txId (string · nullable; обязательно), version (number; обязательно), openedAt (string · date-time; обязательно), lastUpdatedAt (string · date-time; обязательно), closedAt (string · date-time · nullable; обязательно), type (string · enum; обязательно), status (string · enum; обязательно), market (string · uuid; обязательно), trader (string · uuid; обязательно), size (string · int32; обязательно), notional (string · int32; обязательно), fraction (string · int32; обязательно), margin (string · int32; обязательно), pnl (string · int32 · nullable; обязательно), funding (string · int32 · nullable; обязательно), rolloverFee (string · int32; обязательно), settlementOraclePrice (string · int32; обязательно), fee (string · int32; обязательно), feeRate (string · int32; обязательно), exchangedQuote (string · int32; обязательно), exchangedBase (string · int32; обязательно), direction (string · enum; обязательно), eventName (string · enum; обязательно), pnlInEvent (string · int32; обязательно), rawPnlInEvent (string · int32; обязательно), profitAdjustmentApplied (boolean; обязательно), holdingTimeMs (string · nullable; обязательно), feeInEvent (string · int32; обязательно), fundingInEvent (string · int32; обязательно), rolloverFeeInEvent (string · int32; обязательно), executionFeeRate (string · int32; обязательно), executionFeeInEvent (string · int32; обязательно), executionFee (string · int32; обязательно), timestamp (string · date-time; обязательно), isOnchain (boolean; обязательно), roe (string · int32; обязательно), scalpingCoefficient (string · int32; обязательно), closeReason (string · nullable; обязательно)

- []data.[]idx (string · nullable; обязательно)

[]data.[]idx пример: string

[]data.[]idx.Тип: string · nullable

[]data.[]idx.Идентификатор позиции. То же значение, что и `txId`.

- []data.[]txId (string · nullable; обязательно)

[]data.[]txId пример: string

[]data.[]txId.Тип: string · nullable

[]data.[]txId.Идентификатор позиции. Сохранён для обратной совместимости, всегда равен `idx`.

- []data.[]version (number; обязательно)

[]data.[]version пример: 0

[]data.[]version.Тип: number

[]data.[]version.Ревизия позиции: увеличивается при каждом событии, применённом к ней.

- []data.[]openedAt (string · date-time; обязательно)

[]data.[]openedAt пример: 2026-05-01T12:30:00.000Z

[]data.[]openedAt.Тип: string · date-time

[]data.[]openedAt.Когда позиция была открыта.

[]data.[]openedAt.format: date-time

- []data.[]lastUpdatedAt (string · date-time; обязательно)

[]data.[]lastUpdatedAt пример: 2026-05-01T12:30:00.000Z

[]data.[]lastUpdatedAt.Тип: string · date-time

[]data.[]lastUpdatedAt.Когда к позиции было применено последнее событие.

[]data.[]lastUpdatedAt.format: date-time

- []data.[]closedAt (string · date-time · nullable; обязательно)

[]data.[]closedAt пример: 2026-05-01T12:30:00.000Z

[]data.[]closedAt.Тип: string · date-time · nullable

[]data.[]closedAt.Когда позиция была закрыта; null, пока она всё ещё открыта.

[]data.[]closedAt.format: date-time

- []data.[]type (string · enum; обязательно)

[]data.[]type пример: long

[]data.[]type.Тип: string · enum

[]data.[]type.Направление позиции. То же значение, что и `direction`.

[]data.[]type.Допустимые значения: ["long","short"]

- []data.[]status (string · enum; обязательно)

[]data.[]status пример: opened

[]data.[]status.Тип: string · enum

[]data.[]status.Является ли позиция всё ещё открытой, закрытой трейдером или ликвидированной.

[]data.[]status.Допустимые значения: ["opened","closed","liquidated"]

- []data.[]market (string · uuid; обязательно)

[]data.[]market пример: 00000000-0000-4000-8000-000000000000

[]data.[]market.Тип: string · uuid

[]data.[]market.Рынок, на котором удерживается позиция.

[]data.[]market.format: uuid

[]data.[]market.pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$

- []data.[]trader (string · uuid; обязательно)

[]data.[]trader пример: 00000000-0000-4000-8000-000000000000

[]data.[]trader.Тип: string · uuid

[]data.[]trader.Счёт трейдера, которому принадлежит позиция.

[]data.[]trader.format: uuid

[]data.[]trader.pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$

- []data.[]size (string · int32; обязательно)

[]data.[]size пример: 1000000000

[]data.[]size.Тип: string · int32

[]data.[]size.Размер позиции в единицах базового актива, fp9 в сыром виде.

[]data.[]size.format: int32

[]data.[]size.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]notional (string · int32; обязательно)

[]data.[]notional пример: 1000000000

[]data.[]notional.Тип: string · int32

[]data.[]notional.Открытый номинал позиции в валюте котировки, fp9 в сыром виде — размер по цене входа.

[]data.[]notional.format: int32

[]data.[]notional.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]fraction (string · int32; обязательно)

[]data.[]fraction пример: 1000000000

[]data.[]fraction.Тип: string · int32

[]data.[]fraction.Всегда `0`. Сохранено для обратной совместимости.

[]data.[]fraction.format: int32

[]data.[]fraction.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]margin (string · int32; обязательно)

[]data.[]margin пример: 1000000000

[]data.[]margin.Тип: string · int32

[]data.[]margin.Маржа, в настоящее время обеспечивающая позицию, fp9 в сыром виде. Изменяется вместе с pnl, финансированием и ручными изменениями маржи.

[]data.[]margin.format: int32

[]data.[]margin.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]pnl (string · int32 · nullable; обязательно)

[]data.[]pnl пример: 1000000000

[]data.[]pnl.Тип: string · int32 · nullable

[]data.[]pnl.Реализованный pnl, накопленный по каждому событию позиции, fp9 в сыром виде.

[]data.[]pnl.format: int32

[]data.[]pnl.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]funding (string · int32 · nullable; обязательно)

[]data.[]funding пример: 1000000000

[]data.[]funding.Тип: string · int32 · nullable

[]data.[]funding.Финансирование, уплаченное (отрицательное) или полученное (положительное) за всё время существования позиции, fp9 в необработанном виде.

[]data.[]funding.format: int32

[]data.[]funding.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]rolloverFee (string · int32; обязательно)

[]data.[]rolloverFee пример: 1000000000

[]data.[]rolloverFee.Тип: string · int32

[]data.[]rolloverFee.Всегда `0`. Сохранено для обратной совместимости.

[]data.[]rolloverFee.format: int32

[]data.[]rolloverFee.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]settlementOraclePrice (string · int32; обязательно)

[]data.[]settlementOraclePrice пример: 1000000000

[]data.[]settlementOraclePrice.Тип: string · int32

[]data.[]settlementOraclePrice.Всегда `1000000000` (1.0). Сохранено для обратной совместимости.

[]data.[]settlementOraclePrice.format: int32

[]data.[]settlementOraclePrice.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]fee (string · int32; обязательно)

[]data.[]fee пример: 1000000000

[]data.[]fee.Тип: string · int32

[]data.[]fee.Торговые комиссии, взимаемые за всё время существования позиции, fp9 в необработанном виде.

[]data.[]fee.format: int32

[]data.[]fee.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]feeRate (string · int32; обязательно)

[]data.[]feeRate пример: 1000000000

[]data.[]feeRate.Тип: string · int32

[]data.[]feeRate.Ставка комиссии, применяемая к позиции, fp9 в виде необработанной дроби (`1000000` = 0.1%).

[]data.[]feeRate.format: int32

[]data.[]feeRate.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]exchangedQuote (string · int32; обязательно)

[]data.[]exchangedQuote пример: 1000000000

[]data.[]exchangedQuote.Тип: string · int32

[]data.[]exchangedQuote.Сумма в котируемой валюте, обмененная в результате последнего события, fp9 в необработанном виде.

[]data.[]exchangedQuote.format: int32

[]data.[]exchangedQuote.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]exchangedBase (string · int32; обязательно)

[]data.[]exchangedBase пример: 1000000000

[]data.[]exchangedBase.Тип: string · int32

[]data.[]exchangedBase.Сумма в базовой валюте, обмененная в результате последнего события, fp9 в необработанном виде.

[]data.[]exchangedBase.format: int32

[]data.[]exchangedBase.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]direction (string · enum; обязательно)

[]data.[]direction пример: long

[]data.[]direction.Тип: string · enum

[]data.[]direction.Направление позиции.

[]data.[]direction.Допустимые значения: ["long","short"]

- []data.[]eventName (string · enum; обязательно)

[]data.[]eventName пример: addMargin

[]data.[]eventName.Тип: string · enum

[]data.[]eventName.Тип последнего события, применённого к позиции.

[]data.[]eventName.Допустимые значения: ["addMargin","removeMargin","closePosition","increasePosition","liquidate","forceClose","payFunding"]

- []data.[]pnlInEvent (string · int32; обязательно)

[]data.[]pnlInEvent пример: 1000000000

[]data.[]pnlInEvent.Тип: string · int32

[]data.[]pnlInEvent.Реализованный pnl последнего события, fp9 в сыром виде.

[]data.[]pnlInEvent.format: int32

[]data.[]pnlInEvent.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]rawPnlInEvent (string · int32; обязательно)

[]data.[]rawPnlInEvent пример: 1000000000

[]data.[]rawPnlInEvent.Тип: string · int32

[]data.[]rawPnlInEvent.Реализованный pnl последнего события до 60-секундной корректировки, fp9 в сыром виде. Отличается от `pnlInEvent` только когда корректировка сработала.

[]data.[]rawPnlInEvent.format: int32

[]data.[]rawPnlInEvent.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]profitAdjustmentApplied (boolean; обязательно)

[]data.[]profitAdjustmentApplied пример: true

[]data.[]profitAdjustmentApplied.Тип: boolean

[]data.[]profitAdjustmentApplied.Ограничила ли 60-секундная корректировка прибыль последнего события — в течение минуты после открытия или увеличения позиции pnl не может вырасти выше того, каким он был в тот момент.

- []data.[]holdingTimeMs (string · nullable; обязательно)

[]data.[]holdingTimeMs пример: string

[]data.[]holdingTimeMs.Тип: string · nullable

[]data.[]holdingTimeMs.Как долго позиция удерживалась до самого последнего закрытия, в миллисекундах, считая от открытия или последнего увеличения. Null для событий, которые не являются закрытиями.

- []data.[]feeInEvent (string · int32; обязательно)

[]data.[]feeInEvent пример: 1000000000

[]data.[]feeInEvent.Тип: string · int32

[]data.[]feeInEvent.Комиссия, взимаемая по самому последнему событию, fp9 в сыром виде.

[]data.[]feeInEvent.format: int32

[]data.[]feeInEvent.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]fundingInEvent (string · int32; обязательно)

[]data.[]fundingInEvent пример: 1000000000

[]data.[]fundingInEvent.Тип: string · int32

[]data.[]fundingInEvent.Фандинг, урегулированный самым последним событием, fp9 в сыром виде.

[]data.[]fundingInEvent.format: int32

[]data.[]fundingInEvent.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]rolloverFeeInEvent (string · int32; обязательно)

[]data.[]rolloverFeeInEvent пример: 1000000000

[]data.[]rolloverFeeInEvent.Тип: string · int32

[]data.[]rolloverFeeInEvent.Всегда `0`. Сохранено для обратной совместимости.

[]data.[]rolloverFeeInEvent.format: int32

[]data.[]rolloverFeeInEvent.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]executionFeeRate (string · int32; обязательно)

[]data.[]executionFeeRate пример: 1000000000

[]data.[]executionFeeRate.Тип: string · int32

[]data.[]executionFeeRate.Всегда `0`. Сохранено для обратной совместимости.

[]data.[]executionFeeRate.format: int32

[]data.[]executionFeeRate.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]executionFeeInEvent (string · int32; обязательно)

[]data.[]executionFeeInEvent пример: 1000000000

[]data.[]executionFeeInEvent.Тип: string · int32

[]data.[]executionFeeInEvent.Всегда `0`. Сохранено для обратной совместимости.

[]data.[]executionFeeInEvent.format: int32

[]data.[]executionFeeInEvent.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]executionFee (string · int32; обязательно)

[]data.[]executionFee пример: 1000000000

[]data.[]executionFee.Тип: string · int32

[]data.[]executionFee.Всегда `0`. Сохранено для обратной совместимости.

[]data.[]executionFee.format: int32

[]data.[]executionFee.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]timestamp (string · date-time; обязательно)

[]data.[]timestamp пример: 2026-05-01T12:30:00.000Z

[]data.[]timestamp.Тип: string · date-time

[]data.[]timestamp.Временная метка самого последнего события. То же значение, что и `lastUpdatedAt`.

[]data.[]timestamp.format: date-time

- []data.[]isOnchain (boolean; обязательно)

[]data.[]isOnchain пример: true

[]data.[]isOnchain.Тип: boolean

[]data.[]isOnchain.Всегда `true`. Сохранено для обратной совместимости.

- []data.[]roe (string · int32; обязательно)

[]data.[]roe пример: 1000000000

[]data.[]roe.Тип: string · int32

[]data.[]roe.Рентабельность капитала позиции — реализованный pnl относительно внесённой маржи, fp9 в виде необработанной дроби.

[]data.[]roe.format: int32

[]data.[]roe.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]scalpingCoefficient (string · int32; обязательно)

[]data.[]scalpingCoefficient пример: 1000000000

[]data.[]scalpingCoefficient.Тип: string · int32

[]data.[]scalpingCoefficient.Динамический множитель спреда, применённый к позиции, fp9 в необработанном виде (`1000000000` = 1.0). Выше 1, когда сделка попала в окно рыночного скальпинга.

[]data.[]scalpingCoefficient.format: int32

[]data.[]scalpingCoefficient.pattern: ^(?:-?[1-9][0-9]*|0)$

- []data.[]closeReason (string · nullable; обязательно)

[]data.[]closeReason пример: string

[]data.[]closeReason.Тип: string · nullable

[]data.[]closeReason.Почему платформа закрыла позицию (например, `weekly_session_risk_close`). Null для позиций, закрытых трейдером, и для открытых.

- []totalCount (number; обязательно)

[]totalCount пример: 0

[]totalCount.Тип: number

[]totalCount.Общее количество позиций, соответствующих запросу, по всем страницам.

Пример



```json
[
  {
    "data": [
      {
        "idx": "string",
        "txId": "string",
        "version": 0,
        "openedAt": "2026-05-01T12:30:00.000Z",
        "lastUpdatedAt": "2026-05-01T12:30:00.000Z",
        "closedAt": "2026-05-01T12:30:00.000Z",
        "type": "long",
        "status": "opened",
        "market": "00000000-0000-4000-8000-000000000000",
        "trader": "00000000-0000-4000-8000-000000000000",
        "size": "1000000000",
        "notional": "1000000000",
        "fraction": "1000000000",
        "margin": "1000000000",
        "pnl": "1000000000",
        "funding": "1000000000",
        "rolloverFee": "1000000000",
        "settlementOraclePrice": "1000000000",
        "fee": "1000000000",
        "feeRate": "1000000000",
        "exchangedQuote": "1000000000",
        "exchangedBase": "1000000000",
        "direction": "long",
        "eventName": "addMargin",
        "pnlInEvent": "1000000000",
        "rawPnlInEvent": "1000000000",
        "profitAdjustmentApplied": true,
        "holdingTimeMs": "string",
        "feeInEvent": "1000000000",
        "fundingInEvent": "1000000000",
        "rolloverFeeInEvent": "1000000000",
        "executionFeeRate": "1000000000",
        "executionFeeInEvent": "1000000000",
        "executionFee": "1000000000",
        "timestamp": "2026-05-01T12:30:00.000Z",
        "isOnchain": true,
        "roe": "1000000000",
        "scalpingCoefficient": "1000000000",
        "closeReason": "string"
      }
    ],
    "totalCount": 0
  }
]
```