Retrieve comprehensive information about available trading pairs across all supported exchanges or for specific exchanges.
Get All Trading Pairs
Request trading pairs information for all exchanges.
Request
Parameters:
type (string, required): Must be “get_pairs”
Response
{
"type" : "pairs_data" ,
"data" : {
"exchanges" : {
"binance" : [ "BTC/USDT" , "ETH/USDT" , "BNB/USDT" , "ADA/USDT" ],
"bybit" : [ "BTC/USDT" , "ETH/USDT" , "SOL/USDT" , "DOGE/USDT" ],
"kucoin" : [ "BTC/USDT" , "ETH/USDT" , "KCS/USDT" , "DOT/USDT" ]
},
"total_exchanges" : 52 ,
"total_pairs" : 50000 ,
"common_pairs" : [ "BTC/USDT" , "ETH/USDT" , "BNB/USDT" , "ADA/USDT" ]
},
"timestamp" : "2025-08-19T20:45:13.392607"
}
Get Exchange-Specific Pairs
Request trading pairs for a specific exchange.
Request
{
"type" : "get_pairs" ,
"exchange" : "binance"
}
Parameters:
type (string, required): Must be “get_pairs”
exchange (string, required): Name of the specific exchange
Response
{
"type" : "pairs_data" ,
"data" : {
"exchange" : "binance" ,
"pairs" : [
"BTC/USDT" , "ETH/USDT" , "BNB/USDT" , "ADA/USDT" ,
"SOL/USDT" , "DOGE/USDT" , "XRP/USDT" , "DOT/USDT"
],
"total_pairs" : 3826 ,
"categories" : {
"major" : [ "BTC/USDT" , "ETH/USDT" , "BNB/USDT" ],
"altcoins" : [ "ADA/USDT" , "SOL/USDT" , "DOT/USDT" ],
"meme" : [ "DOGE/USDT" , "SHIB/USDT" ]
}
},
"timestamp" : "2025-08-19T20:45:13.392607"
}
Response Fields
All Exchanges Response
Field Type Description exchangesobject Map of exchange names to their trading pairs total_exchangesnumber Number of exchanges included total_pairsnumber Total unique trading pairs across all exchanges common_pairsarray Trading pairs available on multiple exchanges
Single Exchange Response
Field Type Description exchangestring Name of the requested exchange pairsarray List of all trading pairs on this exchange total_pairsnumber Number of pairs on this exchange categoriesobject Pairs grouped by category (major, altcoins, meme, etc.)
Trading Pair Categories
Major Pairs (Highest Liquidity)
BTC Pairs BTC/USDT - Most liquid pair globally
BTC/USD - Fiat trading
BTC/EUR - European markets
ETH Pairs ETH/USDT - Second most liquid
ETH/BTC - Crypto-to-crypto
ETH/USD - Direct fiat trading
Stablecoin Pairs USDT/USD - Tether to USD
USDC/USDT - Stablecoin arbitrage
DAI/USDT - DeFi stablecoins
Exchange Tokens BNB/USDT - Binance Coin
OKB/USDT - OKX Token
KCS/USDT - KuCoin Shares
Altcoin Categories
Layer 1 Blockchains:
SOL/USDT (Solana)
ADA/USDT (Cardano)
AVAX/USDT (Avalanche)
DOT/USDT (Polkadot)
ATOM/USDT (Cosmos)
DeFi Tokens:
UNI/USDT (Uniswap)
AAVE/USDT (Aave)
COMP/USDT (Compound)
SUSHI/USDT (SushiSwap)
Meme Coins:
DOGE/USDT (Dogecoin)
SHIB/USDT (Shiba Inu)
PEPE/USDT (Pepe)
Quote Currencies
Stablecoins (Most Common):
USDT - Tether (most liquid)
USDC - USD Coin
BUSD - Binance USD
DAI - MakerDAO
Fiat Currencies:
USD - US Dollar
EUR - Euro
GBP - British Pound
JPY - Japanese Yen
Crypto Quote Currencies:
BTC - Bitcoin pairs
ETH - Ethereum pairs
Code Examples
Python Pairs Manager
import json
import asyncio
from collections import defaultdict
class TradingPairsManager :
def __init__ ( self ):
self .all_pairs = {}
self .exchange_pairs = {}
self .common_pairs = []
self .pair_categories = defaultdict( list )
async def get_all_pairs ( self , websocket ):
"""Request all trading pairs"""
request = { "type" : "get_pairs" }
await websocket.send(json.dumps(request))
async def get_exchange_pairs ( self , websocket , exchange ):
"""Request pairs for specific exchange"""
request = {
"type" : "get_pairs" ,
"exchange" : exchange
}
await websocket.send(json.dumps(request))
def handle_pairs_data ( self , data ):
"""Process trading pairs response"""
pairs_data = data.get( 'data' , {})
if 'exchange' in pairs_data:
# Single exchange response
self .handle_single_exchange_pairs(pairs_data)
else :
# All exchanges response
self .handle_all_exchanges_pairs(pairs_data)
def handle_all_exchanges_pairs ( self , data ):
"""Handle response with all exchanges"""
self .all_pairs = data.get( 'exchanges' , {})
self .common_pairs = data.get( 'common_pairs' , [])
total_exchanges = data.get( 'total_exchanges' , 0 )
total_pairs = data.get( 'total_pairs' , 0 )
print ( f "Loaded { total_pairs } pairs across { total_exchanges } exchanges" )
print ( f "Common pairs: { len ( self .common_pairs) } " )
# Analyze pair distribution
self .analyze_pair_distribution()
def handle_single_exchange_pairs ( self , data ):
"""Handle response for single exchange"""
exchange = data.get( 'exchange' )
pairs = data.get( 'pairs' , [])
categories = data.get( 'categories' , {})
self .exchange_pairs[exchange] = {
'pairs' : pairs,
'categories' : categories,
'total' : len (pairs)
}
print ( f " { exchange } : { len (pairs) } trading pairs" )
# Print categories if available
for category, category_pairs in categories.items():
print ( f " { category } : { len (category_pairs) } pairs" )
def analyze_pair_distribution ( self ):
"""Analyze how pairs are distributed across exchanges"""
pair_count = defaultdict( int )
# Count how many exchanges have each pair
for exchange, pairs in self .all_pairs.items():
for pair in pairs:
pair_count[pair] += 1
# Categorize by availability
universal_pairs = [pair for pair, count in pair_count.items() if count >= 10 ]
common_pairs = [pair for pair, count in pair_count.items() if 5 <= count < 10 ]
rare_pairs = [pair for pair, count in pair_count.items() if count < 5 ]
print ( f " \n Pair Distribution Analysis:" )
print ( f " Universal (10+ exchanges): { len (universal_pairs) } " )
print ( f " Common (5-9 exchanges): { len (common_pairs) } " )
print ( f " Rare (<5 exchanges): { len (rare_pairs) } " )
return {
'universal' : universal_pairs,
'common' : common_pairs,
'rare' : rare_pairs
}
def find_pairs_by_base ( self , base_currency ):
"""Find all pairs with specific base currency"""
matching_pairs = []
for exchange, pairs in self .all_pairs.items():
for pair in pairs:
if pair.startswith( f " { base_currency } /" ):
matching_pairs.append({
'pair' : pair,
'exchange' : exchange
})
return matching_pairs
def find_pairs_by_quote ( self , quote_currency ):
"""Find all pairs with specific quote currency"""
matching_pairs = []
for exchange, pairs in self .all_pairs.items():
for pair in pairs:
if pair.endswith( f "/ { quote_currency } " ):
matching_pairs.append({
'pair' : pair,
'exchange' : exchange
})
return matching_pairs
def get_best_exchanges_for_pair ( self , target_pair ):
"""Find which exchanges support a specific pair"""
exchanges = []
for exchange, pairs in self .all_pairs.items():
if target_pair in pairs:
exchanges.append(exchange)
return exchanges
def suggest_pairs_for_trading ( self , min_exchanges = 5 ):
"""Suggest pairs available on multiple exchanges"""
pair_count = defaultdict( int )
for exchange, pairs in self .all_pairs.items():
for pair in pairs:
pair_count[pair] += 1
suggested = [
pair for pair, count in pair_count.items()
if count >= min_exchanges
]
# Sort by availability (most exchanges first)
suggested.sort( key = lambda p : pair_count[p], reverse = True )
return suggested[: 20 ] # Top 20 suggestions
# Usage
manager = TradingPairsManager()
# In your WebSocket message handler:
if message.get( 'type' ) == 'pairs_data' :
manager.handle_pairs_data(message)
# Find BTC pairs
btc_pairs = manager.find_pairs_by_base( 'BTC' )
print ( f "Found { len (btc_pairs) } BTC pairs" )
# Get suggestions for trading
suggestions = manager.suggest_pairs_for_trading( min_exchanges = 8 )
print ( f "Suggested pairs: { suggestions[: 5 ] } " )
JavaScript Pairs Analyzer
class TradingPairsAnalyzer {
constructor () {
this . allPairs = new Map ();
this . exchangePairs = new Map ();
this . pairStats = new Map ();
this . lastUpdate = null ;
}
requestAllPairs ( websocket ) {
const request = { type: 'get_pairs' };
websocket . send ( JSON . stringify ( request ));
}
requestExchangePairs ( websocket , exchange ) {
const request = {
type: 'get_pairs' ,
exchange: exchange
};
websocket . send ( JSON . stringify ( request ));
}
handlePairsData ( data ) {
const pairsData = data . data || {};
if ( pairsData . exchange ) {
this . handleSingleExchange ( pairsData );
} else {
this . handleAllExchanges ( pairsData );
}
this . lastUpdate = new Date ();
}
handleAllExchanges ( data ) {
this . allPairs = new Map ( Object . entries ( data . exchanges || {}));
// Calculate pair statistics
this . calculatePairStats ();
console . log ( `Loaded pairs from ${ this . allPairs . size } exchanges` );
console . log ( `Total unique pairs: ${ data . total_pairs } ` );
console . log ( `Common pairs: ${ data . common_pairs ?. length || 0 } ` );
}
handleSingleExchange ( data ) {
const exchange = data . exchange ;
const pairs = data . pairs || [];
const categories = data . categories || {};
this . exchangePairs . set ( exchange , {
pairs: pairs ,
categories: categories ,
total: pairs . length
});
console . log ( ` ${ exchange } : ${ pairs . length } pairs` );
}
calculatePairStats () {
const pairCount = new Map ();
// Count occurrences of each pair
for ( const [ exchange , pairs ] of this . allPairs ) {
pairs . forEach ( pair => {
pairCount . set ( pair , ( pairCount . get ( pair ) || 0 ) + 1 );
});
}
this . pairStats = pairCount ;
}
findPairsByBase ( baseCurrency ) {
const matches = [];
for ( const [ exchange , pairs ] of this . allPairs ) {
pairs . forEach ( pair => {
if ( pair . startsWith ( ` ${ baseCurrency } /` )) {
matches . push ({ pair , exchange });
}
});
}
return matches ;
}
findPairsByQuote ( quoteCurrency ) {
const matches = [];
for ( const [ exchange , pairs ] of this . allPairs ) {
pairs . forEach ( pair => {
if ( pair . endsWith ( `/ ${ quoteCurrency } ` )) {
matches . push ({ pair , exchange });
}
});
}
return matches ;
}
getExchangesForPair ( targetPair ) {
const exchanges = [];
for ( const [ exchange , pairs ] of this . allPairs ) {
if ( pairs . includes ( targetPair )) {
exchanges . push ( exchange );
}
}
return exchanges ;
}
getMostLiquidPairs ( minExchanges = 10 ) {
const liquidPairs = [];
for ( const [ pair , count ] of this . pairStats ) {
if ( count >= minExchanges ) {
liquidPairs . push ({ pair , exchanges: count });
}
}
// Sort by exchange count (liquidity indicator)
liquidPairs . sort (( a , b ) => b . exchanges - a . exchanges );
return liquidPairs ;
}
analyzePairCategories () {
const categories = {
major: [],
altcoins: [],
stablecoins: [],
meme: [],
defi: []
};
const majorBases = [ 'BTC' , 'ETH' , 'BNB' ];
const stablecoins = [ 'USDT' , 'USDC' , 'BUSD' , 'DAI' ];
const memeTokens = [ 'DOGE' , 'SHIB' , 'PEPE' ];
const defiTokens = [ 'UNI' , 'AAVE' , 'COMP' , 'SUSHI' ];
for ( const pair of this . pairStats . keys ()) {
const [ base , quote ] = pair . split ( '/' );
if ( majorBases . includes ( base )) {
categories . major . push ( pair );
} else if ( stablecoins . includes ( base )) {
categories . stablecoins . push ( pair );
} else if ( memeTokens . includes ( base )) {
categories . meme . push ( pair );
} else if ( defiTokens . includes ( base )) {
categories . defi . push ( pair );
} else {
categories . altcoins . push ( pair );
}
}
return categories ;
}
generateTradingRecommendations () {
const liquid = this . getMostLiquidPairs ( 8 );
const categories = this . analyzePairCategories ();
return {
most_liquid: liquid . slice ( 0 , 10 ),
major_pairs: categories . major . slice ( 0 , 5 ),
top_altcoins: categories . altcoins . slice ( 0 , 10 ),
defi_tokens: categories . defi . slice ( 0 , 5 )
};
}
}
// Usage
const analyzer = new TradingPairsAnalyzer ();
// In your WebSocket message handler:
if ( message . type === 'pairs_data' ) {
analyzer . handlePairsData ( message );
// Get recommendations
const recommendations = analyzer . generateTradingRecommendations ();
console . log ( 'Trading recommendations:' , recommendations );
// Find all BTC pairs
const btcPairs = analyzer . findPairsByBase ( 'BTC' );
console . log ( `BTC pairs found: ${ btcPairs . length } ` );
}
Pair Selection Strategies
Liquidity-Based Selection
def select_high_liquidity_pairs ( manager , min_exchanges = 8 ):
"""Select pairs with high liquidity (available on many exchanges)"""
suggestions = manager.suggest_pairs_for_trading(min_exchanges)
# Prioritize major pairs
major_pairs = [ 'BTC/USDT' , 'ETH/USDT' , 'BNB/USDT' , 'ADA/USDT' ]
priority_pairs = [pair for pair in suggestions if pair in major_pairs]
other_pairs = [pair for pair in suggestions if pair not in major_pairs]
return priority_pairs + other_pairs[: 10 ]
Category-Based Selection
function selectPairsByCategory ( analyzer ) {
const categories = analyzer . analyzePairCategories ();
return {
conservative: categories . major . slice ( 0 , 3 ), // Top 3 major pairs
growth: categories . altcoins . slice ( 0 , 5 ), // Top 5 altcoins
speculative: categories . meme . slice ( 0 , 2 ), // Top 2 meme coins
defi: categories . defi . slice ( 0 , 3 ) // Top 3 DeFi tokens
};
}
Error Responses
Invalid Exchange
{
"type" : "error" ,
"error" : "invalid_exchange" ,
"message" : "Exchange 'invalid_name' is not supported" ,
"supported_exchanges" : [ "binance" , "okx" , "bybit" , "kucoin" ]
}
Authentication Required
{
"type" : "error" ,
"error" : "authentication_required" ,
"message" : "You must authenticate before requesting trading pairs"
}
Trading pairs availability can change over time as exchanges add or remove pairs. Regularly refresh your pairs data to ensure accurate information.