Skip to content

Streaming (WebSocket)

Streaming is a two-step process:

  1. Subscribe with a REST call (or a legacy command).
  2. Listen on a WebSocket at ws://127.0.0.1:81 — or on the legacy data port TCP 78.

Every connected stream client receives every streamed message, so several apps can listen at once.

Terminal window
curl -X POST "http://127.0.0.1:81/v1/track/prices?symbols=EURUSD,XAUUSD"
{"MSG":"TRACK_PRICES","SUCCESS":["EURUSD","XAUUSD"],"ERROR_ID":0,"ERROR_DESCRIPTION":"The operation completed successfully"}

Each tick then arrives as:

{"MSG":"TRACK_PRICES","TIME":"2026.10.28 08:16:35","SYMBOL":"EURUSD","ASK":1.11216,"BID":1.11210,"VOLUME":16246}
Terminal window
curl -X POST "http://127.0.0.1:81/v1/track/ohlc" \
-H "Content-Type: application/json" \
-d '{"OHLC":[{"TIMEFRAME":"PERIOD_M1","SYMBOL":"EURUSD","DEPTH":2}]}'
{"MSG":"TRACK_OHLC","SYMBOL":"EURUSD","PERIOD":"PERIOD_M1","OHLC":[
{"TIME":"2026.10.28 08:15:00","OPEN":1.11201,"HIGH":1.11222,"LOW":1.11198,"CLOSE":1.11210,"TICK_VOLUME":96},
{"TIME":"2026.10.28 08:16:00","OPEN":1.11210,"HIGH":1.11218,"LOW":1.11207,"CLOSE":1.11216,"TICK_VOLUME":31}]}

DEPTH is how many of the latest bars to send each time the current bar changes.

Terminal window
curl -X POST "http://127.0.0.1:81/v1/track/mbook?symbols=EURUSD"
{"MSG":"TRACK_MBOOK","SYMBOL":"EURUSD","MARKET_BOOK":[
{"PRICE":1.11220,"VOLUME":1,"VOLUMEREAL":1,"TYPE":"BOOK_TYPE_SELL"},
{"PRICE":1.11210,"VOLUME":1,"VOLUMEREAL":1,"TYPE":"BOOK_TYPE_BUY"}]}

Depth of market is only available if your broker provides it for the symbol.

Terminal window
curl -X POST "http://127.0.0.1:81/v1/track/orders?enabled=true"

You’ll be notified of every trade transaction — new orders, fills, modifications, stop-loss or take-profit hits:

{"MSG":"TRACK_TRADE_EVENTS","TRADE_TRANSACTION":{"DEAL":0,"DEAL_TYPE":"DEAL_TYPE_BUY","ORDER":3262274114,
"ORDER_STATE":"ORDER_STATE_STARTED","ORDER_TYPE":"ORDER_TYPE_BUY","POSITION":0,"POSITION_BY":0,
"PRICE":0.00000000,"PRICE_SL":0.00000000,"PRICE_TP":0.00000000,"PRICE_TRIGGER":0.00000000,
"SYMBOL":"EURUSD","TIME_EXPIRATION":"1970.01.01 00:00:00","TIME_TYPE":"ORDER_TIME_GTC",
"TYPE":"TRADE_TRANSACTION_ORDER_ADD","VOLUME":0.01000000}}

Events of type TRADE_TRANSACTION_REQUEST also include TRADE_REQUEST and TRADE_RESULT objects.

Send an empty list or enabled=false:

Terminal window
curl -X POST "http://127.0.0.1:81/v1/track/prices?symbols="
curl -X POST "http://127.0.0.1:81/v1/track/orders?enabled=false"
const ws = new WebSocket("ws://127.0.0.1:81");
ws.onmessage = (e) => {
const msg = JSON.parse(e.data);
if (msg.MSG === "TRACK_PRICES") console.log(msg.SYMBOL, msg.BID, msg.ASK);
};
import websocket, json # pip install websocket-client
ws = websocket.create_connection("ws://127.0.0.1:81")
while True:
print(json.loads(ws.recv()))