> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.6mm.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.6mm.com/_mcp/server.

# Частный пользовательский канал

> Подпишитесь на аутентифицированные события 6MM WebSocket для получения ордеров, позиций, балансов и изменений счета, создав и поддерживая ключ прослушивания.

Сначала создайте `listenKey` :

```http
POST /v1/private/user/listen-key
```

Пример ответа:

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "listenKey": "f57cb61ef604ce76be09e753a5dbdd8c",
    "expireAt": 1777539918867
  },
  "requestId": "req-listen-key"
}
```

`listenKey` по умолчанию действует 60 минут. Рекомендуется продлевать каждые 30 минут.

<h2 id="renew">
  Продлевать
</h2>

```http
PUT /v1/private/user/listen-key
Content-Type: application/json
```

```json
{ "listenKey": "f57cb61ef604ce76be09e753a5dbdd8c" }
```

<h2 id="close">
  Закрыть
</h2>

```http
DELETE /v1/private/user/listen-key
Content-Type: application/json
```

```json
{ "listenKey": "f57cb61ef604ce76be09e753a5dbdd8c" }
```

<h2 id="connect-to-private-websocket">
  Подключитесь к частному WebSocket
</h2>

```
wss://ws.6mm.com/ws?listenKey=YOUR_LISTEN_KEY
```

Совместимый JWT способ подключения:

```
wss://ws.6mm.com/ws?token=YOUR_ACCESS_TOKEN
```

После успешной аутентификации сервер автоматически подписывается на подключение к приватному каналу текущего пользователя. Ручная подписка не требуется.

Успешное подтверждение аутентификации:

```json
{ "event": "auth", "success": true, "data": "1188041528" }
```

<h2 id="common-private-events">
  Частные частные мероприятия
</h2>

| Событие              | Описание                                                                 |
| -------------------- | ------------------------------------------------------------------------ |
| `ORDER_TRADE_UPDATE` | Изменения статуса заказов, включая новый заказ, поправку, обмен и отмену |
| `ACCOUNT_UPDATE`     | Баланс счета и изменения позиций                                         |

Обёртка приватного push-сообщения:

```json
{
  "topic": "user.5794",
  "ts": 1771047000000,
  "data": {
    "eventType": "ORDER_TRADE_UPDATE"
  }
}
```

REST конечные точки запросов и WebSocket приватные потоки используют отдельные схемы. Клиенты должны парсировать каждую схему независимо и не предполагать, что имена полей идентичны.

<h2 id="common-differences">
  Общие различия
</h2>

| Домен               | REST поле      | WebSocket поле                                             |
| ------------------- | -------------- | ---------------------------------------------------------- |
| Статус ордена       | `status`       | `orderStatus`                                              |
| Замороженный баланс | `frozenMargin` | `frozenBalance`                                            |
| Режим margin        | `marginMode`   | `marginMode`, возвращается как строка в позициях и потоках |

<h2 id="recovery-and-reconciliation">
  Восстановление и примирение
</h2>

* Продлить listenKey до истечения срока действия и создать новый, если продление не удалось.
* Восстановить соединение, повторную аутентификацию и воспринимать новый сокет как новую сессию события.
* Дедупликация событий перед изменением баланса партнёров или записей заказов.
* Если события были пропущены, запросить [orders](/ru/developer-api/rest-api/order), [positions](/ru/developer-api/rest-api/position) и [account state](/ru/developer-api/rest-api/user-and-account) через REST.
* Следуйте [руководству по соединению и сердцебиению](/ru/developer-api/websocket/connection-subscription-and-heartbeat) для повторного попытки и обработки застоявшихся соединений.