वेबसॉकेट स्ट्रीम्स
रिश्तों का समय बाहर
- सर्वर 60 सेकंड की निष्क्रियता के बाद WebSocket कनेक्शन बंद कर देता है (कनेक्शन कीप-अलाइव)
- निष्क्रियता को क्लाइंट द्वारा भेजे गए अनुरोधों की अनुपस्थिति के रूप में परिभाषित किया जाता है
कनेक्शन चालू रखें
WebSocket कनेक्शन को सक्रिय रखने के लिए, आपको
- हर 50 सेकंड में आवधिक अनुरोध भेजें
- अपने एप्लिकेशन के तर्क में संभावित डिस्कनेक्शन को उचित रूप से संभालें
प्राधिकार
परिचय
किसी भी WebSocket अनुरोध पर हस्ताक्षर करने से पहले, आपको अपने Cryptomus व्यक्तिगत खाते में एक API कुंजी बनानी होगी
API कुंजी बनाने के लिए विस्तृत निर्देश उपलब्ध हैं यहाँ
कनेक्शन के लिए एकमुश्त टोकन प्राप्त करना
WebSocket सर्वर से कनेक्ट करने से पहले, आपको एक बार का प्रमाणीकरण टोकन प्राप्त करना होगा
आप टोकन भेजकर प्राप्त कर सकते हैं संबंधित अनुरोध
टोकन 5 मिनट या पहले सफल कनेक्शन तक वैध है
वेबसॉकेट सर्वर से कनेक्ट करना
WebSocket सर्वर से कनेक्ट करने के लिए
1. एक बार प्राप्त करें प्रमाणीकरण टोकन
2. कनेक्शन स्थापित करते समय क्वेरी पैरामीटर टोकन में टोकन निर्दिष्ट करें
कनेक्शन URL उदाहरण: wss://api-ws.cryptomus.com/ws?token=b0b1cacd26993392ecf072155bd1686c96e380ad12cefa564aa6665c85c77334
टोकन का उपयोग केवल एक बार किया जा सकता है। प्रत्येक नए कनेक्शन के लिए, आपको एक नए टोकन का अनुरोध करना होगा।
टोकन सत्यापन सफल होने के बाद, कनेक्शन स्थापित हो जाएगा, और आप उपलब्ध चैनलों की सदस्यता ले सकते हैं
वेबसॉकेट कनेक्शन के लिए एक बार का प्रमाणीकरण टोकन प्राप्त करना
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
प्रतिलिपिसभी समापन बिंदु यूनिक्स टाइमस्टैम्प प्रारूप में समय लौटाते हैं
अनुरोध संदेश संरचना
नाम | पैरामीटर प्रकार | परिभाषा |
---|---|---|
id | Integer | आपके अनुरोध के प्रत्युत्तर को संसाधित करने के लिए अद्वितीय होना चाहिए |
method | String | अनुरोध का नाम |
params | Array | विधि के लिए पैरामीटर यहां पास करें |
पैरामीटर प्रकार
Integerपरिभाषा
आपके अनुरोध के प्रत्युत्तर को संसाधित करने के लिए अद्वितीय होना चाहिएपैरामीटर प्रकार
Stringपरिभाषा
अनुरोध का नामपैरामीटर प्रकार
Arrayपरिभाषा
विधि के लिए पैरामीटर यहां पास करें
यदि अमान्य JSON भेजा जाता है तो WebSocket कनेक्शन समाप्त हो जाएगा
संदेश और अनुरोध प्रकार
- अनुरोध (`पिंग`, `candles_request`, आदि)
- सदस्यता (`candles_subscribe`, `lastprice_subscribe`, आदि). उसी डेटा प्रकार की पुनः सदस्यता रद्द कर दी जाएगी.
प्रतिक्रिया संदेश
नाम | पैरामीटर प्रकार | परिभाषा |
---|---|---|
id | Integer | अनुरोध पहचानकर्ता |
data | Null | यदि अनुरोध विफल हो गया। यदि सफल रहा, तो प्रत्येक विधि के लिए प्रतिक्रिया संरचना नीचे दिखाई गई है |
error | Null | यदि सफल हो। यदि कोई त्रुटि हो |
message | String | |
code | Integer | त्रुटि कोड |
पैरामीटर प्रकार
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
प्रतिलिपि