Value at risk calculation
What is this endpoint for?
This endpoints helps you calculate value at risk. Computed by a proprietary and thoroughly backtested methodology that accounts for the idiosyncrasies of crypto market structure. By convention it's a forecasting VaR, i.e. the prediction of the potential loss for the next day.
Endpoint
https://us.market-api.kaiko.io/v2/data/analytics.v2/value_at_riskParameters
bases
Yes
List of portfolio base components. See Asset codes
Total must match quantities below.
The order of bases and their respective quantities must match in the request. 
quantities
Yes
Quantities list of base asset in the portfolio.
Must match the number of bases.
The order of quantities and their respective bases must match in the request. 
risk_level
Yes
The Value at Risk confidence level. 
Min: 0.90 (included) 
Max: 1 (excluded)
start_time
Yes
First fixing of the calculation in ISO 8601 (inclusive).
end_time
Yes
Last fixing of the calculation in ISO 8601 (inclusive).
sources
No
boolean. If true, returns all pair prices which were used to compute the Value at Risk. 
Default: false
Fields
var_time
The time at which the VaR is computed.
value_at_risk
Composed of two fields: value and risk_level (the Value at Risk estimator at the specified risk_level.)
additional_vars
List of additional VaRs for standard risk levels.
pair
The constituent pair. (showing only when sources is set to be true)
ref_price
The reference price per asset. (showing only when sources is set to be true)
date
The date of the reference price. (showing only when sources is set to be true)
Request examples
curl --compressed -H 'Accept: application/json' -H 'X-Api-Key: <client-api-key>' \
'https://us.market-api.kaiko.io/v2/data/analytics.v2/value_at_risk?bases=eth,btc,ltc&quantities=3,2,5"e=usd&risk_level=0.95&start_time=2021-12-01T00:00:00.000Z&end_time=2022-01-31T00:00:00.000Z&sources=true'##### 1. Import dependencies #####
import requests
import pandas as pd
##### 2. Choose the value of the query's parameters #####
# ---- Required parameters ---- #
bases = "btc,eth"
quote = "usd"
quantities = "1,10"
risk_level = "0.95"
start_time = "2021-12-01T00:00:00.000Z"
end_time = "2022-01-31T00:00:00.000Z"
# ---- Optional parameters ---- #
sources = 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, bases: str, quote: str, quantities: str, risk_level: str, start_time: str, end_time: str, sources: bool = None):
    headers = {'Accept': 'application/json', 'X-Api-Key': api_key}
    
    url = f'https://us.market-api.kaiko.io/v2/data/analytics.v2/value_at_risk'
    params = {
        "bases": bases,
        "quote": quote,
        "quantities": quantities,
        "risk_level": risk_level,
        "start_time": start_time,
        "end_time": end_time,
        "sources": sources
    }
    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, bases=bases, quote=quote, quantities=quantities, risk_level=risk_level, start_time=start_time, end_time=end_time, sources=sources)
print (df)Response example
{"query": {
        "bases": "eth,btc,ltc",
        "quote": "usd",
        "quantities": "3,2,5",
        "risk_level": "0.95",
        "sources": true,
        "data_version": "v2",
        "commodity": "analytics",
        "request_time": "2024-12-02T14:57:10.523Z"
    },
    "time": "2024-12-02T14:57:11.037Z",
    "timestamp": 1733151431037,
    "data": [
        {
            "var_time": 1638316800000,
            "value_at_risk": {
                "value": 7348.431318368653,
                "risk_level": 0.95
            },
            "additional_vars": [
                {
                    "value": 6283.239075888689,
                    "risk_level": 0.9
                },
                {
                    "value": 7348.431318368653,
                    "risk_level": 0.95
                },
                {
                    "value": 10285.468412415725,
                    "risk_level": 0.975
                },
                {
                    "value": 10711.839781569755,
                    "risk_level": 0.99
                }
            ]
        },
        {
            "var_time": 1638403200000,
            "value_at_risk": {
                "value": 7300.740323399054,
                "risk_level": 0.95
            },
            "additional_vars": [
                {
                    "value": 6243.422441930624,
                    "risk_level": 0.9
                },
                /*...*/ 
            ]
        },,
    /*...*/ 
    ]
 "sources": {
        "prices": [
            {
                "pair": "eth-usd",
                "prices": [
                    {
                        "ref_price": 611.8140773650796,
                        "date": {
                            "seconds": 1606780800
                        }
                    },
                    /*...*/ 
                ]
            },
            {
                "pair": "btc-usd",
                "prices": [
                    {
                        "ref_price": 19588.910928118505,
                        "date": {
                            "seconds": 1606780800
                        }
                    },
                    /*...*/ 
                ]
            },
            /*...*/ 
        ]
    }
  "quantities": [3, 2, 5],
  "start_date": {"seconds": 1638403200},
  "end_date": {"seconds": 1643673600},
  "risk_level": 0.95,
  "additional_risk_levels": [0.9, 0.95, 0.975, 0.99],
  "decay": 30,
  "bases": ["eth", "btc", "ltc"]}   Last updated
Was this helpful?
