Subscribe to real-time orderbook updates for specific trading pairs across multiple exchanges. This is the primary method for receiving live market data through the QuantCite API.
Subscribe to Specific Exchanges
Request:
{
"type" : "subscribe_aggregated" ,
"symbol" : "BTC/USDT" ,
"exchanges" : [ "binance" , "okx" , "bybit" , "kucoin" ]
}
Parameters:
type (string, required): Must be “subscribe_aggregated”
symbol (string, required): Trading pair in format “BASE/QUOTE” (e.g., “BTC/USDT”)
exchanges (array, required): List of exchange names to aggregate data from
Subscribe to All Available Exchanges
Request:
{
"type" : "subscribe_aggregated" ,
"symbol" : "BTC/USDT" ,
"exchanges" : "all"
}
Parameters:
exchanges (string): Use “all” to subscribe to all available exchanges for the symbol
Response Messages
Successful Subscription
Response:
{
"type" : "aggregated_subscription_response" ,
"symbol" : "BTC/USDT" ,
"exchanges" : [ "binance" , "okx" , "bybit" , "kucoin" ],
"requested" : [ "binance" , "okx" , "bybit" , "kucoin" ],
"success" : true ,
"message" : "Subscribed to BTC/USDT on 4 exchanges" ,
"subscription_id" : "sub_123456"
}
Response Fields:
type: Always “aggregated_subscription_response”
symbol: The trading pair you subscribed to
exchanges: Array of exchanges that were successfully subscribed to
requested: Array of exchanges that were requested (for comparison)
success: Boolean indicating if subscription was successful
message: Human-readable success message
subscription_id: Unique identifier for this subscription
Subscription to All Exchanges
Response:
{
"type" : "aggregated_subscription_response" ,
"symbol" : "BTC/USDT" ,
"exchanges" : [ "binance" , "okx" , "bybit" , "kucoin" , "gate" , "mexc" , "bitget" , "cryptocom" ],
"requested" : "all" ,
"success" : true ,
"message" : "Subscribed to BTC/USDT on 52 exchanges" ,
"subscription_id" : "sub_789012"
}
Real-time Updates
Once subscribed, you’ll receive continuous orderbook updates:
{
"type" : "aggregated_orderbook_update" ,
"symbol" : "BTC/USDT" ,
"timestamp" : "2025-08-19T19:45:13.392607" ,
"update_number" : 1 ,
"subscription_id" : "sub_123456" ,
"data" : {
"bids" : [
{
"price" : 113393.9 ,
"amount" : 0.0001 ,
"exchanges" : [ "bybit" ],
"exchange_count" : 1 ,
"value" : 11.33939
},
{
"price" : 113390.0 ,
"amount" : 0.0025 ,
"exchanges" : [ "binance" , "okx" ],
"exchange_count" : 2 ,
"value" : 283.475
}
],
"asks" : [
{
"price" : 113400.0 ,
"amount" : 0.0005 ,
"exchanges" : [ "binance" , "okx" ],
"exchange_count" : 2 ,
"value" : 56.7
}
],
"market_stats" : {
"best_bid" : 113393.9 ,
"best_ask" : 113400.0 ,
"spread" : 6.1 ,
"spread_percent" : 0.0054 ,
"mid_price" : 113396.95 ,
"total_bid_volume" : 0.0026 ,
"total_ask_volume" : 0.002 ,
"participating_exchanges" : 4
}
}
}
Error Responses
Invalid Symbol
{
"type" : "subscription_error" ,
"error" : "invalid_symbol" ,
"message" : "Symbol BTC/INVALID is not supported" ,
"symbol" : "BTC/INVALID" ,
"suggested_symbols" : [ "BTC/USDT" , "BTC/USD" , "BTC/EUR" ]
}
Exchange Not Available
{
"type" : "subscription_error" ,
"error" : "exchange_unavailable" ,
"message" : "Exchange 'invalid_exchange' is not supported" ,
"exchange" : "invalid_exchange" ,
"supported_exchanges" : [ "binance" , "okx" , "bybit" , "kucoin" ]
}
Authentication Required
{
"type" : "error" ,
"error" : "authentication_required" ,
"message" : "You must authenticate before subscribing to data"
}
Supported Symbols
Major Trading Pairs
BTC/USDT - Bitcoin/Tether (most liquid)
ETH/USDT - Ethereum/Tether
BNB/USDT - Binance Coin/Tether
ADA/USDT - Cardano/Tether
SOL/USDT - Solana/Tether
XRP/USDT - Ripple/Tether
Quote Currencies
USDT - Tether (most common)
USD - US Dollar
EUR - Euro
BTC - Bitcoin pairs
ETH - Ethereum pairs
Supported Exchanges
Tier 1 Exchanges (High Volume)
binance - Binance
okx - OKX
bybit - Bybit
kucoin - KuCoin
gate - Gate.io
mexc - MEXC
Tier 2 Exchanges
bitget - Bitget
cryptocom - Crypto.com
huobi - Huobi Global
coinbase - Coinbase Pro
kraken - Kraken
Code Examples
Python Subscription
import asyncio
import websockets
import json
async def subscribe_to_symbol ():
uri = "wss://data.quantcite.com/api/v1/ws"
async with websockets.connect(uri) as websocket:
# Authenticate first
auth_msg = { "type" : "authenticate" , "api_key" : "demo_key_123" }
await websocket.send(json.dumps(auth_msg))
# Wait for auth response
auth_response = await websocket.recv()
print ( "Auth:" , json.loads(auth_response))
# Subscribe to BTC/USDT on specific exchanges
subscribe_msg = {
"type" : "subscribe_aggregated" ,
"symbol" : "BTC/USDT" ,
"exchanges" : [ "binance" , "okx" , "bybit" ]
}
await websocket.send(json.dumps(subscribe_msg))
# Listen for updates
async for message in websocket:
data = json.loads(message)
if data.get( "type" ) == "aggregated_orderbook_update" :
stats = data[ "data" ][ "market_stats" ]
print ( f "BTC/USDT: { stats[ 'best_bid' ] } / { stats[ 'best_ask' ] } " )
asyncio.run(subscribe_to_symbol())
JavaScript Subscription
const WebSocket = require ( 'ws' );
const ws = new WebSocket ( 'wss://data.quantcite.com/api/v1/ws' );
ws . on ( 'open' , () => {
// Authenticate
const authMsg = {
type: 'authenticate' ,
api_key: 'demo_key_123'
};
ws . send ( JSON . stringify ( authMsg ));
});
ws . on ( 'message' , ( data ) => {
const message = JSON . parse ( data . toString ());
if ( message . type === 'authentication_success' ) {
// Subscribe to multiple symbols
const symbols = [ 'BTC/USDT' , 'ETH/USDT' ];
symbols . forEach ( symbol => {
const subscribeMsg = {
type: 'subscribe_aggregated' ,
symbol: symbol ,
exchanges: 'all'
};
ws . send ( JSON . stringify ( subscribeMsg ));
});
}
if ( message . type === 'aggregated_orderbook_update' ) {
const { symbol , data : orderbook } = message ;
const stats = orderbook . market_stats ;
console . log ( ` ${ symbol } : ${ stats . best_bid } / ${ stats . best_ask } ` );
}
});
Best Practices
Selective Subscriptions Subscribe only to symbols you actively need. Each subscription consumes data from your 50GB monthly limit.
Exchange Selection Choose specific exchanges instead of “all” to reduce data volume and focus on the most liquid markets.
Error Handling Always handle subscription errors and implement retry logic for failed subscriptions.
Data Management Monitor your data usage and unsubscribe from unused symbols to conserve your monthly allowance.
Each active subscription continuously streams data and counts toward your 50GB monthly limit. Monitor your usage and unsubscribe from symbols you no longer need.