WebSocket API Referentie
Real-time datastreaming voor walvisposities, funding rates, liquidaties en AI-bevestigingsscores. Subseconde latentie met automatische herverbinding, efficiënte datacompressie en multi-stream abonnementen.
Overzicht
De WebSocket API biedt bidirectionele communicatie met lage latentie voor real-time cryptocurrency derivatendata. In plaats van elke 5-30 seconden REST endpoints te pollen, leveren WebSocket-verbindingen updates direct wanneer marktomstandigheden veranderen. Ideaal voor trading bots, alertsystemen en real-time dashboards.
Belangrijke voordelen van WebSocket ten opzichte van REST:
Subseconde latentie voor marktbewegende gebeurtenissen (liquidaties, walvisbewegingen)
Efficiënt bandbreedtegebruik met delta-gecodeerde updates
Meerdere gelijktijdige abonnementen op één verbinding
Server-side filtering en aggregatie
Automatische heartbeat en herverbindingsafhandeling
Minder API-aanvragen tegen je quota
WebSocket-verbindingen zijn beschikbaar voor alle API-lagen. Gebruikers van de gratis laag kunnen zich abonneren op funding-rates en liquidaties streams. Trader- en Pro-lagen ontgrendelen walvisposities, open interest en bevestigingsscores.
Authenticatie
WebSocket-verbindingen gebruiken dezelfde authenticatie als REST endpoints. Geef je API-sleutel door als een queryparameter of stuur deze in het eerste bericht na het verbinden.
Verbindings-URL
Basis WebSocket URL: wss://ws.smartmoneyapi.com/stream
Voeg je API-sleutel toe aan de verbindings-URL:
wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789
Verbindingslevenscyclus
Initiele Verbinding
Wanneer je verbinding maakt met het WebSocket endpoint, valideert de server je authenticatietoken en stuurt een verbindingsbevestiging.
{
"type": "connection_ack",
"connection_id": "conn_1a2b3c4d5e6f7g8h",
"server_version": "1.2.4",
"timestamp": "2026-03-21T14:35:22Z",
"api_tier": "pro",
"max_subscriptions": 50,
"max_symbols_per_sub": 100
}
Heartbeat (Ping/Pong)
De server stuurt periodieke heartbeat pings elke 30 seconden. Je client moet reageren met een pong-bericht om de verbinding in stand te houden. Als de server binnen 10 seconden geen pong-reactie ontvangt, wordt de verbinding verbroken.
const ws = new WebSocket("wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789");
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === "ping") {
// Reageer op ping met pong
ws.send(JSON.stringify({
type: "pong",
id: msg.id
}));
}
};
ws.onopen = () => {
console.log("Verbonden met WebSocket");
};
Abonnementen
Na het verbinden kun je je abonneren op datastreams met abonnementsberichten. Elk abonnement genereert updates wanneer marktdata verandert.
Abonnementsberichtformaat
{
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"],
"params": {
"min_position_size": 10,
"exchanges": ["bybit", "binance"]
}
}
Uitschrijvingsberichtformaat
{
"type": "unsubscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT"]
}
Walvisposities Stream
Real-time updates voor grote walvisposities op alle gevolgde symbolen en exchanges. Updates worden verzonden wanneer walvissen posities openen, sluiten of aanpassen. Inclusief instapprijs, huidige prijs, P&L, leverage en liquidatierisico.
{
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
}
Updatebericht
{
"type": "data",
"channel": "whale_positions",
"symbol": "BTCUSDT",
"data": {
"wallet_address": "0x1234...",
"exchange": "bybit",
"direction": "long",
"position_size": 25.3,
"entry_price": 41200.0,
"current_price": 43200.5,
"pnl": 50701.50,
"pnl_percent": 4.86,
"leverage": 8,
"liquidation_price": 33760.0,
"timestamp": "2026-03-21T14:35:45Z"
}
}
Funding Rates Stream
Real-time funding rate updates voor Bybit, Binance en Hyperliquid. Updates elke minuut of wanneer tarieven significant veranderen. Inclusief individuele exchange rates en geaggregeerde metrics.
{
"type": "subscribe",
"channel": "funding_rates",
"symbols": ["BTCUSDT", "ETHUSDT"]
}
Updatebericht
{
"type": "data",
"channel": "funding_rates",
"symbol": "BTCUSDT",
"data": {
"timestamp": "2026-03-21T14:00:00Z",
"bybit": {
"rate": 0.000120,
"next_rate": 0.000145
},
"binance": {
"rate": 0.000098,
"next_rate": 0.000115
},
"hyperliquid": {
"rate": 0.000140,
"next_rate": 0.000160
},
"aggregated": {
"mean": 0.000119,
"median": 0.000120,
"spread": 0.000062
}
}
}
Liquidaties Stream
Real-time liquidatiefeed met geforceerde sluitingen van leveraged posities. Inclusief positiegrootte, liquidatieprijs, richting (long/short) en exchange. Handig voor het identificeren van liquidatiecascades en high-impact marktbewegingen.
{
"type": "subscribe",
"channel": "liquidations",
"params": {
"min_size_usd": 50000
}
}
Updatebericht
{
"type": "data",
"channel": "liquidations",
"data": {
"exchange": "binance",
"symbol": "BTCUSDT",
"direction": "long",
"position_size": 12.5,
"liquidation_price": 41000.0,
"size_usd": 512500.0,
"timestamp": "2026-03-21T14:35:12Z"
}
}
Open Interest Stream
Geaggregeerde open interest voor alle leveraged traders per symbool. Volg OI-stijgingen (meer geld in leverage) en dalingen (posities die sluiten). OI-divergentie van prijsbeweging identificeert verborgen bullish/bearish uitputting.
{
"type": "subscribe",
"channel": "open_interest",
"symbols": ["BTCUSDT", "ETHUSDT"]
}
Bevestigingsscores Stream
Real-time AI-bevestigingsscores die walvisposities, on-chain signalen, funding rates en sentimentdata combineren. Scores updaten wanneer onderliggende signalen veranderen, wat live entry/exit-signalen biedt voor trading algoritmes.
{
"type": "subscribe",
"channel": "confirmation_scores",
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
}
Automatische Herverbindingslogica
Netwerkproblemen of serveronderhoud kunnen verbroken verbindingen veroorzaken. Implementeer exponentiële backoff-herverbindingslogica om automatisch te herstellen van storingen met respect voor serverbelasting.
Aanbevolen Herverbindingsstrategie
class SmartMoneyWebSocket {
constructor(token, options = {}) {
this.token = token;
this.maxReconnectDelay = options.maxReconnectDelay || 30000;
this.reconnectDelay = 1000;
this.subscriptions = new Map();
this.connect();
}
connect() {
this.ws = new WebSocket(
`wss://ws.smartmoneyapi.com/stream?token=${this.token}`
);
this.ws.onopen = () => {
console.log("Verbonden");
this.reconnectDelay = 1000; // Reset backoff
this.resubscribe(); // Opnieuw abonneren na herverbinding
};
this.ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === "ping") {
this.ws.send(JSON.stringify({ type: "pong", id: msg.id }));
}
this.onMessage(msg);
};
this.ws.onclose = () => this.reconnect();
this.ws.onerror = (err) => console.error("WebSocket error:", err);
}
reconnect() {
console.log(`Opnieuw verbinden in ${this.reconnectDelay}ms`);
setTimeout(() => {
this.connect();
this.reconnectDelay = Math.min(
this.reconnectDelay * 1.5,
this.maxReconnectDelay
);
}, this.reconnectDelay);
}
subscribe(channel, symbols, params) {
const key = `${channel}:${symbols.join(",")}`;
this.subscriptions.set(key, { channel, symbols, params });
this.ws.send(JSON.stringify({ type: "subscribe", channel, symbols, params }));
}
resubscribe() {
for (const { channel, symbols, params } of this.subscriptions.values()) {
this.ws.send(JSON.stringify({ type: "subscribe", channel, symbols, params }));
}
}
onMessage(msg) {
if (msg.type === "data") {
console.log(`Update: ${msg.channel}/${msg.symbol}`, msg.data);
}
}
}
const client = new SmartMoneyWebSocket("sk_live_abc123xyz789");
client.subscribe("whale_positions", ["BTCUSDT", "ETHUSDT"]);
client.subscribe("funding_rates", ["BTCUSDT"]);
client.subscribe("liquidations", [], { min_size_usd: 100000 });
Codevoorbeelden
Python WebSocket Client
import asyncio
import json
import websockets
async def stream_whale_positions():
uri = "wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789"
async with websockets.connect(uri) as websocket:
# Wacht op verbindingsbevestiging
ack = await websocket.recv()
print(f"Verbonden: {ack}")
# Abonneer op walvisposities
await websocket.send(json.dumps({
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"]
}))
# Luister naar updates
while True:
try:
msg = await websocket.recv()
data = json.loads(msg)
if data["type"] == "ping":
# Reageer op ping
await websocket.send(json.dumps({
"type": "pong",
"id": data["id"]
}))
elif data["type"] == "data":
print(f"Nieuwe positie: {data['data']}")
except websockets.exceptions.ConnectionClosed:
print("Verbinding verbroken, opnieuw verbinden...")
await asyncio.sleep(1)
asyncio.run(stream_whale_positions())
Filter bij abonneren: Gebruik het params-object om data server-side te filteren (min_position_size, min_size_usd) in plaats van in je applicatie.
Batch abonnementen: Abonneer op meerdere symbolen in één bericht in plaats van één abonnement per symbool.
Schrijf ongebruikte uit: Wanneer je een stream niet meer nodig hebt, schrijf je uit om bandbreedte te besparen en berichtvolume te verminderen.
Gebruik gzip-compressie: Schakel berichtcompressie in je WebSocket-client in voor bandbreedtebesparing (20-40% reductie).
Monitor verbindingsgezondheid: Houd ping/pong-latentie en automatische herverbindingen bij om netwerkproblemen te diagnosticeren.
Buffer berichten tijdens verbroken verbinding: Wanneer de verbinding verbroken is, buffert je strategie-signalen en voer ze uit wanneer opnieuw verbonden.
Start Nu Met Streamen
Krijg je API-sleutel en begin met het bouwen van real-time handelssystemen. WebSocket-streaming is beschikbaar voor alle abonnementsniveaus.
API-sleutel aanvragen
Bouw Real-Time Handelsystemen
Stream walvisposities, funding rates en AI-bevestigingsscores met subseconden latentie.
Bekijk Abonnementen