Price a full portfolio
Last updated
Was this helpful?
Was this helpful?
curl -X POST "https://us.market-api.kaiko.io/v2/data/analytics.v2/portfolio" \
-H "Content-Type: application/json" \
-H "X-Api-Key: <client-api-key>" \
-d '{
"value_date": "2025-11-07T08:00:00Z",
"sensitivities": false,
"portfolio": [
{
"kind": "spot",
"instrument_id": "btc-spot-1",
"amount": 2.5,
"sign": 1,
"currency": "btc"
},
{
"kind": "cash",
"instrument_id": "eur-1",
"amount": 50000,
"sign": 1,
"currency": "eur"
}
]
}
'##### 1. Import dependencies #####
import requests
import json
import pandas as pd
##### 2. Choose the value of the query's parameters #####
# ---- Required parameters ---- #
value_date = "2025-12-14T00:00:00.000Z"
portfolio = [
{
"instrument_id": "btc-spot-1",
"kind": "spot",
"sign": 1,
"amount": 2.5,
"currency": "btc"
},
{"instrument_id": "eth-spot-1",
"kind": "spot",
"sign": 1,
"amount": 10.0,
"currency": "eth"
},
{
"instrument_id": "btc-call-100k",
"kind": "vanilla_option",
"sign": 1,
"quantity": 1.0,
"base": "btc",
"strike": 100000.0,
"expiry": "2025-12-26T08:00:00.000Z",
"is_call": True
},
{
"instrument_id": "eur-cash",
"kind": "cash",
"sign": 1,
"amount": 50000.0,
"currency": "eur"
}
]
# ---- Optional parameters ---- #
sensitivities=False
# ---- API key configuration ---- #
#api_key = "YOUR_API_KEY"
##### 3. Get the data #####
# ---- Function to run an API call ---- #
def get_portfolio_value(api_key: str, value_date: str, portfolio: list, sensitivities: bool = False):
"""
Price a cryptocurrency portfolio.
Returns complete response with portfolio summary and instruments.
"""
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-Api-Key': api_key
}
url = 'https://us.market-api.kaiko.io/v2/data/analytics.v2/portfolio'
payload = {
"value_date": value_date,
"portfolio": portfolio,
"sensitivities": sensitivities
}
try:
res = requests.post(url, headers=headers, json=payload)
res.raise_for_status()
data = res.json()
if 'data' not in data:
print("No data returned.")
return pd.DataFrame()
df = pd.DataFrame(data['data'])
return df
except requests.exceptions.RequestException as e:
print(f"API request error: {e}")
return pd.DataFrame()
result = get_portfolio_value(api_key, value_date, portfolio, sensitivities=sensitivities)
print("Portfolio valuation :", result["portfolio"][0]["total_value"], "USD")
# Display
print(json.dumps(json.loads(result.to_json(orient='records')), indent=2)){
"query": {
"value_date": "2025-12-25T00:02:00Z",
"sensitivities": false,
"request_time": "2026-02-10T13:37:30.623689182Z"
},
"time": "2026-02-10T13:37:30.652712913Z",
"timestamp": 1770730650,
"result": "success",
"data": [
{
"portfolio": {
"total_value": 277706.4327034304,
"base_currency": "usd",
"sensitivities": []
},
"instruments": [
{
"instrument_id": "btc-spot-1",
"kind": "SPOT",
"value": 218834.00454545452,
"sensitivities": []
},
{
"instrument_id": "eur-1",
"kind": "CASH",
"value": 58872.42815797592,
"sensitivities": []
}
]
}
]
}