Перейти к основному содержимому

WebSocket API (STOMP)

Обзор

XRuby Spot предоставляет публичный WebSocket API для получения рыночных данных в реальном времени с использованием протокола STOMP поверх WebSocket.

Доступные данные:

  • Стакан заявок (глубина рынка)
  • Последние сделки
  • Информация о валютной паре (изменения цен)
  • Все доступные пары для базовой валюты

Все топики публичные и не требуют аутентификации.

Подключение

WebSocket Endpoint

wss://api.xruby.kg/ws-2

STOMP Connect Frame

После установки WebSocket-соединения отправьте STOMP CONNECT frame:

CONNECT
mode:public
accept-version:1.2,1.1,1.0
heart-beat:10000,10000

Параметры подключения:

ПараметрОписаниеПример
modeРежим доступаpublic
accept-versionПоддерживаемые версии STOMP1.2,1.1,1.0
heart-beatИнтервал heartbeat (мс) (допустимое значения от 0)10000,10000

Примечание

Пример успешного подключения

После успешного подключения вы получите ответ:

CONNECTED
version:1.2
heart-beat:10000,10000

Подписка на данные (SUBSCRIBE Frame)

После получения CONNECTED фрейма вы можете подписаться на интересующие вас темы, отправив SUBSCRIBE фрейм:

SUBSCRIBE
id:sub-0
destination:/topic/public/v1/trade/USDT-KGS/ticker

Параметры SUBSCRIBE:

ПараметрОбязательныйОписаниеПример
idОбязательноУникальный идентификатор подписки на стороне клиентаsub-0, orderbook-1
destinationОбязательноПуть к теме для подписки/topic/public/v1/trade/USDT-KGS/ticker

Примечания:

  • id должен быть уникальным для каждой активной подписки
  • Для отписки используйте UNSUBSCRIBE фрейм с тем же id
  • Можно создавать несколько одновременных подписок с разными id

Подписка на данные

Формат Destination (топиков)

Все темы имеют следующий базовый формат:

/topic/public/v1/trade/{параметры}

1. Стакан заявок (Orderbook)

Destination:

/topic/public/v1/trade/{глубина}/{пара валют}/orderbook

Параметры:

ПараметрТипОписаниеПример
глубинаstringГлубина стакана (целое число или десятичное)0.1, 5, 10, 50, 100
валютыstringВалютная пара в формате {symbolFrom}-{symbolTo}USDT-KGS

Пример подписки:

/topic/public/v1/trade/0.1/USDT-KGS/orderbook

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

{
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"success": true,
"isCheckResponse": false,
"timestamp": "2024-01-15T10:30:00Z",
"result": {
"currencyFrom": "USDT",
"currencyTo": "KGS",
"depth": "0.1",
"asks": [
{
"price": "88.5",
"volume": "22.60",
"amount": "2000"
},
{
"price": "88.6",
"volume": "28.22",
"amount": "2500"
},
{
"price": "88.7",
"volume": "45.10",
"amount": "4000"
}
],
"bids": [
{
"price": "88.4",
"volume": "22.62",
"amount": "2000"
},
{
"price": "88.3",
"volume": "56.62",
"amount": "5000"
},
{
"price": "88.2",
"volume": "113.38",
"amount": "10000"
}
]
}
}

Описание параметров ответа:

ПараметрТипОписание
bidsarrayЗаявки на покупку (ордера типа BUY)
bids[].pricestringЦена покупки (в валюте currencyTo)
bids[].volumestringЭквивалентный объем в валюте currencyTo
bids[].amountstringСумма покупки (в валюте currencyTo)
asksarrayЗаявки на продажу (ордера типа SELL)
asks[].pricestringЦена продажи (в валюте currencyFrom)
asks[].volumestringЭквивалентный объем в валюте currencyFrom
asks[].amountstringСумма продажи (в валюте currencyFrom)

Примечание: Список доступных пар для подписки можно получить из метода GET /configuration/trade/pairs

2. Последние сделки (Trades)

Destination:

/topic/public/v1/trade/deals/{пара валют}

Пример подписки:

/topic/public/v1/trade/deals/USDT-KGS

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

{
"requestId": "123e4567-e89b-12d3-a456-426614174001",
"success": true,
"isCheckResponse": false,
"timestamp": "2024-01-15T10:30:00Z",
"result": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"price": "88.47",
"volume": "100",
"amount": "8847",
"orderType": "LIMIT",
"orderDirection": "BUY",
"executedAt": "2024-01-15T10:29:59Z"
}
]
}

Описание параметров ответа:

ПараметрТипОписание
idstringУникальный идентификатор сделки (UUID)
pricestringЦена исполнения сделки
volumestringЭквивалентный объем
amountstringСумма в сделке
orderTypestringТип ордера: MARKET (рыночный), LIMIT (лимитный)
orderDirectionstringНаправление сделки: BUY (покупка), SELL (продажа)
executedAtstringВремя исполнения сделки (UTC)

Примечание: Список доступных пар для подписки можно получить из метода GET /configuration/trade/pairs

3. Информация по валютной паре (Ticker)

Destination:

/topic/public/v1/trade/{пара валют}/ticker

Пример подписки:

/topic/public/v1/trade/USDT-KGS/ticker

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

{
"requestId": "123e4567-e89b-12d3-a456-426614174002",
"success": true,
"isCheckResponse": false,
"timestamp": "2024-01-15T10:30:00Z",
"result": {
"currencyFrom": "USDT",
"currencyTo": "KGS",
"order": 12345,
"lastPrice": "88.47",
"lowPrice24h": "87.20",
"highPrice24h": "89.10",
"volumeCurrencyFrom24h": "500000",
"volumeCurrencyTo24h": "44235000",
"price24hPcnt": "1.45",
"price24hAbs": "1.27"
}
}

Описание параметров ответа:

ПараметрТипОписание
currencyFromstringВалюта покупки (пример: USDT)
currencyTostringВалюта продажи (пример: KGS)
ordernumberПорядковый номер обновления (инкрементируется с каждым обновлением)
lastPricestringАктуальная цена монеты (в валюте currencyTo)
lowPrice24hstringМинимальная цена за последние 24 часа
highPrice24hstringМаксимальная цена за последние 24 часа
volumeCurrencyFrom24hstringОбъем торгов за 24ч в валюте покупки (currencyFrom)
volumeCurrencyTo24hstringОбъем торгов за 24ч в валюте продажи (currencyTo)
price24hPcntstringОтносительное изменение цены за 24ч в процентах
price24hAbsstringАбсолютное изменение цены за 24ч (в валюте currencyTo)

Примечание: Список доступных пар для подписки можно получить из метода GET /configuration/trade/pairs

4. Все доступные пары для базовой валюты (All Tickers)

Destination:

/topic/public/v1/trade/{валюта}/all-ticker

Пример подписки:

/topic/public/v1/trade/KGS/all-ticker

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

{
"requestId": "123e4567-e89b-12d3-a456-426614174003",
"success": true,
"isCheckResponse": false,
"timestamp": "2024-01-15T10:30:00Z",
"result": [
{
"currencyFrom": "USDT",
"currencyTo": "KGS",
"lastPrice": "88.47",
"price24hPcnt": "1.45"
},
{
"currencyFrom": "KGST",
"currencyTo": "KGS",
"lastPrice": "0,98",
"price24hPcnt": "2.10"
}
]
}

Описание параметров ответа:

Каждый элемент массива result содержит:

ПараметрТипОписание
currencyFromstringВалюта покупки (пример: USDT)
currencyTostringВалюта продажи (пример: KGS)
lastPricestringАктуальная цена монеты (в валюте currencyTo)
price24hPcntstringИзменение цены за 24 часа в процентах

Ошибки

Код ошибкиОписаниеРекомендация
ER_SYS0000Внутренняя ошибка сервераПовторите операцию или попробуйте позже

Примечания

  1. Частота обновлений: Обновления происходят каждую секунду или при совершении действий на рынке
  2. Формат данных: Все ответы в формате JSON
  3. Получение списка пар: Используйте GET /configuration/trade/pairs для получения доступных валютных пар