Direct price
What is this endpoint for?
This endpoint returns a price calculation for a specific pair by aggregating prices from our Trade Data. Read the methodology to learn about the calculation process.
Endpoint
https://<eu|us>.market-api.kaiko.io/v2/data/trades.v1/robust_pair_price/{base_asset}/{quote_asset}Path parameters
sort
No
Return the data in ascending (asc) or descending (desc) order. Default is desc.
Query parameters
interval
Yes
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 24h.
start_time
No
Starting time in ISO 8601 (inclusive). Automatically included in continuation tokens.
end_time
No
Ending time in ISO 8601 (exclusive) Automatically included in continuation tokens.
page_size
No
See Pagination
Page size limits differ by the interval selected:
Less than or equal to
1mDefault:10, Max:1001mto1hDefault:4, Max:10More than
1hDefault:1, Max:4
Automatically included in continuation tokens.
sort
No
Return the data in ascending (asc) or descending (desc) order. Default is desc.
include_exchanges
No
List of exchanges' code to include in the calculation.
Exchange codes
Default is all exchanges.
Automatically included in continuation tokens.
exclude_exchanges
No
List of exchanges' code to exclude in the calculation.
Automatically included in continuation tokens.
extrapolate_missing_values
No
When true, if there are any null (missing) prices for the calculation, they will be filled in using the last available price from the window requested. This is useful for assets that don't have a lot of trades or for data that is collected very frequently.
However, if the parameter is set to true and no prices were available in that window, a null value will still be returned.
Fields
timestamp
Timestamp at which the interval begins.
price
RWM Robust Weighted Median.
null when no trades reported, except if extrapolate_missing_values is true
volume
Total volume in base asset traded in the interval.
0 when no trades are reported, except if extrapolate_missing_values is true.
count
Total amount of trades reported during the interval.
0 when no trades are reported, except if extrapolate_missing_values is true.
extrapolate_missing_values
true if the value has been extrapolated from the last computed value available, false if not.
Request examples
curl --compressed -H 'Accept: application/json' -H 'X-Api-Key: <client-api-key>' \
'https://us.market-api.kaiko.io/v2/data/trades.v1/robust_pair_price/btc/eth?interval=1m&extrapolate_missing_values=true&start_time=2023-05-03T00:01:00.000Z&end_time=2023-05-04T00:00:00.000Z'##### 1. Import dependencies #####
import requests
import pandas as pd
##### 2. Choose the value of the query's parameters #####
# ---- Required parameters ---- #
base_asset = "btc"
quote_asset = "usd"
interval = "1h"
# ---- Optional parameters ---- #
sort = "desc"
page_size = 4
start_time= "2023-01-01T00:00:00Z"
end_time= "2023-01-01T23:59:59Z"
include_exchanges = None
exclude_exchanges = None
extrapolate_missing_values = None
# ---- 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, base_asset: str, quote_asset: str, interval: str, start_time: str, end_time: str, sort: str, page_size: int, include_exchanges: list = None, exclude_exchanges: list = None, extrapolate_missing_values: bool = None):
headers = {'Accept': 'application/json', 'X-Api-Key': api_key}
url = f'https://us.market-api.kaiko.io/v2/data/trades.v1/robust_pair_price/{base_asset}/{quote_asset}'
params = {
"start_time": start_time,
"end_time": end_time,
"sort": sort,
"page_size": page_size,
"interval": interval,
"include_exchanges": include_exchanges,
"exclude_exchanges": exclude_exchanges,
"extrapolate_missing_values": extrapolate_missing_values
}
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, base_asset=base_asset, quote_asset=quote_asset, interval=interval, start_time=start_time, end_time=end_time, sort=sort, page_size=page_size, include_exchanges=include_exchanges, exclude_exchanges=exclude_exchanges, extrapolate_missing_values=extrapolate_missing_values)
print (df)Response example
{
"query": {
"start_time": "2023-05-03T23:50:00Z",
"end_time": "2023-05-04T00:00:00Z",
"base_asset": "btc",
"quote_asset": "eth",
"interval": "1m",
"sort": "desc",
"sources": false,
"page_size": 10,
"include_exchanges": [],
"exclude_exchanges": [],
"request_time": "2024-07-11T07:39:11.34695219Z",
"data_version": "v1",
"commodity": "trades",
"extrapolate_missing_values": true,
"instruments": [
"bbsp:spot:eth-btc",
"bfly:spot:eth-btc",
"bfnx:spot:eth-btc",
"bgon:spot:eth-btc",
"binc:spot:eth-btc",
"bnus:spot:eth-btc",
"bull:spot:eth-btc",
"cbse:spot:eth-btc",
"cnex:spot:eth-btc",
"kcon:spot:eth-btc",
"krkn:spot:eth-btc",
"lmax:spot:eth-btc",
"okex:spot:eth-btc",
"stmp:spot:eth-btc",
"yobt:spot:eth-btc"
]
},
"time": "2024-07-11T07:39:11.430101692Z",
"timestamp": 1720683551,
"data": [
{
"timestamp": 1683158340000,
"price": "15.236109727862226",
"volume": "10.661977267122458",
"count": 263,
"extrapolate_missing_values": false
},
{
"timestamp": 1683158280000,
"price": "15.226897227981592",
"volume": "26.42011153624422",
"count": 184,
"extrapolate_missing_values": false
},
/*...*/
],
"result": "success",
"continuation_token": "V7Dxo9XotwyC1qQtT6Dkaq3fhY8jFqzmgjwkALFWdZQ4JHWoUQFrDaTw8Zc4yCY4Cf863uPBY4phumdqcjoL4imnx5amnLJCZP3rr7dDBw2EC33kpYtsRPsmx1sVW2tfp5pUh72fP9gYrhHzzQpGAz5PKFFwiTuHT921xT1ajG8EV9aRibXxs69PLGwnfH6WD5iw4SAc58c7ZF8PafYgb34APyYC1",
"next_url": "https://us.market-api.kaiko.io/v2/data/trades.v1/robust_pair_price/btc/eth?continuation_token=V7Dxo9XotwyC1qQtT6Dkaq3fhY8jFqzmgjwkALFWdZQ4JHWoUQFrDaTw8Zc4yCY4Cf863uPBY4phumdqcjoL4imnx5amnLJCZP3rr7dDBw2EC33kpYtsRPsmx1sVW2tfp5pUh72fP9gYrhHzzQpGAz5PKFFwiTuHT921xT1ajG8EV9aRibXxs69PLGwnfH6WD5iw4SAc58c7ZF8PafYgb34APyYC1",
"access": {
"access_range": {
"start_timestamp": 1262995200000,
"end_timestamp": 2186006399000
},
"data_range": {
"start_timestamp": null,
"end_timestamp": null
}
}
}Last updated
Was this helpful?
