WebSocket ағындары
Қосылу күту уақыты
- Сервер 60 секунд әрекетсіздіктен кейін WebSocket қосылымын жабады (Connection Keep-Alive)
- Әрекетсіздік клиент жіберген сұраулардың болмауы ретінде анықталады
Қосылымды сақтау
WebSocket қосылымын белсенді ұстау үшін сізге қажет
- Әр 50 секунд сайын мерзімді сұрауларды жіберіңіз
- Қолданбаңыздың логикасындағы ықтимал ажыратуларды дұрыс өңдеңіз
Авторизация
Кіріспе
Кез келген WebSocket сұрауларына қол қоймас бұрын, Cryptomus жеке тіркелгіңізде API кілтін жасауыңыз керек
API кілтін жасау бойынша толық нұсқаулар бар Мұнда
Қосылу үшін бір реттік токенді алу
WebSocket серверіне қосылу алдында бір реттік аутентификация таңбалауышын алу қажет
Сіз токенді жіберу арқылы ала аласыз сәйкес сұрау
Токен 5 минут ішінде немесе бірінші сәтті қосылымға дейін жарамды
WebSocket серверіне қосылу
WebSocket серверіне қосылу үшін
1. Бір реттік алыңыз аутентификация белгісі
2. Қосылымды орнату кезінде сұрау параметрінің таңбалауышында таңбалауышты көрсетіңіз
Қосылым URL мысалы: wss://api-ws.cryptomus.com/ws?token=b0b1cacd26993392ecf072155bd1686c96e380ad12cefa564aa6665c85c77334
Токенді тек бір рет пайдалануға болады. Әрбір жаңа қосылым үшін жаңа таңбалауышты сұрау керек
Сәтті таңбалауыш растаудан кейін қосылым орнатылады және сіз қолжетімді арналарға жазыла аласыз
WebSocket қосылымы үшін бір реттік аутентификация таңбалауышын алу
WebSocket серверіне қосылу үшін бір реттік аутентификация таңбалауышын жасауға мүмкіндік береді. Токен бірінші сәтті қосылымға дейін немесе оның мерзімі біткенше (5 минут) жарамды.
Авторизация тақырыптары
Қажетті рұқсат тақырыптары туралы толық ақпарат қолжетімді Мұнда
Жауап
{ "token": "168b34a3a12370740ff1654f0d0c4726ff1bba8c4675edc0d7553f15e5a2a094" }
КөшіруМүмкін кодтар
200: тапсырыс сәтті жасалды
404: пайдаланушы немесе ресурс табылмады
500: Ішкі сервер қатесі
Тереңдік шкаласының символдары
Өтініш
Жауап
1{
2 "status": "success",
3 "message": "success",
4 "data": [
5 {
6 "scale": "0.01",
7 "index": 0 // index
8 },
9 ...
10 ]
11}
КөшіруНарық тізімі
Өтініш
Жауап
1{
2 "result": [
3 {
4 "id": "01HSBPVS17CT2GN2FV34K3AMP9",
5 "symbol": "BTC_USDT",
6 "baseCurrency": "BTC",
7 "quoteCurrency": "USDT",
8 "baseMinSize": "0.0000100000000000",
9 "quoteMinSize": "0.1000000000000000",
10 "baseMaxSize": "10000000000.0000000000000000",
11 "quoteMaxSize": "99999999.0000000000000000",
12 "basePrec": "8",
13 "quotePrec": "6",
14 "baseCurrencyFullName": "Bitcoin",
15 "quoteCurrencyFullName": "Tether USD"
16 },
17 ...
18 ]
19}
КөшіруМысал іске асыру
Node.js
1const WebSocket = require('ws');
2
3class CryptomusWebSocket {
4 constructor(token) {
5 this.token = token;
6 this.socket = new WebSocket('wss://api-ws.cryptomus.com/ws?token=${this.token}');
7 this.setupConnection();
8 }
9
10 setupConnection() {
11 this.socket.on('open', () => {
12 console.log('Connected to Cryptomus WebSocket');
13 this.startPing();
14 });
15
16 this.socket.on('message', (data) => {
17 console.log('Received:', data.toString());
18 });
19 }
20
21 ping() {
22 if (this.socket.readyState === WebSocket.OPEN) {
23 this.socket.send(JSON.stringify({
24 id: 0,
25 method: "ping",
26 params: []
27 }));
28 }
29 }
30
31 startPing() {
32 setInterval(() => {
33 this.ping();
34 }, 50 * 1000); // Every 50 seconds
35 }
36}
37
38// Usage
39const token = "your_auth_token_here";
40const client = new CryptomusWebSocket(token);
41
КөшіруPython
1import asyncio
2import websockets
3import json
4
5class CryptomusWebSocket:
6 def __init__(self, token):
7 self.token = token
8 self.socket = None
9
10 async def connect(self):
11 self.socket = await websockets.connect(f"wss://api-ws.cryptomus.com/ws?token={self.token}")
12 print('Connected to Cryptomus WebSocket')
13
14 async def ping(self):
15 await self.socket.send(json.dumps({
16 "id": 0,
17 "method": "ping",
18 "params": []
19 }))
20
21 async def start_ping(self):
22 while True:
23 await asyncio.sleep(50) # Every 50 seconds
24 await self.ping()
25
26 async def listen(self):
27 async for message in self.socket:
28 print(f"Received: {message}")
29
30 async def run(self):
31 await self.connect()
32
33 # Start ping task
34 ping_task = asyncio.create_task(self.start_ping())
35
36 # Listen for messages
37 await self.listen()
38
39# Usage
40token = "your_auth_token_here"
41client = CryptomusWebSocket(token)
42asyncio.run(client.run())
43
КөшіруБарлық соңғы нүктелер уақытты Unix уақыт белгісі пішімінде қайтарады
Сұраныс хабарламасының құрылымы
Есім | Параметр түрі | Анықтама |
---|---|---|
id | Integer | Сұрауыңызға жауапты өңдеу үшін бірегей болуы керек |
method | String | Сұраныс атауы |
params | Array | Мұнда әдіс параметрлерін жіберіңіз |
Параметр түрі
IntegerАнықтама
Сұрауыңызға жауапты өңдеу үшін бірегей болуы керекПараметр түрі
StringАнықтама
Сұраныс атауыПараметр түрі
ArrayАнықтама
Мұнда әдіс параметрлерін жіберіңіз
Жарамсыз JSON жіберілсе, WebSocket қосылымы тоқтатылады
Хабарлама және сұраныс түрлері
- Сұрау (`ping`, `candles_request`, т.б.)
- Жазылым (`candles_subscribe`, `lastprice_subscribe`, т.б.). Бірдей деректер түріне қайта жазылу тоқтатылады.
Жауап хабары
Есім | Параметр түрі | Анықтама |
---|---|---|
id | Integer | Сұраныс идентификаторы |
data | Null | егер сұрау орындалмаса. Сәтті болса, әр әдіс үшін жауап құрылымы төменде көрсетілген |
error | Null | сәтті болса. Егер қате болса |
message | String | |
code | Integer | Қате коды |
Параметр түрі
IntegerАнықтама
Сұраныс идентификаторыПараметр түрі
NullАнықтама
егер сұрау орындалмаса. Сәтті болса, әр әдіс үшін жауап құрылымы төменде көрсетілгенПараметр түрі
NullАнықтама
сәтті болса. Егер қате болсаПараметр түрі
IntegerАнықтама
Қате коды
Код: 1. Хабар: хабарлама пішімі жарамсыз
Код: 2. Хабар: Басқа қателер
Жауап хабарының түрлері
- Сұрау нәтижесі
- Жазылым күйі (сәтті/сәтсіз)
- Оқиғаларды жаңарту
Пинг/понг
Ping
1{
2 "id": 0,
3 "method": "ping",
4 "params": []
5}
6
КөшіруЖауапты теннис
1{
2 "id": 0,
3 "method": "pong",
4 "data": null,
5 "error": null
6}
7
КөшіруЖазылымдардың мысалдары
Өтініш
1{
2 "id": 0,
3 "method": "trade_subscribe",
4 "params": [
5 "BTC_USDT"
6 ]
7}
8
КөшіруЖауап
1{
2 "id": 0,
3 "method": "trade_subscribe",
4 "data": {
5 "status": "success"
6 },
7 "error": null
8}
9
КөшіруЖаңарту оқиғасы
1{
2 "id": 0,
3 "method": "trade_update",
4 "data": [], // See structure for each method below
5 "error": null
6}
7
КөшіруСоңғы баға
Жазылым
1{
2 "id": 0,
3 "method": "lastprice_subscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "BTC_USDT",
7 "ETH_USDT",
8 ...
9 ]
10}
11
КөшіруБарлық оқиғаларға жазылыңыз lastprice_subscribe
1{
2 "id": 0,
3 "method": "lastprice_subscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
КөшіруЖауап
1{
2 "id": 0,
3 "method": "lastprice_subscribe",
4 "data": {
5 "status": "success"
6 },
7 "error": null
8}
9
КөшіруОқиға
1{
2 "id": 0,
3 "method": "lastprice_update",
4 "data": {
5 "symbol": "BTC_USDT",
6 "timestamp": 1750953362,
7 "price": "107152.55"
8 },
9 "error": null
10}
11
КөшіруЖазылымнан бас тарту
Өтініш
1{
2 "id": 0,
3 "method": "lastprice_unsubscribe",
4 "params": [
5 "BTC_USDT",
6 "ETH_USDT",
7 ...
8 ]
9}
10
КөшіруБарлық оқиғаларға жазылудан бас тартыңыз lastprice_unsubscribe
1{
2 "id": 0,
3 "method": "lastprice_unsubscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
КөшіруЖауап
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
КөшіруТереңдігі
Жазылым
Алдымен сіз нарықтың масштабтық индексін алуыңыз керек қалай алуға болады
1{
2 "id": 0,
3 "method": "depth_subscribe",
4 "params": [
5 "BTC_USDT:0", // market:scale_index
6 "BTC_USDT:1",
7 "ETH_USDT:1",
8 ...
9 ]
10}
11
КөшіруБарлық оқиғаларға жазылыңыз depth_subscribe
1{
2 "id": 0,
3 "method": "depth_subscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
КөшіруЖауап
1{
2 "id": 0,
3 "method": "depth_subscribe",
4 "data": {
5 "status": "success"
6 },
7 "error": null
8}
9
КөшіруОқиға
1{
2 "id": 0,
3 "method": "depth_update",
4 "data": {
5 "symbol": "BTC_USDT",
6 "timestamp": 1750952911,
7 "full_reload": false, // If false, it is a partial update, if true, it is a fully updated orderbook.
8 "scale_index": 0,
9 "asks": [
10 [
11 "107043.93", // price
12 "0.304313" // value
13 ]
14 ],
15 "bids": [
16 [
17 "106976.11",
18 "0" // for partial update - finished orders will be 0
19 ]
20 ]
21 },
22 "error": null
23}
24
КөшіруЖазылымнан бас тарту
Өтініш
1{
2 "id": 0,
3 "method": "depth_unsubscribe",
4 "params": [
5 "BTC_USDT:0", // market:scale_index
6 "ETH_USDT:1",
7 ...
8 ]
9}
10
КөшіруБарлық оқиғаларға жазылудан бас тартыңыз depth_unsubscribe
1{
2 "id": 0,
3 "method": "depth_unsubscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
КөшіруЖауап
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
8
КөшіруТикер
Жазылым
1{
2 "id": 0,
3 "method": "ticker_subscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "BTC_USDT",
7 "ETH_USDT",
8 ...
9 ]
10}
11
КөшіруБарлық оқиғаларға жазылыңыз ticker_subscribe
1{
2 "id": 0,
3 "method": "ticker_subscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
КөшіруЖауап
1{
2 "id": 0,
3 "method": "ticker_subscribe",
4 "data": {
5 "status": "success"
6 },
7 "error": null
8}
9
КөшіруОқиға
1{
2 "id": 0,
3 "method": "ticker_update",
4 "data": {
5 "symbol": "BTC_USDT",
6 "timestamp": 1750953144,
7 "price": "107090.35",
8 "open": "107042.21",
9 "high": "108248.15",
10 "low": "106573.19",
11 "volume": "1531.027982",
12 "quote_volume": "164564314.80174687",
13 "price_change": "0.04"
14 },
15 "error": null
16}
17
КөшіруЖазылымнан бас тарту
Өтініш
1{
2 "id": 0,
3 "method": "ticker_unsubscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "ETH_USDT",
7 ...
8 ]
9}
10
КөшіруБарлық оқиғаларға жазылудан бас тартыңыз ticker_unsubscribe
1{
2 "id": 0,
3 "method": "ticker_unsubscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
КөшіруЖауап
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
8
КөшіруСауда
Жазылым
1{
2 "id": 0,
3 "method": "trade_subscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "BTC_USDT",
7 "ETH_USDT",
8 ...
9 ]
10}
11
КөшіруБарлық оқиғаларға жазылыңыз trade_subscribe
1{
2 "id": 0,
3 "method": "trade_subscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
КөшіруЖауап
1{
2 "id": 0,
3 "method": "trade_subscribe",
4 "data": {
5 "status": "success"
6 },
7 "error": null
8}
9
КөшіруОқиға
1{
2 "id": 0,
3 "method": "trade_update",
4 "data": {
5 "symbol": "BTC_USDT",
6 "timestamp": 1750953177,
7 "trades": [
8 {
9 "price": 107100.01,
10 "quantity": 0.000254,
11 "timestamp": 1750953177,
12 "direction": "buy"
13 },
14 ...
15 ]
16 },
17 "error": null
18}
19
КөшіруЖазылымнан бас тарту
Өтініш
1{
2 "id": 0,
3 "method": "trade_unsubscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "ETH_USDT",
7 ...
8 ]
9}
10
КөшіруБарлық оқиғаларға жазылудан бас тартыңыз trade_unsubscribe
1{
2 "id": 0,
3 "method": "trade_unsubscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
КөшіруЖауап
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
8
КөшіруТапсырыстар
Жазылым
1{
2 "id": 0,
3 "method": "order_subscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "TRX_USDT",
7 "ETH_USDT",
8 ...
9 ]
10}
11
КөшіруБарлық оқиғаларға жазылыңыз order_subscribe
1{
2 "id": 0,
3 "method": "order_subscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
КөшіруЖауап
1{
2 "id": 0,
3 "method": "order_subscribe",
4 "data": {
5 "status": "success"
6 },
7 "error": null
8}
9
КөшіруОқиғалар
Тапсырыс жасалды
1{
2 "id": "1",
3 "method": "order_update",
4 "data": {
5 "type": "created",
6 "info": {
7 "id": "01JYET5DQ772MPYHHE417FQF1J",
8 "symbol": "TRX_USDT",
9 "orderType": "limit",
10 "direction": "sell",
11 "price": "0.2200000000000000",
12 "quantity": "50.0000000000000000",
13 "value": "11.0000000000000000",
14 "filledQuantity": "0.0000000000000000",
15 "filledValue": "0.0000000000000000",
16 "clientOid": null,
17 "createTs": 1750696376
18 }
19 },
20 "error": null
21}
22
КөшіруТапсырыс жаңартылды
1{
2 "id": "3",
3 "method": "order_update",
4 "data": {
5 "type": "updated",
6 "info": {
7 "id": "01JYET5DQ772MPYHHE417FQF1J",
8 "symbol": "TRX_USDT",
9 "orderType": "limit",
10 "direction": "sell",
11 "price": "0.2200000000000000",
12 "quantity": "50.0000000000000000",
13 "value": "11.0000000000000000",
14 "filledQuantity": "20.0000000000000000",
15 "filledValue": "4.4000000000000000",
16 "clientOid": null,
17 "createTs": 1750696376,
18 "updateTs": 1750696487,
19 }
20 },
21 "error": null
22}
23
КөшіруТапсырыс аяқталды
1{
2 "id": "3",
3 "method": "order_update",
4 "data": {
5 "type": "finished",
6 "info": {
7 "id": "01JYET5DQ772MPYHHE417FQF1J",
8 "symbol": "TRX_USDT",
9 "orderType": "limit",
10 "direction": "sell",
11 "price": "0.2200000000000000",
12 "quantity": "50.0000000000000000",
13 "value": "11.0000000000000000",
14 "filledQuantity": "50.0000000000000000",
15 "filledValue": "11.0000000000000000",
16 "clientOid": null,
17 "createTs": 1750696376,
18 "finishTs": 1750696417,
19 "state": "completed""internalState": "filled"
20 }
21 },
22 "error": null
23}
24
КөшіруЖаңартуларға жазылудан бас тартыңыз
Арнайы нарықтардан
1{
2 "id": 0,
3 "method": "order_unsubscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "ETH_USDT",
7 ...
8 ]
9}
10
КөшіруБарлық базарлардан
1{
2 "id": 0,
3 "method": "order_unsubscribe",
4 "params": [
5 "all" // Optional, will also work if an empty array is passed in
6 ]
7}
8
КөшіруЖауап
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
8
КөшіруБаланс
Жазылым
Негізгі валюта нарықтық тізім
1{
2 "id": 0,
3 "method": "balance_subscribe",
4 "params": [
5 "BTC", // BaseCurrency from market list
6 "TRX,
7 "ETH",
8 ...
9 ]
10}
11
КөшіруБарлық оқиғаларға жазылыңыз balance_subscribe
1{
2 "id": 0,
3 "method": "balance_subscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
КөшіруЖауап
1{
2 "id": 0,
3 "method": "balance_subscribe",
4 "data": {
5 "status": "success"
6 },
7 "error": null
8}
9
КөшіруОқиғалар
1{
2 "id": "4",
3 "method": "balance_update",
4 "data": {
5 "info": {
6 "walletId": "01J7E836F6K5KCX5DP2W0F6FAG",
7 "currencyCode": "USDT",
8 "amount": "50.0000000000000000",
9 "oldBalance": "40000.0000000000000000",
10 "newBalance": "39950.00000000"
11 }
12 },
13 "error": null
14}
15
КөшіруОқиғаларға жазылудан бас тарту
Арнайы валюталардан
Негізгі валюта market-list
1{
2 "id": 0,
3 "method": "balance_unsubscribe",
4 "params": [
5 "BTC", // BaseCurrency from market list
6 "ETH",
7 ...
8 ]
9}
10
КөшіруБарлық валюталардан
1{
2 "id": 0,
3 "method": "balance_unsubscribe",
4 "params": [
5 "all" // Optional, will also work if an empty array is passed in
6 ]
7}
8
КөшіруЖауап
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
8
КөшіруМәмілелер
Жазылым
1{
2 "id": 0,
3 "method": "deal_subscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "TRX_USDT,
7 "ETH_USDT",
8 ...
9 ]
10}
11
КөшіруБарлық оқиғаларға жазылыңыз deal_subscribe
1{
2 "id": 0,
3 "method": "deal_subscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
КөшіруЖауап
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
8
КөшіруОқиғалар
1{
2 "id": "4",
3 "method": "deal_update",
4 "data": {
5 "info": {
6 "dealId": "01JYH50V5VWPP3QTYGM6CPZ0AR",
7 "symbol": "TRX_USDT",
8 "dealState": "completed",
9 "transactionId": "01JYH50V5YM8M3943KJ9HY2VXM",
10 "filledPrice": "0.2726960000000000",
11 "filledQuantity": "100.0000000000000000",
12 "filledValue": "27.2696000000000000",
13 "fee": "1.0907840000000000",
14 "feeCurrency": "USDT",
15 "tradeRole": "taker",
16 "committedAt": 1750774869
17 }
18 },
19 "error": null
20}
21
КөшіруЖаңартуларға жазылудан бас тартыңыз
Арнайы нарықтардан
1{
2 "id": 0,
3 "method": "deal_unsubscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "TRX_USDT,
7 ...
8 ]
9}
10
КөшіруБарлық базарлардан
1{
2 "id": 0,
3 "method": "deal_unsubscribe",
4 "params": [
5 "all" // Optional, will also work if an empty array is passed in
6 ]
7}
8
КөшіруЖауап
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
8
Көшіру