Page cover

Websocket Gateway

Overview

The gateway ws subscription allow users to listen to data streams in real-time data, delivering instant trading updates directly from the Ethereal exchange platform. To interact with the subscription gateway API, send websocket messages after connecting to wss://ws.ethereal.trade/v1/stream.

Socket.IO

Ethereal uses Socket.IO, a library that extends the standard WebSocket protocol. Socket.IO provides ready-made client libraries in multiple languages with automatic reconnection handling and built-in ping/pong frames to maintain stable connections, saving developers from implementing these basic features themselves.

Refer to Socket.IO for language specific client implementations.

Subscription Streams

Subscribe

The WebSocket gateway offers the following subscription streams:

BOOK_DEPTH - Provides order book depth updates for a specific product.

// Subscription message payload
{
  "type": "BookDepth",
  "productId": "<uuid>"
}

// Response message
{
  "timestamp": "<epoch>",
  "previousTimestamp": "<epoch>",
  "productId": "<uuid>",
  "asks": [[price: string, quantity: string]],
  "bids": [[price: string, quantity: string]]
}
  • BookDepth events are emitted on a configurable fixed interval (as of writing, this is configured to be once every 200ms)

  • previousTimestamp is in milliseconds and represents the last time the BookDepth emitted

  • timestamp also in milliseconds and the system timestamp of when this BookDepthwas emitted

  • Using both the previousTimestamp and timestamp you can infer whether or not any events were missed during connection or during consumption

  • asks an array of price/quantity tuples representing asks

  • bids an array of price/quantity tuples representing bids

MARKET_PRICE - Delivers real-time market price updates for a specified product.

  • MarketPrice events are emitted on a configurable fixed interval (currently configured to be once every second)

ORDER_FILL - Notifies when orders are filled for a specific subaccount.

  • OrderFill events are emitted in real-time as they occur

TRADE_FILL - Provides a stream of trades that have occurred filtered by product.

  • TradeFill events are emitted in real-time as they occur

  • Similar to OrderFill, an array of trade fills will be emitted in a single message, grouped by the product they were traded on

ORDER_UPDATE - Provides updates about order status changes for a specific subaccount.

  • OrderUpdate events are emitted in real-time

SUBACCOUNT_LIQUIDATION - Provides an update when a subaccount is liquidated.

  • SubaccountLiquidation events are emitted in real-time

  • subaccountId the subaccount that has been liquidated, liquidatedAt the time (in ms, since the Unix epoch) when the liquidation occurred

TOKEN_TRANSFER - Updates on token transfers (deposits/withdrawals) for a specific subaccount.

Unsubscribe

To stop receiving data from a previously established subscription, you can unsubscribe using the same payload format as your original subscription. Simply emit an unsubscribe event to the socket with the identical payload structure you used when subscribing.

Example Code Snippets

Below is an example implemented using TypeScript and socket.io-client.

Another example using Java to listen on BookDepth:

For Python developers, our Python SDK offers a streamlined approach to WebSocket subscriptions Refer to the Python SDK documentation for more information.

Handling WS Exceptions

Exceptions are exposed in its own event aptly named "exception". Exceptions follow the following shape:

  • pattern indicates the source event pattern if available e.g. "subscribe"

  • status the error status

  • error general body of the error its shape changes depending on the status

Last updated