API Docs

Getting Started

Welcome to tardis.dev developer documentation. There are 3 main ways that can be used to access our historical market data API:

  • Locally installable tardis-machine server with built-in local caching, providing both streaming HTTP and WebSocket endpoints that can be consumed from any programming language supporting those protocols. Available via NPM or as a Docker Image.

  • Node.js tardis-client providing fast and easy to use wrapper for more level REST API with local file based caching build in.

  • HTTP API - low level API providing historical data in minute by minute slices.

Recording and storing market data

  • All market data collection is being done on highly available Google Cloud Platform Kubernetes cluster in London region.

  • Local timestamp recorded for each market message has 100ns precision and is being stored in ISO 8601 format.

  • All exchanges data recorders use the same synchronized clock ensuring reliable local timestamps.

  • Collected historical market data is being stored in parallel in two separate geo-distributed storage providers and being served via global CDN.

  • New market data delay is 4 minutes in relation to real-time (T - 4min).

  • Each WebSocket connection that is used to collect real-time market data has 3 seconds keep alive timeout specified in order to detect stale and closed connection as soon as possible.

  • Additionally in case there is no market data received for more that 6 seconds for open WebSocket connection, such connection is closed and restarted.

Order book data

Order book data is provided in exactly the same format as exchange's WebSocket real-time stream messages, meaning that there is an full order book snapshot just after successful subscription and order book's delta updates after that initial snapshot.

Historical market data available via API provides order book snapshots at the beginning of each day (00:00:000 UTC) and anytime exchange restarted it's connection when recording real-time data stream. It means that in order to be sure to receive initial order book snapshots one must replay historical data from 00:00:000 UTC time of the day, it also means that there is a very tiny gap in historical data (around 50-300ms range depending on exchange) during re-subscribing to exchange's real-time WebSocket stream (every 24 hours).

Some exchanges do not provide initial order book snapshots when consuming WebSocket real-time stream (like Binance, Bitstamp or Coinbase Pro full order book), hence for such exchanges there is a 'generated' order book snapshot available instead, details are specific for each exchange and can be found in exchanges details section.

Tardis-machine

Tardis-machine is a fast, locally installable server with built-in local caching, that uses lower level HTTP API under the hood. It can be installed via NPM or run as a Docker Container (image available on Docker hub).

Locally cached data is stored on disk in compressed form (GZIP) and decompressed on demand when reading the data.

Tardis-machine provides on-demand tick-level market data replay API from any moment in time in exchange's WebSocket data format both via streaming HTTP and WebSocket endpoints. In many cases existing exchanges WebSocket clients can be used to consume historical message stream as if it was real-time one.

Detailed and most up to date documentation & installation instructions can be found on GitHub.

Example below illustrates tardis-machine executing inline from code and official Node.js BitMEX WebSocket client communicating with it and consuming historical data as if it was real-time stream - it can as well run as CLI installed via NPM and as Docker container.

tardis-machine example working with official Node.js BitMEX WebSocket client

Try example above using run button - first change Node version to v12 in dropdown on the left

tardis-machine example working together with ccxws lib

Try example above using run button - first change Node version to v12 in dropdown on the left

Tardis-client

If you're programming in Node.js already, tardis-client provides simple and intuitive way of accessing tardis.dev historical market data API.

Detailed and most up to date documentation & installation instructions can be found on GitHub, but the gist of it is that you provide exchange name, historical date ranges and optional filters (channel names are the same as exchange's channels in real-time WebSocket streams, same for symbols) and you receive an async iterable that provides market data message on each iteration. Local disk-based caching is being done transparently in the background. Cached data is stored on disk in compressed form (GZIP) and decompressed on demand when reading the data. Use playground below to try it live.

It requires Node.js v12 as uses both for await...of and worker threads.

tardis-client example replaying historical BitMEX liquidations messages

Try example above using run button - first change Node version to v12 in dropdown on the left

HTTP API

get
/data-feeds/:exchange

https://tardis.dev/api/v1/data-feeds/:exchange
Provides historical cryptocurrency market data feed as minute by minute slices in new line delimited JSON format (NDJSON) with addition of local timestamp at the beginning of each line - in ISO 8601 format. Each response is being GZIP compressed and contains one minute of historical market data. Parallel request to this endpoint are supported and can speed up overall fetch process substantially, but please don't use more than 60 parallel requests or so as it doesn't bring any speed benefits, but on contrary it may be slower. Check out https://github.com/tardis-dev/node-client implementation for hints how to efficiently use this API, feel free to contact us in case of any difficulties as well.
Request
Response
Path Parameters
exchange
required
string
requested exchange, use /exchanges API for most up to date exchanges list (use exchange.id as value for this param)
Headers
Authorization
optional
string
For authenticated requests provide Authorization header with value: 'Bearer <YOUR_API_KEY>'
Query Parameters
from
required
string
requested UTC start date of historical market data feed (e.g.: 2019-04-05 or 2019-04-05T01:02:00.000Z)
offset
optional
number
minute offset that together with from date specifies exact minute slice of historical data that will be returned (e.g.: from date: 2019-04-05 with offset: 2 will provide historical data between 2019-04-05T00:02:00.000Z and 2010-04-05T00:03:00.000Z)
filters
optional
string
URL encoded JSON string with {channel:string, symbols?: string[]} [] form with optional historical market data filters - (e.g: [{"channel":"trade"}]) , use https://tardis.dev/api/v1/exchanges/:exchange HTTP endpoint to get list of allowed channels and symbols for each exchange
200: OK
Example response snippet, each line contains local timestamp (ISO 8601) plus JSON message as provided by live exchange WebSocket stream
2019-04-01T00:00:34.8345516Z {"table":"trade","action":"insert","data":[{"timestamp":"2019-04-01T00:00:34.815Z","symbol":"ETHUSD","side":"Sell","size":7000,"price":141.2,"tickDirection":"ZeroMinusTick","trdMatchID":"baa369de-cb3b-b18f-685e-0ffdec00358c","grossValue":98840000,"homeNotional":28.654468050268125,"foreignNotional":4046.010888697859}]}
2019-04-01T00:00:34.8346465Z {"table":"orderBookL2","action":"update","data":[{"symbol":"ETHUSD","id":29699997176,"side":"Buy","size":65350}]}
2019-04-01T00:00:34.8395743Z {"table":"orderBookL2","action":"update","data":[{"symbol":"BCHM19","id":32999999571,"side":"Sell","size":333},{"symbol":"BCHM19","id":32999999572,"side":"Sell","size":576},{"symbol":"BCHM19","id":32999999573,"side":"Sell","size":353}]}
2019-04-01T00:00:34.8567501Z {"table":"trade","action":"insert","data":[{"timestamp":"2019-04-01T00:00:34.830Z","symbol":"XBTUSD","side":"Buy","size":182,"price":4089,"tickDirection":"ZeroPlusTick","trdMatchID":"fa93bd9b-e1b6-d38d-f4d4-65337a766e34","grossValue":4450992,"homeNotional":0.04450992,"foreignNotional":182}]}
2019-04-01T00:00:34.8567741Z {"table":"orderBookL2","action":"update","data":[{"symbol":"XBTUSD","id":8799591100,"side":"Sell","size":351568}]}
2019-04-01T00:00:34.8567783Z {"table":"orderBookL2","action":"update","data":[{"symbol":"ETHUSD","id":29699997176,"side":"Buy","size":55349}]}
2019-04-01T00:00:34.8567812Z {"table":"orderBookL2","action":"update","data":[{"symbol":"ETHUSD","id":29699997167,"side":"Sell","size":430305}]}
2019-04-01T00:00:34.8567847Z {"table":"orderBookL2","action":"insert","data":[{"symbol":"EOSM19","id":33199989652,"side":"Buy","size":216,"price":0.0010348}]}
2019-04-01T00:00:34.8605618Z {"table":"orderBookL2","action":"update","data":[{"symbol":"XBTUSD","id":8799591850,"side":"Buy","size":154511}]}
2019-04-01T00:00:34.8605944Z {"table":"orderBookL2","action":"update","data":[{"symbol":"TRXM19","id":33299999258,"side":"Sell","size":1493}]}
2019-04-01T00:00:34.8617223Z {"table":"orderBookL2","action":"update","data":[{"symbol":"ADAM19","id":33099998260,"side":"Buy","size":224039}]}Requests examples

Sample requests:

Get full BitMEX data feed from 2019-04-01T00:02:00.000Z to 2019-04-01T00:03:00.000Z
Get BitMEX trades for all instruments from 2019-05-01T00:00:00.000Z to 2019-05-01T00:01:00.000Z
Get full Bitfinex data feed from 2019-06-01T00:10:00.000Z to 2019-06-01T00:11:00.000Z

get
/exchanges

https://tardis.dev/api/v1/exchanges
Gets the exchanges list supported by tardis.dev
Request
Response
200: OK
Response contains JSON array of supported exchanges with basic details for each
[
{
"id": "bitmex",
"name": "BitMEX",
"priceInfo": { "fullAccessPrice": 10, "singleSymbolPrice": 1, "stepDurationInDays": 30, "stepMultiplier": 0.1, "maxMultiplier": 5 },
"filterable": true,
"availableSince": "2019-03-30T00:00:00.000Z"
},
{
"id": "coinbase",
"name": "Coinbase Pro",
"priceInfo": { "fullAccessPrice": 20, "singleSymbolPrice": 1.5, "stepDurationInDays": 30, "stepMultiplier": 0.1, "maxMultiplier": 5 },
"filterable": true,
"availableSince": "2019-03-30T00:00:00.000Z"
},
{
"id": "deribit",
"name": "Deribit",
"priceInfo": { "fullAccessPrice": 18, "singleSymbolPrice": 1, "stepDurationInDays": 30, "stepMultiplier": 0.1, "maxMultiplier": 5 },
"filterable": true,
"availableSince": "2019-03-30T00:00:00.000Z"
},
{
"id": "cryptofacilities",
"name": "Crypto Facilities",
"priceInfo": { "fullAccessPrice": 10, "singleSymbolPrice": 1, "stepDurationInDays": 30, "stepMultiplier": 0.1, "maxMultiplier": 5 },
"filterable": true,
"availableSince": "2019-03-30T00:00:00.000Z"
},
{
"id": "bitstamp",
"name": "Bitstamp",
"priceInfo": { "fullAccessPrice": 10, "singleSymbolPrice": 1, "stepDurationInDays": 30, "stepMultiplier": 0.1, "maxMultiplier": 5 },
"filterable": true,
"availableSince": "2019-03-30T00:00:00.000Z"
},
{
"id": "kraken",
"name": "Kraken",
"priceInfo": { "fullAccessPrice": 10, "singleSymbolPrice": 1, "stepDurationInDays": 30, "stepMultiplier": 0.1, "maxMultiplier": 5 },
"filterable": false,
"availableSince": "2019-03-30T00:00:00.000Z"
},
{
"id": "okex",
"name": "OKEx - spot high and mid caps, all swap & futures",
"priceInfo": { "fullAccessPrice": 18, "singleSymbolPrice": 0.5, "stepDurationInDays": 30, "stepMultiplier": 0.1, "maxMultiplier": 5 },
"filterable": true,
"availableSince": "2019-03-30T00:00:00.000Z"
},
{
"id": "binance",
"name": "Binance - high and mid caps",
"priceInfo": { "fullAccessPrice": 15, "singleSymbolPrice": 0.5, "stepDurationInDays": 30, "stepMultiplier": 0.1, "maxMultiplier": 5 },
"filterable": true,
"availableSince": "2019-03-30T00:00:00.000Z"
},
{
"id": "binance-jersey",
"name": "Binance Jersey",
"priceInfo": { "fullAccessPrice": 2, "singleSymbolPrice": 0.3, "stepDurationInDays": 30, "stepMultiplier": 0.1, "maxMultiplier": 5 },
"filterable": true,
"availableSince": "2019-04-10T00:00:00.000Z"
},
{
"id": "binance-dex",
"name": "Binance DEX",
"priceInfo": { "fullAccessPrice": 7, "singleSymbolPrice": 0.5, "stepDurationInDays": 30, "stepMultiplier": 0.1, "maxMultiplier": 5 },
"filterable": true,
"availableSince": "2019-06-04T00:00:00.000Z"
},
{
"id": "bitfinex",
"name": "Bitfinex - high caps only",
"priceInfo": { "fullAccessPrice": 10, "singleSymbolPrice": 1, "stepDurationInDays": 30, "stepMultiplier": 0.1, "maxMultiplier": 5 },
"filterable": false,
"availableSince": "2019-05-23T00:00:00.000Z"
}
]

Sample request:

Gets the exchanges list supported by tardis.dev

get
/exchanges/:exchange

https://tardis.dev/api/v1/exchanges/:exchange
Gets exchanges details: available symbols, availability dates, available channels, pricing info etc
Request
Response
Path Parameters
exchange
required
string
requested exchange, use /exchanges API for most up to date exchanges list (use exchange.id as value for this param)
200: OK
Response contains JSON object with exchange details - available symbols, available channels, pricing info etc.
{
"id": "coinbase",
"name": "Coinbase Pro",
"priceInfo": { "fullAccessPrice": 20, "singleSymbolPrice": 1.5, "stepDurationInDays": 30, "stepMultiplier": 0.1, "maxMultiplier": 5 },
"filterable": true,
"availableSince": "2019-03-30T00:00:00.000Z",
"availableSymbols": [
{ "symbol": "ETH-EUR", "displayName": "ETHEUR", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "ETC-GBP", "displayName": "ETCGBP", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "BTC-USDC", "displayName": "BTCUSDC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "DAI-USDC", "displayName": "DAIUSDC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "ETH-USD", "displayName": "ETHUSD", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "DNT-USDC", "displayName": "DNTUSDC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "LINK-ETH", "displayName": "LINKETH", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "ETH-GBP", "displayName": "ETHGBP", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "ETC-BTC", "displayName": "ETCBTC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "XRP-EUR", "displayName": "XRPEUR", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "BTC-USD", "displayName": "BTCUSD", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "LOOM-USDC", "displayName": "LOOMUSDC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "XLM-BTC", "displayName": "XLMBTC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "ETC-EUR", "displayName": "ETCEUR", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "EOS-BTC", "displayName": "EOSBTC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "CVC-USDC", "displayName": "CVCUSDC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "BAT-USDC", "displayName": "BATUSDC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "BCH-USD", "displayName": "BCHUSD", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "XRP-BTC", "displayName": "XRPBTC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "REP-USD", "displayName": "REPUSD", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "ETH-DAI", "displayName": "ETHDAI", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "ETH-USDC", "displayName": "ETHUSDC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "ZRX-EUR", "displayName": "ZRXEUR", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "LTC-EUR", "displayName": "LTCEUR", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "XRP-USD", "displayName": "XRPUSD", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "LINK-USD", "displayName": "LINKUSD", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "ZRX-USD", "displayName": "ZRXUSD", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "LTC-BTC", "displayName": "LTCBTC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "MANA-USDC", "displayName": "MANAUSDC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "ZRX-BTC", "displayName": "ZRXBTC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "EOS-USD", "displayName": "EOSUSD", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "GNT-USDC", "displayName": "GNTUSDC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "BAT-ETH", "displayName": "BATETH", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "BCH-GBP", "displayName": "BCHGBP", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "XLM-USD", "displayName": "XLMUSD", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "ETH-BTC", "displayName": "ETHBTC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "BTC-GBP", "displayName": "BTCGBP", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "BCH-EUR", "displayName": "BCHEUR", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "REP-BTC", "displayName": "REPBTC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "LTC-GBP", "displayName": "LTCGBP", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "XLM-EUR", "displayName": "XLMEUR", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "ZEC-BTC", "displayName": "ZECBTC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "BTC-EUR", "displayName": "BTCEUR", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "ZEC-USDC", "displayName": "ZECUSDC", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "LTC-USD", "displayName": "LTCUSD", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "ETC-USD", "displayName": "ETCUSD", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "EOS-EUR", "displayName": "EOSEUR", "availableSince": "2019-03-30T00:00:00.000Z" },
{ "symbol": "BCH-BTC", "displayName": "BCHBTC", "availableSince": "2019-03-30T00:00:00.000Z" }
],
"availableChannels": [
"subscriptions",
"received",
"open",
"done",
"match",
"change",
"l2update",
"ticker",
"snapshot",
"last_match",
"full_snapshot"
],
"incidentReports": []
}

Sample request:

get
/api-key-info

https://tardis.dev/api/v1/api-key-info
Given API KEY provided in request header provides information about what historical data (exchanges, date ranges, symbols) is available for given API KEY.
Request
Response
Headers
Authorization
required
string
API KEY in format 'Bearer <YOUR_API_KEY>'
200: OK

Exchanges details

BitMEX

Historical raw market data is provided in the same data format as real-time WebSocket API (plus local timestamps).

Available channels:

trade, orderBookL2, liquidation, connected, announcement, chat, publicNotifications, instrument, settlement, funding, insurance, orderBookL2_25, quote, quoteBin1m, quoteBin5m, quoteBin1h, quoteBin1d, tradeBin1m, tradeBin5m, tradeBin1h, tradeBin1d

Historical data availability date ranges & available symbols:

BitMEX historical market data details - available symbols, channels , date ranges, incidents

Bitstamp

Historical raw market data is provided in the same data format as real-time WebSocket v2 API (plus local timestamps).

Bitstamp WebSocket API does not provide initial full order book snapshots for live_orders and diff_order_book channels subscriptions. To overcome this issue we record those snapshots by calling exchange REST API and store them together with rest of the WebSocket messages. Such snapshot messages are marked with "event": "snapshot" and "generated": true fields. This effectively allows reconstructing historical full order book for both of those channels.

Example API response for Bitstamp historical market data containing order book snapshots data

Available channels:

live_trades, live_orders, diff_order_book

Historical data availability date ranges & available symbols:

Bitstamp historical market data details - available symbols, channels , date ranges, incidents

Coinbase Pro

Historical raw market data is provided in the same data format as real-time WebSocket API (plus local timestamps).

Coinbase Pro WebSocket API, provides initial full order book snapshots for level2, but not for full channel. To overcome this issue we record those snapshots by calling exchange REST API and store them together with rest of the WebSocket messages. Such snapshot messages are marked with "type":"full_snapshot" and "generated":true fields. This effectively allows reconstructing historical full order book for full channel.

Example API response for Coinbase Pro historical market data containing order book snapshots data

Recording process takes care of data integrity of order book by validating sequence numbers provided by exchange real-time message stream - in case of detecting missed message, recording process restarts WebSocket connection and subscribes again.

Cloudflare Pro WebSocket API sits behind Cloudflare which means slightly increased latency and occasional reconnection triggered by Cloudflare WebSocket proxy restarts.

Available channels:

subscriptions, received, open, done, match, change, l2update, ticker, snapshot, last_match, full_snapshot

Historical data availability date ranges & available symbols:

Coinbase Pro historical market data details - available symbols, channels , date ranges, incidents

Deribit

Historical raw market data is provided in the same data format as real-time WebSocket v2 API (plus local timestamps).

Deribit WebSocket API docs

Recording process takes care of data integrity of order book by validating sequence numbers provided by exchange real-time message stream - in case of detecting missed message, recording process restarts WebSocket connection and subscribes again.

Available channels:

book, deribit_price_index, deribit_price_ranking, estimated_expiration_price, markprice.options, perpetual, trades, ticker, quote

book, perpetual, ticker, trades channels data was all collected with raw interval - no aggregation was applied.

Historical data availability date ranges & available symbols:

Deribit historical market data details - available symbols, channels , date ranges, incidents

Crypto Facilities

Historical raw market data is provided in the same data format as real-time WebSocket API (plus local timestamps).

Tardis dev uses direct API access to Crypto Facilities exchange (without Cloudflare in between) that improves connection stability and latency - https://www.cryptofacilities.com/resources/hc/en-us/articles/360022531713-IP-whitelisting-for-direct-access

Recording process takes care of data integrity of order book by validating sequence numbers provided by exchange real-time message stream - in case of detecting missed message, recording process restarts WebSocket connection and subscribes again.

Available channels:

trade, trade_snapshot, book, book_snapshot, ticker, heartbeat

Historical data availability date ranges & available symbols:

Crypto facilities historical market data details - available symbols, channels , date ranges, incidents

Kraken

Historical raw market data is provided in the same data format as real-time WebSocket API (plus local timestamps).

Kraken historical market data API provided by tardis.dev currently does not offer filtering by symbol or channel.

Kraken WebSocket API sits behind Cloudflare which means slightly increased latency and occasional reconnection triggered by Cloudflare WebSocket proxy restarts.

Available channels:

ticker, trade, book, spread

Historical data availability date ranges & available symbols:

Kraken historical market data details - available symbols, channels , date ranges, incidents

Bitfinex - high caps only

Historical raw market data is provided in the same data format as real-time WebSocket API v2 (plus local timestamps).

Bitfinex historical market data API provided by tardis.dev currently does not offer filtering by symbol or channel.

Bitfinex WebSocket API sits behind Cloudflare which means slightly increased latency and occasional reconnection triggered by Cloudflare WebSocket proxy restarts.

Recording process takes care of data integrity by validating sequence numbers provided by exchange real-time message stream - in case of detecting missed message, recording process restarts WebSocket connection and subscribes again.

Available channels:

trades, book

book channel has been recorded both as book { prec=R0, freq=F0, len=100 } and book { prec=P0,freq=F0,len=100 }.

Historical data availability date ranges & available symbols:

Bitfinex historical market data details - available symbols, channels , date ranges, incidents

OKEx - spot high and mid caps, all swap & futures instruments

Historical raw market data is provided in the same data format as real-time WebSocket API v3 (plus local timestamps).

OKEx WebSocket API docs

Available channels:

spot/ticker, spot/trade, spot/depth, swap/ticker, swap/trade, swap/depth, swap/funding_rate, swap/price_range, swap/mark_price, futures/ticker, futures/trade, futures/depth, futures/price_range, futures/mark_price, futures/estimated_price

Historical data availability date ranges & available symbols:

OKEx historical market data details - available symbols, channels , date ranges, incidents

Binance - high and mid caps

Historical raw market data is provided in the same data format as real-time WebSocket API (plus local timestamps).

Binance WebSocket API does not provide initial order book snapshots . To overcome this issue we record those snapshots by calling exchange REST API and store them together with rest of the WebSocket messages. Such snapshot messages are marked with "stream":"<symbol>@depthSnapshot" and "generated":true fields. This effectively allows reconstructing historical order book for both of those channels.

Example API response for Binance historical market data containing order book snapshots data

Available channels:

trade, ticker, depth, miniTicker, depthSnapshot

Historical data availability date ranges & available symbols:

Binance historical market data details - available symbols, channels , date ranges, incidents

Binance DEX

Historical raw market data is provided in the same data format as real-time WebSocket API (plus local timestamps).

Binance DEX WebSocket API does not provide initial order book snapshots . To overcome this issue we record those snapshots by calling exchange REST API and store them together with rest of the WebSocket messages. Such snapshot messages are marked with "stream":"depthSnapshot" and "generated":true fields. This effectively allows reconstructing historical order book for both of those channels.

Example API response for Binance DEX historical market data containing order book snapshots data

Available channels:

trades, marketDiff, kline_1m, ticker, depthSnapshot

Historical data availability date ranges & available symbols:

Binance DEX historical market data details - available symbols, channels , date ranges, incidents

Binance Jersey

Historical raw market data is provided in the same data format as real-time WebSocket API (plus local timestamps).

Binance Jersey WebSocket API does not provide initial order book snapshots . To overcome this issue we record those snapshots by calling exchange REST API and store them together with rest of the WebSocket messages. Such snapshot messages are marked with "stream":"<symbol>@depthSnapshot" and "generated":true fields. This effectively allows reconstructing historical order book for both of those channels.

Example API response for Binance Jersey historical market data containing order book snapshots data

Available channels:

trade, ticker, depth, miniTicker, depthSnapshot

Historical data availability date ranges & available symbols:

Binance Jersey historical market data details - available symbols, channels , date ranges, incidents

FTX

Historical raw market data is provided in the same data format as real-time WebSocket API (plus local timestamps).

Available channels:

orderbook, trades

Historical data availability date ranges & available symbols:

FTX historical market data details - available symbols, channels , date ranges, incidents