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 | Поддерживаемые версии STOMP | 1.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"
}
]
}
}
Описание параметров ответа:
| Параметр | Тип | Описание |
|---|---|---|
bids | array | Заявки на покупку (ордера типа BUY) |
bids[].price | string | Цена покупки (в валюте currencyTo) |
bids[].volume | string | Эквивалентный объем в валюте currencyTo |
bids[].amount | string | Сумма покупки (в валюте currencyTo) |
asks | array | Заявки на продажу (ордера типа SELL) |
asks[].price | string | Цена продажи (в валюте currencyFrom) |
asks[].volume | string | Эквивалентный объем в валюте currencyFrom |
asks[].amount | string | Сумма продажи (в валюте 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"
}
]
}
Описание параметров ответа:
| Параметр | Тип | Описание |
|---|---|---|
id | string | Уникальный идентификатор сделки (UUID) |
price | string | Цена исполнения сделки |
volume | string | Эквивалентный объем |
amount | string | Сумма в сделке |
orderType | string | Тип ордера: MARKET (рыночный), LIMIT (лимитный) |
orderDirection | string | Направление сделки: BUY (покупка), SELL (продажа) |
executedAt | string | Время исполнения сделки (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"
}
}
Описание параметров ответа:
| Параметр | Тип | Описание |
|---|---|---|
currencyFrom | string | Валюта покупки (пример: USDT) |
currencyTo | string | Валюта продажи (пример: KGS) |
order | number | Порядковый номер обновления (инкрементируется с каждым обновлением) |
lastPrice | string | Актуальная цена монеты (в валюте currencyTo) |
lowPrice24h | string | Минимальная цена за последние 24 часа |
highPrice24h | string | Максимальная цена за последние 24 часа |
volumeCurrencyFrom24h | string | Объем торгов за 24ч в валюте покупки (currencyFrom) |
volumeCurrencyTo24h | string | Объем торгов за 24ч в валюте продажи (currencyTo) |
price24hPcnt | string | Относительное изменение цены за 24ч в процентах |
price24hAbs | string | Абсолютное изменение цены за 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 содержит:
| Параметр | Тип | Описание |
|---|---|---|
currencyFrom | string | Валюта покупки (пример: USDT) |
currencyTo | string | Валюта продажи (пример: KGS) |
lastPrice | string | Актуальная цена монеты (в валюте currencyTo) |
price24hPcnt | string | Изменение цены за 24 часа в процентах |
Ошибки
| Код ошибки | Описание | Рекомендация |
|---|---|---|
ER_SYS0000 | Внутренняя ошибка сервера | Повторите операцию или попробуйте позже |
Примечания
- Частота обновлений: Обновления происходят каждую секунду или при совершении действий на рынке
- Формат данных: Все ответы в формате JSON
- Получение списка пар: Используйте
GET /configuration/trade/pairsдля получения доступных валютных п ар