Статус транзакций
Этот WebSocket поток предоставляет обновления о статусе созданных заявок, включая события создания, исполнения, частичного исполнения, отмены, замены и отклонения.
🔌 WebSocket URL
wss://ws.broker.ru/trade-api-bff-operations/api/v1/orders/transaction/ws
🔐 Аутентификация
Перед установкой WebSocket-соединения клиент должен передать access-token в HTTP-заголовке:
Authorization: Bearer <ACCESS_TOKEN>
Подробнее об авторизации см. раздел Авторизация.
📥 Формат успешного ответа
Успешный ответ
{
"originalClientOrderId": "517661df-d051-461d-9389-988abf24de4d",
"clientOrderId": "",
"data": {
"messageType": "8",
"orderStatus": "1",
"executionType": "12",
"orderQuantity": 100,
"executedQuantity": 50,
"lastQuantity": 50,
"remainedQuantity": 50,
"ticker": "SBER",
"classCode": "TQBR",
"side": "1",
"orderType": "2",
"averagePrice": 244.5,
"orderId": "20241030-TQBR-12345678910",
"executionId": "TQBR-Z3fE7c-S-1-1-N",
"price": 244.5,
"currency": "RUB",
"clientCode": "123456",
"transactionTime": "2024-10-30T09:01:00.000Z",
"tradeDate": "2024-10-30",
"orderNumber": "12345678910",
"accruedCoupon": 0,
"executionValue": 12225,
"commission": 12.3,
"securityExchange": "TQBR"
}
}
📄 Описание параметров
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
originalClientOrderId | string (uuid) | Уникальный идентификатор измененной заявки |
clientOrderId | string (uuid) | Уникальный идентификатор заявки |
data | object / null | Контейнер данных статуса |
Поля объекта data
| Поле | Тип | Описание |
|---|---|---|
messageType | string | Тип сообщения |
orderStatus | string (enum) | Состояние заявки:0 — Новая1 — Частично исполнена2 — Полностью исполнена4 — Отменена5 — Заменена6 — Отменяется (в процессе отмены)8 — Отклонена9 — Заменяется (например, если вы изменяли заявку)10 — Ожидает подтверждения новой заявки |
executionType | string (enum) | Тип отчета. Возможные значения:0 — Новая1 — Частично исполнена2 — Исполнена4 — Отменена6 — Ожидает отмены5 — Заменена8 — Отклонена9 — Приостановлена10 — Ожидает подтверждения новой11 — Сделка12 — Статус заявки13 — Исправлено |
orderQuantity | number | Количество в заявке (шт.) |
executedQuantity | number | Исполненное количество (шт.) |
lastQuantity | number | Количество в текущей сделке (шт.) |
remainedQuantity | number | Оставшееся количество (шт.) |
ticker | string | Тикер инструмента |
classCode | string | Код класса ценной бумаги |
side | string (enum) | 1 – Покупка2 – Продажа |
orderType | string (enum) | 1 – Рыночная заявка2 – Лимитная заявка |
averagePrice | number | Средняя цена исполнения. Для сделок РЕПО/спредов: цена первой части |
orderId | string | Уникальный идентификатор заявки |
executionId | string | Уникальный идентификатор сделки |
price | number | Цена заявки |
currency | string | Валюта |
clientCode | string | Код клиента |
transactionTime | string (datetime) | Дата и время транзакции |
tradeDate | string (datetime) | Дата сделки: Для вечерней сессии FORTS - дата следующей сессии Обычные сделки - дата исполнения |
orderNumber | string | Номер заявки |
accruedCoupon | number | Накопленный купонный доход |
executionValue | number | Объем сделки |
commission | number | Комиссия |
securityExchange | string | Идентификатор биржи |
rejectReason | string | Причина отклонения заявки |
💻 Примеры использования
- JavaScript (Node.js)
- Python
- Go (Golang)
- Java
- C#
import WebSocket from "ws";
const URL = "wss://ws.broker.ru/trade-api-bff-operations/api/v1/orders/transaction/ws";
const ws = new WebSocket(URL, {
headers: {
Authorization: "Bearer YOUR_ACCESS_TOKEN",
},
});
ws.on("open", () => {
console.log("connected");
});
ws.on("message", (event) => {
const payload = JSON.parse(event.toString());
console.log(payload);
});
ws.on("error", (error) => {
console.error("WebSocket error:", error);
});
import asyncio
import json
import websockets
URL = "wss://ws.broker.ru/trade-api-bff-operations/api/v1/orders/transaction/ws"
TOKEN = "YOUR_ACCESS_TOKEN"
async def main():
async with websockets.connect(
URL,
additional_headers={"Authorization": f"Bearer {TOKEN}"},
) as ws:
async for message in ws:
data = json.loads(message)
print(data)
if __name__ == "__main__":
asyncio.run(main())
package main
import (
"log"
"net/http"
"github.com/gorilla/websocket"
)
func main() {
header := http.Header{}
header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN")
c, _, err := websocket.DefaultDialer.Dial(
"wss://ws.broker.ru/trade-api-bff-operations/api/v1/orders/transaction/ws",
header,
)
if err != nil {
log.Fatal("dial:", err)
}
defer c.Close()
for {
_, message, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
return
}
log.Printf("received: %s", message)
}
}
import okhttp3.*;
public class TransactionStatusWs {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("wss://ws.broker.ru/trade-api-bff-operations/api/v1/orders/transaction/ws")
.addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.build();
WebSocketListener listener = new WebSocketListener() {
@Override
public void onOpen(WebSocket webSocket, Response response) {
System.out.println("connected");
}
@Override
public void onMessage(WebSocket webSocket, String text) {
System.out.println(text);
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
t.printStackTrace();
}
};
client.newWebSocket(request, listener);
}
}
using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var ws = new ClientWebSocket();
ws.Options.SetRequestHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN");
await ws.ConnectAsync(
new Uri("wss://ws.broker.ru/trade-api-bff-operations/api/v1/orders/transaction/ws"),
CancellationToken.None
);
var buffer = new byte[8192];
while (ws.State == WebSocketState.Open)
{
var result = await ws.ReceiveAsync(buffer, CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Close)
{
break;
}
var json = Encoding.UTF8.GetString(buffer, 0, result.Count);
Console.WriteLine(json);
}
}
}
❗ Ошибки
| HTTP | Ошибка | Описание |
|---|---|---|
| 401 | UNAUTHORIZED | Ошибка авторизации |
| 500 | INTERNAL SERVER ERROR | Внутренняя ошибка сервера |