جریان های WebSocket

زمان اتصال

    - سرور اتصال WebSocket را پس از 60 ثانیه عدم فعالیت می بندد (Connection Keep-Alive)

    - عدم فعالیت به عنوان عدم ارسال درخواست توسط مشتری تعریف می شود

اتصال Keep-Alive

برای فعال نگه داشتن اتصال WebSocket، باید این کار را انجام دهید

    - درخواست های دوره ای را هر 50 ثانیه ارسال کنید

    - قطع ارتباط احتمالی در منطق برنامه خود را به درستی مدیریت کنید

مجوز

مقدمه

قبل از امضای هر درخواست WebSocket، باید یک کلید API در حساب شخصی Cryptomus خود ایجاد کنید

دستورالعمل های دقیق برای ایجاد یک کلید API در دسترس است اینجا

دریافت رمز یکبار مصرف برای اتصال

قبل از اتصال به سرور WebSocket، باید یک توکن احراز هویت یک بار مصرف دریافت کنید

شما می توانید رمز را با ارسال دریافت کنید درخواست مربوطه

این رمز به مدت 5 دقیقه یا تا اولین اتصال موفق معتبر است

اتصال به سرور WebSocket

برای اتصال به سرور WebSocket

1. یک بار دریافت کنید نشانه احراز هویت

2. هنگام برقراری اتصال، توکن را در توکن پارامتر query مشخص کنید

مثال URL اتصال: wss://api-ws.cryptomus.com/ws?token=b0b1cacd26993392ecf072155bd1686c96e380ad12cefa564aa6665c85c77334

توکن فقط یک بار قابل استفاده است. برای هر اتصال جدید، باید یک توکن جدید درخواست کنید

پس از تأیید موفقیت آمیز رمز، اتصال برقرار می شود و می توانید در کانال های موجود مشترک شوید

دریافت رمز احراز هویت یک بار برای اتصال WebSocket

اجازه می دهد تا یک نشانه احراز هویت یک بار برای اتصال به سرور WebSocket ایجاد شود. رمز تا اولین اتصال موفق یا تا زمانی که منقضی شود (5 دقیقه) معتبر است.

GET
/v2/user-api/exchange/account/web-socket/token
کپی کنید

سرفصل های مجوز

اطلاعات کامل در مورد سرصفحه های مجوز مورد نیاز در دسترس است اینجا

واکنش

{ "token": "168b34a3a12370740ff1654f0d0c4726ff1bba8c4675edc0d7553f15e5a2a094" }
کپی کنید

کدهای احتمالی

200: سفارش با موفقیت ایجاد شد

404: کاربر یا منبع یافت نشد

500: خطای سرور داخلی

نمادهای مقیاس عمق

درخواست

GET
https://exchange-ws.cryptomus.com/api/v2/symbol-scales?symbol={symbol}
کپی کنید

واکنش


1{
2  "status": "success",
3  "message": "success",
4  "data": [
5    {
6      "scale": "0.01",
7      "index": 0 // index
8    },
9    ...
10  ]
11}
کپی کنید

لیست بازار

درخواست

GET
https://api-app.cryptomus.com/v1/exchange/market
کپی کنید

واکنش


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            
کپی کنید

تمام نقاط پایانی زمان را در قالب مهر زمانی یونیکس برمی‌گردانند

ساختار پیام درخواست

نامنوع پارامتریتعریف
idIntegerبرای پردازش پاسخ به درخواست شما باید منحصر به فرد باشد
methodStringنام درخواست
paramsArrayپارامترهای متد را در اینجا ارسال کنید

نوع پارامتری

Integer

تعریف

برای پردازش پاسخ به درخواست شما باید منحصر به فرد باشد

نوع پارامتری

String

تعریف

نام درخواست

نوع پارامتری

Array

تعریف

پارامترهای متد را در اینجا ارسال کنید

اگر JSON نامعتبر ارسال شود، اتصال WebSocket قطع خواهد شد

انواع پیام و درخواست

- درخواست ("پینگ"، "شمع_درخواست"، و غیره)

- اشتراک ("شمع_اشتراک"، "آخرین قیمت_اشتراک" و غیره). اشتراک مجدد در همان نوع داده لغو خواهد شد.

پیام پاسخ

نامنوع پارامتریتعریف
idIntegerدرخواست شناسه
dataNullاگر درخواست شکست خورد در صورت موفقیت آمیز بودن، ساختار پاسخ برای هر روش در زیر نشان داده شده است
errorNullدر صورت موفقیت اگر خطایی وجود داشته باشد
messageString
codeIntegerکد خطا

نوع پارامتری

Integer

تعریف

درخواست شناسه

نوع پارامتری

Null

تعریف

اگر درخواست شکست خورد در صورت موفقیت آمیز بودن، ساختار پاسخ برای هر روش در زیر نشان داده شده است

نوع پارامتری

Null

تعریف

در صورت موفقیت اگر خطایی وجود داشته باشد

نوع پارامتری

Integer

تعریف

کد خطا

کد: 1. پیام: قالب پیام نامعتبر است

کد: 2. پیام: سایر خطاها

انواع پیام پاسخ

- نتیجه پرس و جو

- وضعیت اشتراک (موفقیت/شکست)

- رویدادها را به روز کنید

پینگ/پنگ

پینگ کنید


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            
کپی کنید