Типы TypeScript
Типы ответов, запросов и кадров стрима.
Decimal
type Decimal = stringДесятичное число в том виде, в каком его шлёт терминал: "67000.10" остаётся "67000.10".
Никогда не преобразуйте его через Number() — для арифметики возьмите
библиотеку десятичных чисел.
Timestamp
type Timestamp = numberМиллисекунды UTC от начала эпохи, целое число.
InstrumentAddress
type InstrumentAddress = stringАдрес инструмента: exchange:market:symbol, биржа строчными буквами.
Side
type Side = "buy" | "sell"Сторона сделки.
Scope
type Scope = "market:read" | "connections:read" | "account:read" | "trading:write" | OpenStringПрава токена, известные v1. Внутри v1 могут появляться новые права.
MarketTopic
type MarketTopic = "trades" | "ticker" | "mark_price" | "book.top" | "clusters"Рыночные топики: при подписке обязателен instrument, connection_id выбирается по общему правилу.
AccountTopic
type AccountTopic = "account.orders" | "account.positions" | "account.balances" | "account.fills"Топики счёта: при подписке обязателен connection_id, instrument не используется.
TerminalTopic
type TerminalTopic = "workspace" | "settings"Собственные топики терминала: по одному на терминал, подписка без инструмента и подключения.
WorkspaceTopic
type WorkspaceTopic = "workspace"Topic
type Topic = MarketTopic | AccountTopic | TerminalTopicТопики стрима, известные v1.
ErrorCode
type ErrorCode = | "unauthorized"
| "forbidden"
| "forbidden_scope"
| "not_found"
| "invalid_request"
| "unsupported"
| "not_active"
| "rate_limited"
| "not_tradable"
| "unavailable"
| OpenStringКоды ошибок контракта. Внутри v1 могут появляться новые коды.
ConnectionState
type ConnectionState = "disabled" | "enabled" | "connecting" | "connected" | "failed"status.state подключения.
OrderType
type OrderType = "limit" | "market"Тип заявки: limit требует цену, market её не принимает.
OrderStatus
type OrderStatus = "pending" | "open" | "partially_filled"Статус открытой заявки.
TriggerType
type TriggerType = "stop_loss" | "take_profit" | "stop"Вид триггерной заявки.
TriggerRule
type TriggerRule = "price_above_or_equal" | "price_below_or_equal"Когда срабатывает триггер.
TriggerStatus
type TriggerStatus = "open" | "finished" | "inactive" | "invalid"Статус триггерной заявки.
PositionSide
type PositionSide = "long" | "short"Сторона позиции.
TimeInForce
type TimeInForce = "gtc" | "ioc" | "fok" | "post_only"Срок действия поставленной заявки; отсутствует — умолчание площадки.
ErrorEnvelope
Конверт ошибки, который несёт любой ответ не 2xx.
| Поле | Тип | Описание |
|---|---|---|
error | { code: ErrorCode; message: string; } |
List
Списки оборачиваются в { data: [...] }.
| Поле | Тип | Описание |
|---|---|---|
data | T[] |
Limits
Лимиты, которые печатает /v1/meta.
| Поле | Тип | Описание |
|---|---|---|
ws_connections_per_token | number | |
subscriptions_per_connection | number | |
api_only_instruments | number | |
exchange_subscriptions_per_second | number | |
commands_per_secondнеобязательный | number | Торговых команд в секунду на листенер. Отсутствует у терминалов старше этапа «Запись» Local API. |
workspace_commands_per_secondнеобязательный | number | Команд рабочего пространства в секунду на листенер. Отсутствует до этапа «Окно». |
settings_commands_per_secondнеобязательный | number | Записей настроек в секунду на листенер. Отсутствует до этапа «Настройки». |
Meta
GET /v1/meta.
| Поле | Тип | Описание |
|---|---|---|
api_version | string | "1" для этого контракта. |
app_version | string | |
build_hash | string | |
build_env | string | |
features | string | Включённые фичи сборки одной строкой. |
scopes | Scope[] | Права, выданные токену, которым сделан запрос. |
limits | Limits | |
topics | Topic[] | Пусто, если терминал собран без отвода рыночных данных. |
Health
GET /v1/health.
| Поле | Тип | Описание |
|---|---|---|
status | string | |
uptime_ms | number | |
clients | number | Открытые соединения стрима. |
streams | number | Пары, которые держит хаб. |
api_only_instruments | number | Пары, открытые только для API. |
dropped_events | number | События, которые хаб не принял из цикла рыночных данных. |
dropped_frames | number | Кадры, не поместившиеся в очереди клиентов. |
overflow_closes | number | Клиенты, закрытые с кодом 4008. |
stream_available | boolean | false, если в сборке нет отвода рыночных данных. |
ConnectionEvent
Последняя запись истории подключения.
| Поле | Тип | Описание |
|---|---|---|
code | string | Код из той же ленты, которую показывает Settings App. |
ts | Timestamp |
ConnectionStatus
Статус подключения, выведенный из переключателя и ленты истории.
| Поле | Тип | Описание |
|---|---|---|
state | ConnectionState | |
last_eventнеобязательный | ConnectionEvent | Отсутствует, если у подключения нет записи истории в этой сессии. |
Connection
Подключение терминала. Секретов не несёт: ни ключей, ни адреса, ни маски.
| Поле | Тип | Описание |
|---|---|---|
id | number | |
exchange | string | Название биржи строчными буквами, как в адресах инструментов. |
market | string | spot, futures, … |
label | string | |
enabled | boolean | |
read_only | boolean | Подключение без учётных данных, созданное терминалом для рыночных данных. |
has_credentials | boolean | |
proxy_bound | boolean | |
status | ConnectionStatus |
Instrument
Инструмент справочника биржи.
| Поле | Тип | Описание |
|---|---|---|
instrument | InstrumentAddress | |
exchange | string | |
market | string | |
symbol | string | |
base | string | |
quote | string | |
status | string | Как сообщила биржа: active, inactive, … |
tick_size | Decimal | null | null, если биржа его не сообщила. |
lot_size | Decimal | null | |
min_size | Decimal | null | |
contract_value | Decimal | null |
InstrumentsPage
Одна страница GET /v1/instruments.
| Поле | Тип | Описание |
|---|---|---|
exchange | string | |
market | string | |
data | Instrument[] | |
next_cursor | string | null | Передаётся как cursor для следующей страницы; null на последней. |
Candle
Свеча; ts — открытие бара, volume — в базовой монете.
| Поле | Тип | Описание |
|---|---|---|
ts | Timestamp | |
open | Decimal | |
high | Decimal | |
low | Decimal | |
close | Decimal | |
volume | Decimal | |
quote_volume | Decimal | |
closed | boolean |
Candles
GET /v1/market/candles.
| Поле | Тип | Описание |
|---|---|---|
instrument | InstrumentAddress | |
connection_id | number | |
interval | string | |
data | Candle[] |
Interval
Интервал, который знает терминал; duration_ms номинальный (30 дней для 1M).
| Поле | Тип | Описание |
|---|---|---|
id | string | |
duration_ms | number |
Intervals
GET /v1/market/intervals.
| Поле | Тип | Описание |
|---|---|---|
candles | Interval[] | |
clusters | Interval[] |
Trade
Сделка. ts — когда она прошла через терминал.
| Поле | Тип | Описание |
|---|---|---|
id | string | null | Биржевой id сделки; в v1 всегда null. |
price | Decimal | |
qty | Decimal | |
side | Side | |
ts | Timestamp | |
exchange_ts | Timestamp |
Trades
GET /v1/market/trades, от старых к новым.
| Поле | Тип | Описание |
|---|---|---|
instrument | InstrumentAddress | |
connection_id | number | |
data | Trade[] |
Level
type Level = [price: Decimal, size: Decimal]Уровень стакана как [price, size].
Ticker
Суточный тикер.
| Поле | Тип | Описание |
|---|---|---|
price | Decimal | |
change_24h_pct | Decimal | null | |
volume_24h | Decimal | |
high_24h | Decimal | null | |
low_24h | Decimal | null | |
best_bid | Decimal | null | |
best_ask | Decimal | null | |
ts | Timestamp |
MarkPrice
Цена маркировки (mark), data события mark_price.
| Поле | Тип | Описание |
|---|---|---|
mark_price | Decimal | |
ts | Timestamp |
Snapshot
GET /v1/market/snapshot: последнее, что хаб знает о паре.
| Поле | Тип | Описание |
|---|---|---|
instrument | InstrumentAddress | |
connection_id | number | |
ts | Timestamp | |
best_bid | Level | null | Из стакана хаба; null, пока не пришёл снимок стакана. |
best_ask | Level | null | |
last_trade | Trade | null | |
mark_price | Decimal | null | |
ticker | Ticker | null |
BookTop
Верхушка стакана: биды от лучшей цены вниз, аски от лучшей цены вверх.
| Поле | Тип | Описание |
|---|---|---|
ts | Timestamp | |
depth | number | |
bids | Level[] | |
asks | Level[] |
Orderbook
interface Orderbook extends BookTopGET /v1/market/orderbook.
| Поле | Тип | Описание |
|---|---|---|
instrument | InstrumentAddress | |
connection_id | number |
ClusterLevel
Один ценовой уровень бакета кластеров.
| Поле | Тип | Описание |
|---|---|---|
price | Decimal | |
volume | Decimal | |
buy_volume | Decimal | |
sell_volume | Decimal | |
buy_trades | number | |
sell_trades | number |
ClusterBucket
Бакет кластеров; levels идут от низшей цены к высшей.
| Поле | Тип | Описание |
|---|---|---|
interval | string | |
ts | Timestamp | Начало бакета. |
end_ts | Timestamp | |
volume | Decimal | |
buy_volume | Decimal | |
sell_volume | Decimal | |
trades | number | |
vwap | Decimal | null | null у бакета без сделок. |
min_price | Decimal | null | |
max_price | Decimal | null | |
completed | boolean | |
last_trade_ts | Timestamp | 0 у бакета из истории без времени сделки. |
levels | ClusterLevel[] |
Clusters
GET /v1/market/clusters, от старых к новым, не больше десяти бакетов.
| Поле | Тип | Описание |
|---|---|---|
instrument | InstrumentAddress | |
connection_id | number | |
interval | string | Интервал, выбранный для инструмента в терминале. |
ts | Timestamp | |
data | ClusterBucket[] |
Order
Открытая заявка подключения.
| Поле | Тип | Описание |
|---|---|---|
key | string | null | Ключ заявки в терминале (t-…); null, пока неизвестен. |
exchange_id | string | null | Биржевой id заявки; null, пока неизвестен. |
instrument | InstrumentAddress | |
side | Side | |
type | OrderType | |
price | Decimal | |
size | Decimal | В базовой монете. |
filled | Decimal | |
remaining | Decimal | |
notional | Decimal | null | Сумма в валюте котировки, которую ввёл трейдер; null у заявки из снимка биржи. |
status | OrderStatus | |
created_ts | Timestamp |
TriggerOrder
Триггерная заявка (стоп-лосс, тейк-профит, стоп) подключения.
| Поле | Тип | Описание |
|---|---|---|
id | string | |
instrument | InstrumentAddress | |
type | TriggerType | |
trigger_price | Decimal | |
rule | TriggerRule | |
size | Decimal | null | |
notional | Decimal | null | |
status | TriggerStatus | |
order_type | string | null | Заявка, которая ставится при срабатывании триггера; null, если неизвестна. |
client_id | string | null | |
created_ts | Timestamp | null |
AccountOrders
GET /v1/account/orders: открытые заявки и триггерные заявки одного подключения.
| Поле | Тип | Описание |
|---|---|---|
connection_id | number | |
data | Order[] | |
triggers | TriggerOrder[] |
Position
Открытая позиция.
| Поле | Тип | Описание |
|---|---|---|
instrument | InstrumentAddress | |
side | PositionSide | |
size | Decimal | В базовой монете; на MOEX — в лотах. |
lot_size | Decimal | Базовых единиц в лоте. |
entry_price | Decimal | |
notional | Decimal | В валюте котировки. |
unrealized_pnl | Decimal | Как считает терминал. |
mark_price | Decimal | null | Mark терминала: лучший bid для лонга, лучший ask для шорта; null до первого тика стакана. |
AccountPositions
GET /v1/account/positions.
| Поле | Тип | Описание |
|---|---|---|
connection_id | number | |
data | Position[] |
Balance
Последний баланс одной валюты, как сообщила биржа.
| Поле | Тип | Описание |
|---|---|---|
currency | string | |
total | Decimal | |
available | Decimal | null | null, если площадка его не сообщает. |
locked | Decimal | null | |
ts | Timestamp | Время биржи, где оно есть, иначе время получения. |
AccountBalances
GET /v1/account/balances: валюты, изменившиеся с момента включения API.
| Поле | Тип | Описание |
|---|---|---|
connection_id | number | |
data | Balance[] |
Fill
Исполнение собственной заявки подключения.
| Поле | Тип | Описание |
|---|---|---|
trade_id | string | |
order_id | string | |
instrument | InstrumentAddress | |
side | Side | |
price | Decimal | |
qty | Decimal | |
fee | Decimal | |
fee_currency | string | |
position_side | PositionSide | null | long / short на площадках с режимом хеджирования, иначе null. |
ts | Timestamp |
AccountFills
GET /v1/account/fills, от старых к новым.
| Поле | Тип | Описание |
|---|---|---|
connection_id | number | |
data | Fill[] |
PlaceOrderRequest
Тело POST /v1/orders, как оно уходит на провод.
| Поле | Тип | Описание |
|---|---|---|
connection_id | number | |
instrument | InstrumentAddress | |
side | Side | |
type | OrderType | |
priceнеобязательный | Decimal | Обязателен для limit, отсутствует для market. |
sizeнеобязательный | Decimal | Количество в базовой монете; ровно одно из size и notional. |
notionalнеобязательный | Decimal | Сумма в валюте котировки; ровно одно из size и notional. |
reduce_onlyнеобязательный | boolean | |
post_onlyнеобязательный | boolean | |
time_in_forceнеобязательный | TimeInForce | |
client_keyнеобязательный | string | Ключ идемпотентности: повтор с тем же ключом возвращает прежний ответ. |
InstrumentCommandRequest
Тело POST /v1/orders/cancel-all, POST /v1/orders/trigger/cancel-all и POST /v1/positions/close.
| Поле | Тип | Описание |
|---|---|---|
connection_id | number | |
instrument | InstrumentAddress |
PlaceTriggerRequest
Тело POST /v1/orders/trigger. stop_loss и take_profit
ставятся на открытую позицию (сторона, размер и правило берутся из неё); stop
несёт свои side, notional и необязательное rule.
| Поле | Тип | Описание |
|---|---|---|
connection_id | number | |
instrument | InstrumentAddress | |
kind | TriggerType | |
trigger_price | Decimal | |
sideнеобязательный | Side | Только для stop. |
notionalнеобязательный | Decimal | Только для stop: сумма в валюте котировки. |
ruleнеобязательный | TriggerRule | Только для stop; без него — выше рынка для покупки, ниже для продажи. |
client_keyнеобязательный | string | Ключ идемпотентности, как у POST /v1/orders. |
AmendTriggerRequest
Тело PATCH /v1/orders/trigger/{id}: новая цена срабатывания.
| Поле | Тип | Описание |
|---|---|---|
connection_id | number | |
instrument | InstrumentAddress | |
kind | TriggerType | |
trigger_price | Decimal | |
sideнеобязательный | Side | Только для stop. |
ruleнеобязательный | TriggerRule | Только для stop. |
LeverageMode
type LeverageMode = "manual" | "max" | "smart"Режим плеча инструмента в терминале, а не на бирже.
MarginMode
type MarginMode = "cross" | "isolated"Режим маржи фьючерсного инструмента.
Leverage
GET /v1/account/leverage: плечо и режим маржи одного фьючерсного
инструмента из кэша терминала. Инструмент, которого терминал ещё не
касался, отвечает 409 not_active.
| Поле | Тип | Описание |
|---|---|---|
connection_id | number | |
instrument | InstrumentAddress | |
leverage | number | |
max_leverage | number | |
mode | LeverageMode | |
margin_mode | MarginMode |
SetLeverageRequest
Тело POST /v1/account/leverage: ровно одно из leverage и mode.
| Поле | Тип | Описание |
|---|---|---|
connection_id | number | |
instrument | InstrumentAddress | |
leverageнеобязательный | number | Целое число не меньше 1. |
modeнеобязательный | "max" | "smart" |
SetMarginModeRequest
Тело POST /v1/account/margin-mode.
| Поле | Тип | Описание |
|---|---|---|
connection_id | number | |
instrument | InstrumentAddress | |
margin_mode | MarginMode |
Accepted
Ответ любой торговой команды: принято терминалом, а не
биржей. Подтверждение, исполнение или отказ биржи приходят
через account.orders в стриме или GET /v1/account/orders.
| Поле | Тип | Описание |
|---|---|---|
accepted | boolean | |
operation_id | string | Операция в файле операций терминала. |
key | string | null | Ключ терминала, под которым заявка (t-…) или триггер (sl_…,
tp_…, stop_…) появляется в account.orders; null у снятий,
правок и плеча. |
connection_id | number | |
instrument | InstrumentAddress |
CellPosition
Ячейка сетки вкладки: колонка слева направо, строка сверху вниз, ячейка внутри строки.
| Поле | Тип | Описание |
|---|---|---|
column | number | |
row | number | |
cell | number |
Stack
Стек — стакан с его лентой сделок и кластерами — внутри вкладки.
widget_id глобален для этого запуска терминала; instrument и
connection_id равны null, пока стек empty; position равен
null у стека, скрытого внутри группы стеков.
| Поле | Тип | Описание |
|---|---|---|
widget_id | number | |
instrument | InstrumentAddress | null | |
connection_id | number | null | |
empty | boolean | |
frozen | boolean | |
position | CellPosition | null |
Chart
График внутри вкладки; owner_widget_id — стек, за которым он следует, null у самостоятельного.
| Поле | Тип | Описание |
|---|---|---|
widget_id | number | |
instrument | InstrumentAddress | null | |
connection_id | number | null | |
interval | string | Код интервала свечей (1m, 5m, …). |
owner_widget_id | number | null | |
position | CellPosition | null |
Tab
Вкладка окна: id нумеруется в каждом окне с 1; ровно одна вкладка окна active.
| Поле | Тип | Описание |
|---|---|---|
id | number | |
name | string | |
active | boolean | |
stacks | Stack[] | |
charts | Chart[] |
WindowGeometry
Положение и размер окна в логических пикселях экрана.
| Поле | Тип | Описание |
|---|---|---|
x | number | |
y | number | |
width | number | |
height | number | |
maximized | boolean |
Window
Окно терминала; main нельзя закрыть через API, chart_window — вынесенный график.
| Поле | Тип | Описание |
|---|---|---|
id | number | |
main | boolean | |
chart_window | boolean | |
focused | boolean | |
geometry | WindowGeometry | |
monitor | string | null | Имя монитора по данным ОС или null. |
tabs | Tab[] |
WorkspaceSnapshot
data ответа GET /v1/workspace и события workspace: все окна по возрастанию id.
| Поле | Тип | Описание |
|---|---|---|
windows | Window[] |
Workspace
GET /v1/workspace. Идентификаторы внутренние для этого запуска терминала.
| Поле | Тип | Описание |
|---|---|---|
data | WorkspaceSnapshot |
WorkspaceWindow
GET /v1/workspace/windows/{id}.
| Поле | Тип | Описание |
|---|---|---|
data | Window |
OpenTarget
type OpenTarget = "new_tab" | "new_window"Куда попадает открытие в рабочем пространстве.
OpenStackRequest
Тело POST /v1/workspace/stacks.
| Поле | Тип | Описание |
|---|---|---|
instrument | InstrumentAddress | |
connection_idнеобязательный | number | |
chartнеобязательный | boolean | График того же инструмента над стеком. |
targetнеобязательный | OpenTarget | new_tab (по умолчанию) или new_window. |
window_idнеобязательный | number | Окно для новой вкладки; без него — окно в фокусе. |
activateнеобязательный | boolean | false открывает вкладку в фоне; новое окно всегда получает фокус. |
OpenMultiviewRequest
Тело POST /v1/workspace/multiview.
| Поле | Тип | Описание |
|---|---|---|
base | string | Монета (BTC) или пара (BTC/USDT). |
targetнеобязательный | OpenTarget | Без него решает настройка мультивью «Открывать». |
window_idнеобязательный | number | |
activateнеобязательный | boolean |
TabItemRequest
Одна колонка POST /v1/workspace/tabs и …/tabs/{tab}/stacks: стек и, с chart, график над ним.
| Поле | Тип | Описание |
|---|---|---|
instrument | InstrumentAddress | |
connection_idнеобязательный | number | |
chartнеобязательный | boolean |
OpenTabRequest
Тело POST /v1/workspace/tabs: колонка на элемент, от одного до пятидесяти.
| Поле | Тип | Описание |
|---|---|---|
items | TabItemRequest[] | |
nameнеобязательный | string | До 64 символов; без него терминал называет вкладку по инструментам. |
targetнеобязательный | OpenTarget | |
window_idнеобязательный | number | |
activateнеобязательный | boolean |
AddStacksRequest
Тело POST /v1/workspace/windows/{id}/tabs/{tab}/stacks.
| Поле | Тип | Описание |
|---|---|---|
items | TabItemRequest[] |
StackInstrumentRequest
Тело PATCH /v1/workspace/stacks/{widget_id}.
| Поле | Тип | Описание |
|---|---|---|
instrument | InstrumentAddress | |
connection_idнеобязательный | number |
WorkspaceOutcome
Что сделало окно по команде рабочего пространства. При открытии: окно,
новая вкладка и её stacks и charts в порядке колонок. При закрытии и
активации: затронутые идентификаторы, остальное — null или пусто.
| Поле | Тип | Описание |
|---|---|---|
window_id | number | null | |
tab_id | number | null | |
stacks | number[] | |
charts | number[] |
SettingRow
Одна строка таблицы настроек терминала, как она хранится. scope — global
или order_book; scope_id — default, адрес инструмента или null
у горячих клавиш; connection_id — подключение-владелец или null. value
— декодированный JSON, числа как записаны. writable говорит, принимает ли
PATCH /v1/settings этот ключ; кадр стрима settings такого флага
не несёт.
| Поле | Тип | Описание |
|---|---|---|
scope | string | |
scope_id | string | null | |
connection_id | number | null | |
category | string | |
key | string | |
value | unknown | |
writableнеобязательный | boolean |
Settings
GET /v1/settings: строки, как они хранятся, без лестницы умолчаний.
| Поле | Тип | Описание |
|---|---|---|
data | SettingRow[] |
ResolvedFrom
type ResolvedFrom = "instrument" | "connection" | "app_instrument" | "global" | OpenStringУровень, с которого взята настройка стека.
OrderbookSetting
Одна настройка стека с уровнем, с которого она взята.
| Поле | Тип | Описание |
|---|---|---|
value | unknown | |
resolved_from | ResolvedFrom | |
writable | boolean |
OrderbookSettings
GET /v1/settings/orderbook: data[category][key], как их видит стек инструмента.
| Поле | Тип | Описание |
|---|---|---|
connection_id | number | |
instrument | InstrumentAddress | |
data | Record<string, Record<string, OrderbookSetting>> |
SettingChange
Одно изменение PATCH /v1/settings. instrument адресует строку пары
(область order_book); connection_id со scope: "order_book" и без
инструмента адресует умолчание подключения; без обоих адресуется
глобальное умолчание. Глобальные настройки подключения не принимают.
| Поле | Тип | Описание |
|---|---|---|
scopeнеобязательный | "global" | "order_book" | |
instrumentнеобязательный | InstrumentAddress | |
connection_idнеобязательный | number | |
category | string | |
key | string | |
value | unknown |
UpdateSettingsRequest
Тело PATCH /v1/settings.
| Поле | Тип | Описание |
|---|---|---|
changes | SettingChange[] |
SettingsApplied
PATCH /v1/settings: сколько изменений применено (все, иначе вызов отклонён).
| Поле | Тип | Описание |
|---|---|---|
applied | number |
BookTopParams
Параметры подписки book.top; другие топики их не принимают. Имена как на проводе.
| Поле | Тип | Описание |
|---|---|---|
depthнеобязательный | number | 1–200, по умолчанию 50. |
interval_msнеобязательный | number | Интервал конфляции, не меньше 50, по умолчанию 100. |
SubscribeRequest
Запрос subscribe, как он уходит на провод.
| Поле | Тип | Описание |
|---|---|---|
type | "subscribe" | |
request_id | string | |
topic | Topic | |
instrumentнеобязательный | InstrumentAddress | Обязателен для рыночных топиков, опускается для account.*. |
connection_idнеобязательный | number | Для рыночных топиков выбирается по общему правилу, для account.* обязателен. |
paramsнеобязательный | BookTopParams |
UnsubscribeRequest
Запрос unsubscribe, как он уходит на провод.
| Поле | Тип | Описание |
|---|---|---|
type | "unsubscribe" | |
request_id | string | |
sub | string |
SubscribedFrame
Ответ сервера на subscribe.
| Поле | Тип | Описание |
|---|---|---|
type | "subscribed" | |
request_idнеобязательный | string | |
sub | string | Идентификатор подписки, "{stream}:{topic}" ("{connection}:account.<topic>", "workspace"); передаётся в unsubscribe. |
connection_idнеобязательный | number | Подключение, выбранное для рыночных топиков и топиков счёта; отсутствует у workspace. |
UnsubscribedFrame
Ответ сервера на unsubscribe.
| Поле | Тип | Описание |
|---|---|---|
type | "unsubscribed" | |
request_idнеобязательный | string | |
sub | string |
ErrorFrame
Кадр error: с request_id он отвечает на запрос, с sub и без
request_id он говорит, что сервер снял эту подписку.
| Поле | Тип | Описание |
|---|---|---|
type | "error" | |
request_idнеобязательный | string | |
subнеобязательный | string | |
code | ErrorCode | |
message | string |
EventFrame
Кадр event, как он приходит, до того как клиент пометит его топиком.
| Поле | Тип | Описание |
|---|---|---|
type | "event" | |
sub | string | |
seq | number | Номер события в подписке; у trades растёт на единицу. |
ts | Timestamp | |
data | T |
Gap
Кадр gap: события from_seq..to_seq подписки trades потеряны.
| Поле | Тип | Описание |
|---|---|---|
type | "gap" | |
sub | string | |
from_seq | number | |
to_seq | number | |
reason | string |
SubscriptionError
Сервер снял подписку (кадр error с sub, без request_id).
| Поле | Тип | Описание |
|---|---|---|
type | "error" | |
sub | string | |
code | ErrorCode | |
message | string |
Subscribed
interface Subscribed extends SubscribedFrameЧем разрешается subscribe: кадр subscribed плюс то, что было запрошено.
| Поле | Тип | Описание |
|---|---|---|
topic | Topic | |
instrumentнеобязательный | InstrumentAddress | Отсутствует у подписок account.*. |
OrdersUpdate
data события account.orders: заявки и триггеры одного инструмента после изменения.
| Поле | Тип | Описание |
|---|---|---|
instrument | InstrumentAddress | |
orders | Order[] | |
triggers | TriggerOrder[] |
PositionUpdate
data события account.positions; закрытие приходит как position: null.
| Поле | Тип | Описание |
|---|---|---|
instrument | InstrumentAddress | |
position | Position | null |
TradesEvent
interface TradesEvent extends EventFrame<Trade[]>Все события, которые клиент умеет помечать топиком; topic читается из sub (часть после первого двоеточия).
| Поле | Тип | Описание |
|---|---|---|
topic | "trades" |
TickerEvent
interface TickerEvent extends EventFrame<Ticker>| Поле | Тип | Описание |
|---|---|---|
topic | "ticker" |
MarkPriceEvent
interface MarkPriceEvent extends EventFrame<MarkPrice>| Поле | Тип | Описание |
|---|---|---|
topic | "mark_price" |
BookTopEvent
interface BookTopEvent extends EventFrame<BookTop>| Поле | Тип | Описание |
|---|---|---|
topic | "book.top" |
ClustersEvent
interface ClustersEvent extends EventFrame<ClusterBucket>| Поле | Тип | Описание |
|---|---|---|
topic | "clusters" |
AccountOrdersEvent
interface AccountOrdersEvent extends EventFrame<OrdersUpdate>| Поле | Тип | Описание |
|---|---|---|
topic | "account.orders" |
AccountPositionsEvent
interface AccountPositionsEvent extends EventFrame<PositionUpdate>| Поле | Тип | Описание |
|---|---|---|
topic | "account.positions" |
AccountBalancesEvent
interface AccountBalancesEvent extends EventFrame<Balance>| Поле | Тип | Описание |
|---|---|---|
topic | "account.balances" |
AccountFillsEvent
interface AccountFillsEvent extends EventFrame<Fill>| Поле | Тип | Описание |
|---|---|---|
topic | "account.fills" |
WorkspaceEvent
interface WorkspaceEvent extends EventFrame<WorkspaceSnapshot>data события workspace: раскладка целиком; первый кадр — текущий снимок.
| Поле | Тип | Описание |
|---|---|---|
topic | "workspace" |
SettingsEvent
interface SettingsEvent extends EventFrame<SettingRow>data события settings: одна записанная строка, без writable.
| Поле | Тип | Описание |
|---|---|---|
topic | "settings" |
UnknownTopicEvent
interface UnknownTopicEvent extends EventFrame<unknown>Событие топика, которого эта версия клиента не знает (контракт может добавлять
топики внутри v1). topic равен undefined; сырое имя топика — часть
sub после двоеточия.
| Поле | Тип | Описание |
|---|---|---|
topic | undefined |
Event
type Event = | TradesEvent
| TickerEvent
| MarkPriceEvent
| BookTopEvent
| ClustersEvent
| AccountOrdersEvent
| AccountPositionsEvent
| AccountBalancesEvent
| AccountFillsEvent
| WorkspaceEvent
| SettingsEvent
| UnknownTopicEventКадр события, различаемый по topic.
StreamFrame
type StreamFrame = Event | Gap | SubscriptionErrorЧто отдаёт итерация по Stream, в порядке прихода.
Собрано из кода @spectre-trade/terminal, коммит 2d1c324.