Skip to Content
Pro FeaturesWebsockets

Websockets

Enhance your trading experience with WebSockets, a high-performance communication protocol, enabling real-time data updates and seamless bidirectional communication for lightning-fast execution and accurate market insights.

JSON RPC Protocol

We use JSON RPC on our websockets backend, every request is structured as a remote procedure with params and a unique identifier.

{ "jsonrpc": "2.0", "method": "quote_request", "params": { "symbol": "BTC_USD", "type": "RFQ" }, "id": "<uuid>" }

Authentication

Before you begin requesting quotes from the websockets server, you will have to login with your API-KEY and API-SECRET. The following procedure call will authenticate you:

{ "jsonrpc": "2.0", "method": "rpc.login", "params": { "apiKey": "apiKey", "apiSecret": "apiSecret" }, "id": "1" }

A successful response will look as follows:

{ "jsonrpc": "2.0", "result": true, "id": 1 }

A failed login attempt will have following response:

{ "jsonrpc": "2.0", "result": false, "id": 1 }

Quote Request

To start a stream of quotes for BTC_USD, you can send the following remote procedure call.

{ "jsonrpc": "2.0", "method": "quote_request", "params": { "symbol": "BTC_USD", "type": "RFQ" }, "id": "1" }

A successful response will look as follows:

{ "method": "quote_request", "response": { "code": 200, "data": { "symbol": "BTC_USD", "buyPrice": 42109.9312493366, "sellPrice": 42110.99622133014 }, "error": null } }

Market Data Request

To start a stream of market data of all the assets available at Fuze, you can send the following remote procedure call.

{ "jsonrpc": "2.0", "method": "market_data_request", "id": "1" }

A successful response will look as follows:

{ "method": "market_data_request", "response": { "code": 200, "data": { "timestamp": 1706792030668, "data": [ { "asset": "BTC", "policies": { "NAME": "Bitcoin", "ICON": "https://s2.coinmarketcap.com/static/img/coins/64x64/1.png", "ASSET_ENABLE": true, "QUOTE_LIMIT": 2000000, "LOCAL_CURRENCY": "AED", "HIGH_24HR": 155116.31, "LOW_24HR": 154042.65, "PRICE_CHANGE_PERCENT_24H": -4.5, "PRICE_CHANGE_PERCENT_1H": 0.19, "PRICE_CHANGE_PERCENT_7D": 5.01, "PRICE_CHANGE_PERCENT_30D": -7.23, "PRICE_CHANGE_PERCENT_1Y": 82.59, "CURRENT_PRICE": 154737.2, "MAX_SUPPLY": 21000000, "CIRCULATING_SUPPLY": 19614893, "ATH": 253608, "ATH_DATE": "2021", "ATL": 632.31, "ATL_DATE": "2015", "MARKET_CAP": 3038062006264 } }, { "asset": "ETH", "policies": { "NAME": "Ethereum", "ICON": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", "ASSET_ENABLE": true, "QUOTE_LIMIT": 2000000, "LOCAL_CURRENCY": "AED", "HIGH_24HR": 8631.48, "LOW_24HR": 8226.4, "PRICE_CHANGE_PERCENT_24H": -5.45, "PRICE_CHANGE_PERCENT_1H": 0.69, "PRICE_CHANGE_PERCENT_7D": 1.89, "PRICE_CHANGE_PERCENT_30D": -5.11, "PRICE_CHANGE_PERCENT_1Y": 43.6, "CURRENT_PRICE": 8337.53, "MAX_SUPPLY": 0, "CIRCULATING_SUPPLY": 120182539.3, "ATH": 17918.33, "ATH_DATE": "2021", "ATL": 1.59, "ATL_DATE": "2015", "MARKET_CAP": 1002766599030 } }, { "asset": "USDC", "policies": { "NAME": "Circle USD", "ICON": "https://s2.coinmarketcap.com/static/img/coins/64x64/3408.png", "ASSET_ENABLE": true, "QUOTE_LIMIT": 2000000, "LOCAL_CURRENCY": "AED", "HIGH_24HR": 3.69, "LOW_24HR": 3.65, "PRICE_CHANGE_PERCENT_24H": 0.1, "PRICE_CHANGE_PERCENT_1H": null, "PRICE_CHANGE_PERCENT_7D": 0.07, "PRICE_CHANGE_PERCENT_30D": -0.05, "PRICE_CHANGE_PERCENT_1Y": -0.04, "CURRENT_PRICE": 3.67, "MAX_SUPPLY": 0, "CIRCULATING_SUPPLY": 26795491945.06, "ATH": 4.31, "ATH_DATE": "2019", "ATL": 3.22, "ATL_DATE": "2023", "MARKET_CAP": 98435839338 } } ] }, "error": null } }

Sample Code

Tying everything together, here is the sample code in typescript for you to connect with websockets server:

import WebSocket from 'ws'; const main = async () => { const ws = new WebSocket('wss://staging-ws.api.fuze.finance', { headers: { 'user-agent': 'Mozilla/5.0', }, }); const apiKey = ''; const apiSecret = ''; const id = 1; let newId = id; ws.on('open', async function open() { console.log(`Sending login request with id: ${id}`); const message = { method: 'rpc.login', params: { apiKey, apiSecret }, jsonrpc: '2.0', id: newId, }; ws.send(JSON.stringify(message)); // sleep for a few seconds newId += 1; console.log(`Sending quote request with id: ${newId}`); const message2 = { method: 'quote_request', params: { symbol: 'BTC_USD', type: 'RFQ' }, jsonrpc: '2.0', id: newId, }; ws.send(JSON.stringify(message2)); newId += 1; console.log(`Sending market data request with id: ${newId}`); const message3 = { method: 'market_data_request', jsonrpc: '2.0', id: newId, }; ws.send(JSON.stringify(message3)); }); ws.on('message', function incoming(data) { console.log(`Received data: ${data.toString()}`); }); }; main();

Limitations

  • Websockets feature is only available as part of enterprises offering
Last updated on