Market Data Websocket

The Market Data Websocket is specific for authorized market data feed with all in fee included in the quotes.

Websocket Endpoints

Environments

There are two environments to access our authorized market data feeds:

  1. Live

wss://market.aquanow.io/ 
  1. Sandbox

wss://market-staging.aquanow.io/

Websocket Access and Authorization

API Authentication is done using an API key and a secret. User needs to associate the following information in the payload of the subscription message. View the Authorization page for more detail.

Subscribe

In order to receive data feed, users sends a subscribe message to the server, after successful websocket connection. Users must also indicate the channel they wish to subscribe on in the subscription request.

When a subscribe message is received with a pair and channel, the server will respond with a subscription message that lists all channels you are subscribed to.

There are three channels you can subscribe for:

  1. orderBook - Orderbook across various marketplaces and exchanges.

  2. ticker - Aggregated Open, High, Low, Close for a ticker.

  3. gbbo - Real time best price/bids updates for subscribed ticker

Note: that the Subscribe request MUST be a JSON string. For example, in Javascript this can be achieved by using the JSON.stringify method.

Request Parameters

NameType Description

apiKey

String

API key

apiSignature

String

Signature created using API secret

channel

String

Channel of subscription

type

String

Type of action; subscribe or unsubscribe

nonce

String

Numeric string timestamp in milliseconds of when the request is sent

pair

String

Symbol/currency pair; ex. – pair: “BTC-CAD”

depth

Number

Depth of an orderbook; ex. – depth: 5

precision

Number

Precision level; ex. - precision: 2

Unsubscribe

You can unsubscribe from a channel at any time.

Example Request

JSON.stringify({
  "type": "unsubscribe",      // Message Type
  "channel": 'orderBook',     // Subscription Channel
  "pair": 'BTC-USD'           // Symbol
})

Example Usage

const WebSocket = require("ws"); 
const crypto = require("crypto"); 
  
const ws = new WebSocket(`wss://market.aquanow.io`); 
  
const apiKey = ""; 
const secret = ""; 
  
function subscribeToMarketData(credentials) { 
   const { apiKey, secret } = credentials; 
   const timestamp = Date.now(); 
   const payload = { 
     type: "subscribe", 
     channel: "orderBook", 
     pair: "BTC-USD", 
     nonce: timestamp, 
     depth: 5 
   }; 
   const apiSignature = crypto 
     .createHmac("sha384", secret) 
     .update(JSON.stringify(payload)) 
     .digest("hex"); 
   
   const subsOption = JSON.stringify({ 
     ...payload, 
     apiKey, 
     apiSignature 
   }); 
   
   ws.send(subsOption); 
 } 
   
 ws.on("open", () => { 
   console.log(`WS tunnel opened - trade`); 
   subscribeToMarketData({ apiKey, secret }); 
 }); 
   
 ws.on("message", data => { 
   console.log("data", data); 
 }); 

Example Responses

{
  dateType: 'aggOB',
  lastUpdated: 1544004380004,
  includeFees: 1,
  symbol: 'BTC-USD',
  bids:
  [
    {
      "quote": "6000",            // Price
      "quantity": 2.13,           // Quote Size
      "cumulativeQuantity": 2.13  // Cumulative Sum of Quantity 
    },
    ...
  ],
  asks:
  [
    {
      "quote": "6001",            // Price
      "quantity": 1.36,           // Quote Size
      "cumulativeQuantity": 1.36  // Cumulative Sum of Quantity
    },
    ...
  ]
}