Every executed transaction on an exchange, including the price, volume, and timestamp at which the transaction occurred.
Trade DataMarket depth, bid/ask spread, price slippage calculator, and aggregated order books averaged over time intervals (1 min.- 1day).
Liquidity MeasuresLimit order book snapshots taken twice per minute, including all bids/asks placed within 10% of the midprice.
Order Books[Open, High, Low, Close, Volume] candlestick data in granularities ranging from 1 second to 1 day, for all instruments.
OHLCVIncremental tick-level updates/deltas of all bids and asks on an order book. L3 and L2 data available for top exchanges.
Tick Order Books[Volume Weighted Average Price] data in granularities ranging from 1 second to 1 day, for all instruments.
VWAPA composite price for a crypto asset aggregated across all or a custom selection of exchanges. Fiat conversions available.
Exchange RatesA combined dataset including trade count over time intervals ranging from 1 second to 1 day, and OHLCV and VWAP.
C-OHLCV-VWAPOpen interest, implied volatility, funding rates, and more live derivatives-specific data from all top exchanges.
DerivativesTrade Data is a general term for tick-by-tick data, or all executed transactions occurring on an exchange. Our trade datasets consist of all tick-by-tick trade data, normalized and timestamped. We began trade data collection in 2011 and add new exchanges on a continual basis. We now provide historical and real-time trade data for over 85 exchanges and 20,000+ instruments.
We collect trade data by polling exchange REST API's at regular intervals. Upon collection, we normalize the data into the schema shown below.
Variable | Description |
---|---|
ID | Unique trade ID (unique to the exchange). Trade ID's come directly from the exchange. If an exchange does not provide a trade ID, we will generate it ourselves. |
Exchange | Internal Kaiko symbol used for the exchange. |
Symbol | Currency pair |
Date | Epoch timestamp in milliseconds. You can learn more about timestamps, including how to convert them to human readable form here. |
Price | Displayed in the quote currency |
Amount | Quantity of asset bought or sold, displayed in base currency |
Sell | True or False, referring to the trade direction (detailed description of variable here). A trade marked as 'true' means that a price taker placed a market sell order. |
Trades for BTC/USD on Coinbase.
Delivery Channel | Trade Data Availability |
---|---|
Flat File Data Feed | All historical data and daily .csv file updates |
REST API | All historical data and real-time updates. |
WebSocket | Live updates for top exchanges. |
An order book is a list containing all outstanding buy or sell orders for an asset, organized by price level. An order to buy is called a ‘bid’ and an order to sell is called an ‘ask’. The exchange’s matching engine pairs up bids and asks with market buy/sell orders, resulting in a trade. Kaiko provides level 2 order book snapshots, aggregated by price level, for 20,000 currency pairs across 85+ exchanges.
We take two order book snapshots per minute for all instruments and exchanges that we cover. Our order book snapshots include all bids and asks placed within 10% of the midprice, at the time the snapshot was taken.
Variable | Description |
---|---|
Date | Epoch timestamp in milliseconds. You can learn more about timestamps, including how to convert them to human readable form, here. |
Type | a = ask, b = bid. An ask is an order placed to sell, a bid to buy. |
Price | Displayed in the quote currency |
Amount | Quantity of asset to buy or sell, displayed in the base currency |
Delivery Channel | Order Book Availability |
---|---|
Flat File Data Feed | All historical data and weekly .csv file updates |
REST API | 1 month historical data and real-time snapshot updates |
WebSocket | (in development) |
Our tick-by-tick order book data sets are the most granular and comprehensive order book data in the industry. We collect every incremental update or "delta" to the order book as they happen in real-time, and we store this data in rows. This includes every added, changed or removed bid and ask, the price level, amount, and the corresponding timestamp or sequence ID.
The first version of our tick-level order book product comprises Level 3 (L3) data collected from three exchanges: Coinbase, Bitstamp, and Bitfinex. We are also able to provide historical backfills of order book data for all top-tier exchanges at L2 precision. L3 data includes every individual bid and ask changed, added, or removed from an order book, non-aggregated. L2 data includes orders aggregated by price level.
Each tick-level order book data set comes with an additional file of corresponding order book snapshots, taken once per hour. These snapshots can be used for full limit order book reconstruction of historical market states. This data is not normalized, but stored in raw exchange-native json format.
The schema below is for our L3 order book data. Email us if you would like our L2 documentation for a wider range of exchanges.
Order book data is pulled from the Coinbase WebSocket 'Full' Channel (link to Coinbase documentation here). The full channel provides real-time updates on orders and trades, which we store in rows. These updates can be applied to a L3 order book snapshot to re-build historical market states, which we collect through Coinbase's REST API and store in a separate file. Coinbase's documentation details an algorithm for recreating order books using sequence numbers.
Coinbase data is formatted to include 6 different "event" types: received, open, done, match, change, and activate. Explanations for these are included in their documentation, and should inform how you reconstruct the order books. Depending on the order type, you can "add" or "subtract" bids and asks to your reconstructed book.
We currently support btc/usd and eth/usd L3 data from Coinbase.
Variable | Description |
---|---|
Kaiko Timestamp | Epoch timestamp in milliseconds recording when we received the individual data packet. You can learn more about timestamps, including how to convert them to human readable form, here. |
JSON Response | The raw response received from Coinbase's WebSocket channel. There are several uniform fields across all order types including: "type", "side", "product-ID", "time" and "sequence". The other fields differ slightly depending on the event type, and more information can be found on Coinbase's documentation. |
(JSON Response Broken Down, Only Uniform Fields): Type | The order type (either 'Received,' 'Done,' 'Open,' 'Match,' 'Change' or 'Activate) |
Product ID | The currency pair, ex. BTC-USD |
Side | Either 'Buy' or 'Sell', referring to both bids/asks updated to the order book or the trade, depending on the order type. |
Time | The time of the event. |
Sequence | The sequence ID, to be used in reconstruction of order book states. |
Data preview for BTC/USD on Coinbase, May 21 2020.
Order book data is pulled from the Bitstamp WebSocket 'Live Orders' channel (link to Bitstamp documentation here). The live orders channel provides all created, changed or deleted orders to the order book. This information can be used to update an existing order book snapshot, which we provide stored in separate files. This data is un-aggregated, and represents every changed, created, or deleted order, and the corresponding timestamp.
We store in rows each raw data packet received from the channel, and the corresponding Kaiko timestamp.
Bitstamp data is formatted to include 3 different order types: order_deleted, order_changed, and order_created. Depending on the order type, you can "add" or "subtract" bids and asks to your reconstructed book.
We currently support btc/usd and eth/usd L3 data from Bitstamp.
Variable | Description |
---|---|
Kaiko Timestamp | Epoch timestamp in milliseconds recording when we received the individual data packet. You can learn more about timestamps, including how to convert them to human readable form, here. |
JSON Response | The raw response received from Bitstamp's WebSocket channel. Fields are uniform across all order types |
(JSON Response Broken Down):ID | The unique order ID |
Order type | Either '1' or '0', 0 = bid, 1 = ask. |
Datetime | Order action timestamp. |
Microsecond | Order action timestamp. |
Amount | Amount of order. |
Price | Price of order. (price level to be updated) |
Channel | WebSocket channel and currency pair. |
Event | Either "order_deleted," "order_changed", or "order_created" |
Data preview for BTC/USD on Bitstamp, May 22 2020.
Order book data is pulled from Bitfinex's 'Raw Book' WebSocket channel (link to Bitfinex documentationhere). The data is requested at R0 precision, meaning every individual order is received as they are updated or removed from the order book. The best 25 bids and asks are currently collected.
This information can be used to update an existing order book snapshot, which we provide stored in separate files. The identification number of each individual order can be used to add, update, or remove orders from an internally maintained order book.
We store Bitfinex data in rows containing each raw data packet received from the channel, and the corresponding Kaiko timestamp. Bitfinex data is not separated by order type. Rather, each individual row represents a change to the order book determined by the order identification number. Any change to an order, order removed, or order added would be indicated by the same order ID and a change to the price or amount. For example, if an order is updated, the same order ID would be sent but with a different price or amount. If the price is '0', this indicates the order with the given identification number is to be removed from the order book. If order amount > 0, then the order is a bid and if <0, the order is an ask.
Bitfinex provides internal sequence IDs (per connection) and millisecond timestamps which we collect to help with order book reconstruction.
We currently supportbtc/usd andeth/usd L3 data from Bitfinex.
Variable | Description |
---|---|
Kaiko Timestamp | Epoch timestamp in milliseconds recording when we received the individual data packet. You can learn more about timestamps, including how to convert them to human readable form, here. |
JSON Response | The raw response received from Bitfinex's WebSocket channel. Fields are uniform across all order types |
(JSON Response Broken Down):Channel ID | Identification number assigned to the channel for the duration of the connection. |
Order ID | Identification number of the order. |
Price | Order price; if 0 you have to remove the order from your book |
±Amount | Amount of order. If > 0 bid, else ask |
Sequence ID | The sequence ID assigned to individual updates since the beginning of the connection. |
Timestamp | Millisecond timestamp provided by Bitfinex, accompanied with each update. |
Data preview for BTC/USD on Bitfinex, May 20, 2020. The first number is the timestamp, the second is the channel ID, and the third is the order ID. The other numbers are simply the price and the order amount to be updated, per order type.
We provide a public sample bundle of btc-usd on the 3 exchanges for 6/15/2020, which can be downloaded here (download starts instantly upon click). Just a warning that this sample bundle is large (1.1GB). Thus, if you would like a full trial of this data type, please email us at hello@kaiko.com and we can configure a trial using AWS or GCP cloud storage services.
The sample bundle includes: 1 day's worth of data for Coinbase, Bitstamp, and Bitfinex, which includes 1 file per exchange for tick-level "events" and 1 file for "snapshots."
OHLCV is an aggregated form of market data standing for Open, High, Low, Close and Volume. OHLCV data includes 5 data points: the Open and Close represent the first and the last price level during a specified interval. High and Low represent the highest and lowest reached price during that interval. Volume is the total amount traded during that period. This data is most frequently represented in a candlestick chart, which allows traders to perform technical analysis on intraday values. We provide OHLCV data in granularities ranging from 1 second to 1 day.
Variable | Description |
---|---|
Timestamp | Epoch timestamp in milliseconds. You can learn more about timestamps, including how to convert them to human readable form, here. The timestamp for all aggregates corresponds with the beginningof the time interval. |
Open | Opening price of the time interval in quote currency (For BTC/USD, the price would be USD). |
High | Highest price reached during time interval, in quote currency. |
Low | Lowest price reached during time interval, in quote currency. |
Close | Closing price of the time interval, in the quote currency. |
Volume | Quantity of asset bought or sold, displayed in base currency. |
Delivery Channel | OHLCV Availability |
---|---|
Flat File Data Feed | All historical data and daily .csv file updates |
REST API | All historical data and real-time updates |
WebSocket | Not available |
VWAP, or Volume Weighted Average Price, is the average price of an asset over a time interval, weighted by volume. VWAP is an aggregated form of trade data. The formula for calculating VWAP is: ∑Price * Volume / ∑Volume. We provide VWAP in granularities ranging from 1 second to 1 day.
Variable | Description |
---|---|
Timestamp | Epoch timestamp in milliseconds. You can learn more about timestamps, including how to convert them to human readable form, here. The timestamp for all aggregates corresponds with the beginning of the time interval. |
VWAP | Volume Weighted Average Price in quote currency |
Delivery Channel | VWAP Availability |
---|---|
Flat File Data Feed | All historical data and daily .csv file updates |
REST API | All historical data and real-time updates |
WebSocket | Not available |
We offer an entire suite of order book API endpoints for traders and researchers, built using our order book snapshots. Through these endpoints, we offer several derivations of order book data: market depth, slippage, spread, and averages of these measures over time intervals ranging from 1 minute to 1 day. Below, we include links to detailed posts about the products and include short descriptions of the data types.
This endpoint gives access to two weeks of historical 10% order book snapshots. The full endpoint returns all the following order book data: the snapshot itself (bids and asks), the depth of the order book (the cumulative volume of the base asset at 0.1%, 0.2%, 0.3%, 0.4%, 0.5%, 0.6%, 0.7%, 0.8%, 0.9%, 1%, 1.5%, 2%, 4%, 6%, 8% and 10% from the mid price), the spread, the mid price and, when the slippage parameter is not empty, the percentage of slippage for a given order size, either calculated from the best bid/ask or calculated from the mid price.
This endpoint gives access to two weeks of historical 10% order book aggregated data, averaged over a specified time interval ranging from 1 minute to 1 day. It returns metrics on the average depth of the order book (the cumulative volume of the base asset at 0.1%, 0.2%, 0.3%, 0.4%, 0.5%, 0.6%, 0.7%, 0.8%, 0.9%, 1%, 1.5%, 2%, 4%, 6%, 8% and 10% from the mid price), the average spread, the average mid price and, when the slippage parameter is not empty, the average percentage of slippage for a given order size, either calculated from the best bid/ask or calculated from the mid price for a given time interval. For each interval, the aggregates are calculated by taking the average metrics of each snapshot within that interval. For example, the aggregated 1 hour spread is calculated by taking all spreads of each snapshot within an hour and calculating the average. All data is returned in descending order.
Variable | Description |
---|---|
Bid_volume_x | The volume of bids placed within 0 and x% of the midprice. For example, bid_volume0_1 includes the sum of bids placed within 0 and .1% of the midprice. Bid_volume_10 would include the cumulative sum of all bids placed within 10% of the midprice. |
Ask_volume_x | The volume of asks placed within 0 and x% of the midprice. For example, ask_volume0_1 includes the sum of bids placed within 0 and .1% of the midprice. Ask_volume_10 would include the cumulative sum of all bids placed within 10% of the midprice. |
Market depth for btc/usd on Coinbase. The depth is cumulative, and refers to the number of the base asset (in this case, BTC) at each price level ranging from .1% to 10% of the mideprice
Variable | Description |
---|---|
Bid_slippage | The percentage price slippage for a market sell order placed at the time that the order book snapshot was taken. The percentage is calculated by running the order size you specify through every bid on the order book until the order has been filled. For example, if you specify $100,000 as the order size you want to simulate, the calculation will fill this simulated sell order with all bids on the order book, and return a percentage in decimal form that represents the difference in price from either the midprice or best bid. The difference in price is calculated from the the midprice (or price level at the best bid) at the time the order book snapshot was taken and the last price level required to fully fill the simulated order. |
Ask_slippage | The percentage price slippage for a market buy order placed at the time that the order book snapshot was taken. The percentage is calculated by running the order size you specify through every ask on the order book until the order has been filled. For example, if you specify $100,000 as the order size you want to simulate, the calculation will fill this simulated buy order with all asks on the order book, and return a percentage in decimal form that represents the difference in price from either the midprice or best bid. The difference in price is calculated from the the midprice (or price level at the best bid) at the time the order book snapshot was taken and the last price level required to fully fill the simulated order. |
Price slippage for a $100,000 market order for btc/usd on Coinbase. You can include custom order sizes as a parameter. The timestamp refers to the time of the snapshot at which the slippage was calculated. The ask slippage and bid slippage correspond with whether the market order was a buy (ask slippage) or a sell (bid slippage).
Variable | Description |
---|---|
Poll_date | The date at which the raw data snapshot was taken, or if using the 'Aggregations' endpoint, the date at which the time interval begins. |
Bid_slippage | The percentage price slippage for a market buy order placed at the time that the order book snapshot was taken, or if using the 'Aggregations' endpoint, the average ask slippage over the time interval specified. |
Ask_slippage | The percentage price slippage for a market buy order placed at the time that the order book snapshot was taken, or if using the 'Aggregations' endpoint, the average ask slippage over the time interval specified. |
Bid_volume_x | The volume of bids placed within 0 and x% of the midprice. If using the 'Aggregations' endpoint, the average bid_volume over the time interval specified. |
Ask_volume_x | The volume of asks placed within 0 and x% of the midprice. If using the 'Aggregations' endpoint, the average ask_volume over the time interval specified. |
Spread | The difference between the best bid and the best ask at the time the snapshot was taken, or if using the 'Aggregations' endpoint, the average spread over the time interval specified. |
Mid_price | The mid price between the best bid and the best ask. If using the 'Aggregations' endpoint, the average mid price over the time interval specified. |
All liquidity measures, calculated from either the raw snapshot, or averaged across multiple snapshots over time, depending on the endpoint requested.
We have developed two types of data aggregations to determine a composite price for an asset across all or a select number of exchanges. Both exchange rates let the user decide which exchanges to include or exclude in the calculation. We currently only provide this data through our API.
Aggregated Price takes a specified currency pair and aggregates the price of that pair across all exchanges (or a custom selection of exchanges) it trades on for the requested interval of time. Our aggregation methodology takes the volume-weighted average price (VWAP) of all volume weighted average prices calculated for a given currency pair (a VWAP of VWAPs). The output data includes exactly which exchanges we pulled data from to form the aggregation, along with the individual VWAP data points used to calculate the aggregation.
You can read more about how to use this endpoint in our blog post here. You can read the API documentation here.
This endpoint returns the price of any asset in USD, EUR, GBP, AUD or NZD. The difference between this endpoint and Aggregated Price is that Aggregated Price will not give a USD price if that asset does not natively trade against USD. This can be inconvenient if you need to standardize volume calculations across all exchanges or want to view standardized prices in a single currency. Thus, we decided to develop an exchange rate for assets into USD that do not directly trade against USD.
The USD price is calculated based on the path of the highest liquidity. Our liquidity gauge is currently the volume traded. With our API endpoint, we include an optional parameter to display the data used as input for the calculation of the USD price and the path which was followed. In cases where the most liquid path changed over time, this will be taken into account in the calculation of the price for each interval. You can read our documentation for this endpoint here.
Other fiat conversions are available through this endpoint.
This combined data set includes 3 data types: trade count, or the number of raw transactions occurring over a time interval, OHLCV, and VWAP (described above). Through our API, this data aggregation comes in granularities ranging from 1 second to 1 day, and in .csv files, in granularities ranging from 1 minute to 1 day.
Request DataVariable | Description |
---|---|
Timestamp | Epoch timestamp in milliseconds. You can learn more about timestamps, including how to convert them to human readable form, here. The timestamp for all aggregates corresponds with the beginning of the time interval. |
Count | Number of trades occurring over the time interval of the data set. For example, '231' for minute granularity would mean that 231 raw trades occurred over the minute. |
Open | Opening price in quote currency (for BTCUSD, USD is the quote curency) |
High | Highest price reached during the timeframe, in quote currency |
Low | Lowest price reached during the timeframe, in quote currency |
Close | Closing price of the timeframe in quote currency |
Volume | Volume traded in the timeframe in base currency |
VWAP | Volume Weighted Average Price in quote currency |
ETH/USD on Bitstamp.
Delivery Channel | VWAP Availability |
---|---|
Flat File Data Feed | All historical data and daily .csv file updates |
REST API | All historical data and real-time updates |
WebSocket | Not available |
Derivatives-specific data unique to futures, options, and perpetual futures contracts. This includes everything from funding rates to implied volatility to open interest, depending on the contract type and the data provided by each individual exchange. We currently provide real-time derivatives data, updated once per minute, available through our REST API, but we will soon provide historical derivatives data. For all derivatives contracts, we provide our standard historical and live market dataoffering, including trades, order books, and aggregates.
We currently provide data collected from futures, options and perpetual futures contracts from the following exchanges: BitMEX, Deribit, OKEx, Kraken Futures, FTX and Bybit. More exchanges (such as HuobiDM, Binance Futures, Bitflyer, Binance JEX and Phemex) will be added soon.
Variable | Description |
---|---|
24_volume | The total 24h traded volume (in base currency) |
Ask | The current best ask price. `null` when no asks are placed |
Bid | The current best bid price. `null` when no bids are placed. |
Index_price | The price of the underlying index. |
Mark_price | The mark price of the contract. The mark price is calculated from the index price, often as a weighted average across multiple exchange's spot price, in order to avoid price manipulation. |
Open_interest | The total oustanding number of contracts. |
Expiry | The contract expiry date. |
Price | The latest recorded spot price. |
Futures data preview for Okex futures contract ethusd200703, as requested from our API:
Variable | Description |
---|---|
Ask_iv | Implied volatility for the best ask |
Bid_iv | Implied volatility for the best bid |
Ask_amount | Size of the best ask |
Expiry | The contract expiry date. |
Index_price | The price of the underlying index. |
Delta | The delta value for the option |
Underlying_index | The name of the underlying index |
Bid | The current best bid price. `null` when no bids are placed. |
Gamma | The gamma value for the option |
Bid_amount | Size of the best bid |
Mark_price | The implied volatility for the mark price |
Strike_price | The strike price of the contract in USD |
Rho | The rho value for the option |
Open_interest | The total oustanding number of contracts. |
Ask | The current best ask price. `null` when no asks are placed |
Kind | The kind of contract: "C" for call, "P" for put |
24_volume | The total 24h traded volume (in base currency) |
Price | The latest recorded contract price |
Theta | The theta value for the option |
Vega | The vega value for the option |
Mark_price | The mark price of the contract. The mark price is calculated from the index price, often as a weighted average across multiple exchange's spot price, in order to avoid price manipulation. |
Options data preview for Deribit btc28aug209500c, as requested from our API:
Variable | Description |
---|---|
24_volume | The total 24h traded volume (in base currency) |
Ask | The current best ask price. `null` when no asks are placed |
Bid | The current best bid price. `null` when no bids are placed. |
Funding_rate | The current funding rate. |
Mark_price | The mark price of the contract. The mark price is calculated from the index price, often as a weighted average across multiple exchange's spot price, in order to avoid price manipulation. |
Open_interest | The total outstanding number of contracts. |
Predicted_funding_rate | The predicted funding rate for the next period. |
Price | The latest recorded spot price. |
Index_price | The price of the underlying index. |
Data preview for Bitmex btc-usd perpetual future contract, as polled from our API:
We can set up a free trial of our full data services or provide a custom price quote if you let us know a bit more about your data requirements.
Which currency pair(s)?
BTC/USD? ETH/USD?
On which exchange(s)?
Coinbase? Binance? Bitmex? Deribit?
What data type(s)?
Trades? Order books? OHLCV? Exchange rates?
Historical or live?
Full historical access with real-time updates? Just 1 year of data? Only live updates?