This endpoint returns the following metrics, averaged for the requested period.
Bid volume
Ask volume
Bid-ask spread
Price Slippage
We are unable to collect the full 10% snapshot from all exchanges we cover. Thus, for some exchanges, 'Market Depth' does not accurately portray the exchange's order book volume.
sort
No
Return the data in ascending asc or descending desc order. Default desc
Automatically included in continuation tokens.
start_time
No
Starting time in ISO 8601 (inclusive). Automatically included in continuation tokens.
slippage
No
Order size (in quote asset) for which to calculate the percentage of slippage. Default: 0. When null is returned, not enough volume is present on the order book to execute the order.
slippage_ref
No
Price point for which to calculate slippage from. Either from the mid price (mid_price) or from the best bid/ask (best). Default: mid_price.
bid_slippage
The average percentage of price slippage for a market sell order over a specified interval.
region
Yes
Choose between eu and us.
exchange
Yes
Exchange code.
See Exchange codes
instrument_class
Yes
Instrument class.
See Exchange trading pair codes (instruments)
instrument
Yes
end_time
No
Ending time in ISO 8601 (exclusive). Automatically included in continuation tokens.
continuation_token
No
See Pagination
interval
No
The interval parameter is suffixed with s, m, h or d to specify seconds, minutes, hours or days, respectively.
Any arbitrary value between one second and one day can be used, as long as it sums up to a maximum of 1 day. The suffixes are s (second), m (minute), h (hour) and d (day).
Default 1h.
page_size
No
poll_timestamp
The timestamp at which the interval begins.
bid_volume_x
The average volume of bids placed within 0 and x% of the best bid over a specified interval.
ask_volume_x
The average volume of asks placed within 0 and x% of the best ask over a specified interval.
spread
The average difference between the best bid and the best ask over a specified interval.
mid_price
The average mid price between the best bid and the best ask over a specified interval
ask_slippage
The average percentage of price slippage for a market buy order over a specified interval.
Instrument code.
See
Number of snapshots to return data for. (default: 10, max: 100). See Automatically included in continuation tokens.
https://us.market-api.kaiko.io/v2/data/order_book_snapshots.v1/exchanges/{exchange}/{instrument_class}/{instrument}/ob_aggregations/fullcurl --compressed -H 'Accept: application/json' -H 'X-Api-Key: <client-api-key>' \
'https://us.market-api.kaiko.io/v2/data/order_book_snapshots.v1/exchanges/krkn/spot/btc-usd/ob_aggregations/full?page_size=10&slippage=100000&interval=1h&start_time=2019-12-04T00:00:00Z&end_time=2019-12-06T00:00:00Z'##### 1. Import dependencies #####
import requests
import pandas as pd
##### 2. Choose the value of the query's parameters #####
# ---- Required parameters ---- #
exchange = "krkn"
instrument_class = "spot"
pair = "btc-usd" #called "instrument" in the documentation
# ---- Optional parameters ---- #
sort = "desc"
page_size = 100
start_time= "2025-03-03T00:00:00Z"
end_time= "2025-03-05T00:00:00Z"
# ---- API key configuration ---- #
api_key = "YOUR_API_KEY"
##### 3. Get the data #####
# ---- Function to run an API call ---- #
# Get the data in a dataframe --------- #
def get_kaiko_data(api_key: str, exchange: str, pair: str, instrument_class: str, start_time: str, end_time: str, sort: str, page_size: int):
headers = {'Accept': 'application/json', 'X-Api-Key': api_key}
url = f'https://us.market-api.kaiko.io/v2/data/order_book_snapshots.v1/exchanges/{exchange}/{instrument_class}/{pair}/snapshots/slippage'
params = {
"start_time": start_time,
"end_time": end_time,
"sort": sort,
"page_size": page_size
}
try:
res = requests.get(url, headers=headers, params=params)
res.raise_for_status()
data = res.json()
if 'data' not in data:
print("No data returned.")
return pd.DataFrame()
df = pd.DataFrame(data['data'])
# Handle pagination with continuation token
while 'next_url' in data:
next_url = data['next_url']
if next_url is None:
break
res = requests.get(next_url, headers=headers)
res.raise_for_status()
data = res.json()
if 'data' in data:
df = pd.concat([df, pd.DataFrame(data['data'])], ignore_index=True)
return df
except requests.exceptions.RequestException as e:
print(f"API request error: {e}")
return pd.DataFrame()
# ---- Get the data ---- #
df = get_kaiko_data(api_key=api_key, exchange=exchange, pair=pair, instrument_class=instrument_class, start_time=start_time, end_time=end_time ,sort=sort, page_size=int(page_size)){
"query": {
"page_size": 10,
"exchange": "krkn",
"instrument_class": "spot",
"instrument": "btc-usd",
"interval": "1h",
"slippage": 100000,
"slippage_ref": "mid_price",
"sort": "desc",
"aggregation": "full",
"data_version": "v1",
"commodity": "order_book_snapshots",
"request_time": "2020-05-26T14:46:00.561Z"
},
"time": "2020-05-26T14:46:03.776Z",
"timestamp": 1590504363776,
"data": [
{
"poll_timestamp": 1590501600000,
"ask_slippage": "0.00032766083806437735",
"bid_slippage": "0.0002206511273162024",
"bid_volume0_1": "31.751239130434783",
"bid_volume0_2": "87.33763043478261",
"bid_volume0_3": "139.32403260869566",
"bid_volume0_4": "177.62314130434783",
"bid_volume0_5": "206.71984782608695",
"bid_volume0_6": "251.4888043478261",
"bid_volume0_7": "287.1503043478261",
"bid_volume0_8": "317.3515869565217",
"bid_volume0_9": "335.79671739130436",
"bid_volume1": "352.03117391304346",
"bid_volume1_5": "419.0988260869565",
"bid_volume2": "470.6285",
"bid_volume4": "859.7884347826086",
"bid_volume6": "1134.0595760869564",
"bid_volume8": "1134.4657173913045",
"bid_volume10": "1134.4657173913045",
"ask_volume0_1": "21.558043478260867",
"ask_volume0_2": "37.20532608695652",
"ask_volume0_3": "78.02648913043478",
"ask_volume0_4": "143.83753260869565",
"ask_volume0_5": "192.98572826086954",
"ask_volume0_6": "235.31961956521738",
"ask_volume0_7": "280.5659565217391",
"ask_volume0_8": "309.4857717391304",
"ask_volume0_9": "327.8923152173913",
"ask_volume1": "341.79707608695657",
"ask_volume1_5": "411.3568043478261",
"ask_volume2": "475.6048586956521",
"ask_volume4": "885.1007826086956",
"ask_volume6": "1263.1216413043478",
"ask_volume8": "1364.2838369565218",
"ask_volume10": "1364.2838369565218",
"mid_price": "8830.427717391303",
"spread": "1.175"
}
/* ... */
],
"result": "success",
"access": {
"access_range": {
"start_timestamp": null,
"end_timestamp": null
},
"data_range": {
"start_timestamp": null,
"end_timestamp": null
}
}
}