Order Updates WebSocket
Pushes a message every time an order's status changes — OPEN, PARTIALLY_EXECUTED, EXECUTED, CANCELLED, etc. Use this instead of polling Get Order on a tight loop.
| Type | Socket.IO v4 |
| Base URL | wss://ws.coinswitch.co/ |
| Handshake path | /pro/realtime-rates-socket/spot/order-updates |
| Namespace | /orderupdates |
| Event name | FETCH_ORDER_UPDATES |
| Auth | API key on the subscribe payload. |
Subscribe payload
| Parameter | Type | Required | Description |
|---|---|---|---|
event | string | Yes | Must be "subscribe" (case-sensitive). |
apikey | string | Yes | Your CoinSwitch API key. |
Subscribe
- Python
- Java
- Go
- Node.js
import socketio
BASE_URL = "https://ws.coinswitch.co"
HANDSHAKE_PATH = "/pro/realtime-rates-socket/spot/order-updates"
NAMESPACE = "/orderupdates"
sio = socketio.Client()
@sio.event(namespace=NAMESPACE)
def connect():
sio.emit(
"FETCH_ORDER_UPDATES",
{"apikey": "<your api key>", "event": "subscribe"},
namespace=NAMESPACE,
)
@sio.on("FETCH_ORDER_UPDATES", namespace=NAMESPACE)
def on_order_update(data):
print("Order update:", data)
sio.connect(
BASE_URL,
namespaces=[NAMESPACE],
socketio_path=HANDSHAKE_PATH.lstrip("/"),
)
sio.wait()
import okhttp3.*;
import org.json.JSONObject;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("wss://ws.coinswitch.co/pro/realtime-rates-socket/spot/order-updates?EIO=4&transport=websocket")
.build();
JSONObject subscribe = new JSONObject()
.put("event", "subscribe")
.put("apikey", "<your api key>");
String namespaceFrame = "40/orderupdates,";
String subscribeFrame = "42/orderupdates,[\"FETCH_ORDER_UPDATES\"," + subscribe + "]";
WebSocket ws = client.newWebSocket(request, new WebSocketListener() { /* ... */ });
ws.send(namespaceFrame);
ws.send(subscribeFrame);
import (
"log"
socketio "github.com/zishang520/socket.io-client-go/v2/client"
)
opts := socketio.DefaultOptions()
opts.SetTransports([]string{"websocket"})
opts.SetPath("/pro/realtime-rates-socket/spot/order-updates")
sock := socketio.Connect("wss://ws.coinswitch.co/orderupdates", opts)
defer sock.Close()
sock.On("connect", func(args ...any) {
sock.Emit("FETCH_ORDER_UPDATES", map[string]any{
"apikey": "<your api key>",
"event": "subscribe",
})
})
sock.On("FETCH_ORDER_UPDATES", func(args ...any) {
log.Println("update:", args)
})
select {}
// npm install socket.io-client@^4
const { io } = require('socket.io-client');
const sock = io('wss://ws.coinswitch.co/orderupdates', {
path: '/pro/realtime-rates-socket/spot/order-updates',
transports: ['websocket'],
});
sock.on('connect', () => {
sock.emit('FETCH_ORDER_UPDATES', {
apikey: '<your api key>',
event: 'subscribe',
});
});
sock.on('FETCH_ORDER_UPDATES', (data) => {
console.log('update:', data);
});
Update payload
{
"E": 1716390819344,
"O": 1716390819339,
"e": "COINSWITCHX",
"S": "SELL",
"V": "0.0003",
"X": "OPEN",
"i": "35286cf0-8c63-499f-bb43-86b326e4aa38",
"o": "LIMIT",
"p": "6036000",
"s": "btcinr",
"v": "0",
"z": "0"
}
| Field | Type | Description |
|---|---|---|
i | string | Order ID. |
s | string | Symbol (lowercased, no separator). |
e | string | Exchange. |
S | string | Side — BUY / SELL. |
o | string | Order type — LIMIT / MARKET. |
X | string | Order status. See Order Lifecycle. |
V | string | Expected base quantity (the original order quantity). |
p | string | Expected price (the original limit price). |
v | string | Actual price (volume-weighted average fill price so far). |
z | string | Actual base quantity filled so far. |
O | integer | Order updated time (Unix ms). |
E | integer | Event time (Unix ms). |
The values of v and z evolve as fills come in. When X reaches a terminal status, no further updates will arrive for this order.