curl --request GET \
--url https://api.kamino.finance/kvaults/users/{userPubkey}/vaults/{vaultPubkey}/metrics/historyconst options = {method: 'GET'};
fetch('https://api.kamino.finance/kvaults/users/{userPubkey}/vaults/{vaultPubkey}/metrics/history', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.kamino.finance/kvaults/users/{userPubkey}/vaults/{vaultPubkey}/metrics/history"
response = requests.get(url)
print(response.text)false[
{
"createdOn": "2025-03-01T12:00:00.000Z",
"sharesAmount": "1234.56789",
"usdAmount": "1234.56789",
"solAmount": "1234.56789",
"apy": "0.2",
"cumulativeInterestEarned": "1234.56789",
"cumulativeInterestEarnedUsd": "1234.56789",
"cumulativeInterestEarnedSol": "1234.56789",
"interestEarnedPerSecond": "1234.56789",
"interestEarnedPerSecondUsd": "1234.56789",
"interestEarnedPerSecondSol": "1234.56789"
}
]{
"error": "Invalid query request",
"details": [
{
"code": "invalid_union",
"errors": [
[
{
"code": "custom",
"path": [],
"message": "Invalid date string"
}
],
[
{
"expected": "number",
"code": "invalid_type",
"path": [],
"message": "Invalid input: expected number, received string"
}
]
],
"path": [
"start"
],
"message": "Invalid input"
}
]
}{
"error": "An internal error occurred"
}Get historical user metrics for a single KVault
Get historical timeseries for one vault position. Automatic selection picks minute rows for ranges up to 2 days, hourly rows for ranges under 32 days, and daily rows otherwise, returning finer rows for positions younger than those windows, measured from the first resampled bucket. frequency=minute is limited to ranges of at most 32 days. frequency=day&view=chart returns only UTC daily bucket timestamps, USD balances and cumulative USD interest. The newest daily bucket may be partial; use the summary endpoint for the latest balance. Open-ended histories can be up to five minutes plus processing time old.
curl --request GET \
--url https://api.kamino.finance/kvaults/users/{userPubkey}/vaults/{vaultPubkey}/metrics/historyconst options = {method: 'GET'};
fetch('https://api.kamino.finance/kvaults/users/{userPubkey}/vaults/{vaultPubkey}/metrics/history', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.kamino.finance/kvaults/users/{userPubkey}/vaults/{vaultPubkey}/metrics/history"
response = requests.get(url)
print(response.text)false[
{
"createdOn": "2025-03-01T12:00:00.000Z",
"sharesAmount": "1234.56789",
"usdAmount": "1234.56789",
"solAmount": "1234.56789",
"apy": "0.2",
"cumulativeInterestEarned": "1234.56789",
"cumulativeInterestEarnedUsd": "1234.56789",
"cumulativeInterestEarnedSol": "1234.56789",
"interestEarnedPerSecond": "1234.56789",
"interestEarnedPerSecondUsd": "1234.56789",
"interestEarnedPerSecondSol": "1234.56789"
}
]{
"error": "Invalid query request",
"details": [
{
"code": "invalid_union",
"errors": [
[
{
"code": "custom",
"path": [],
"message": "Invalid date string"
}
],
[
{
"expected": "number",
"code": "invalid_type",
"path": [],
"message": "Invalid input: expected number, received string"
}
]
],
"path": [
"start"
],
"message": "Invalid input"
}
]
}{
"error": "An internal error occurred"
}Path Parameters
Valid base58-encoded address of the vault
"HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E"
Valid base58-encoded address of the user wallet
"AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"
Query Parameters
Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.
"1970-01-01T00:00:00.000Z"
End date of the range (defaults to current time). Accepts ISO string or epoch in ms.
"2025-01-01T00:00:00.000Z"
Snapshot frequency; defaults to automatic selection
minute, hour, day Chart view requires daily frequency
full, chart Response
OK
- Option 1 · object[]
- Option 2 · object[]
Timestamp when the snapshot was created (ISO 8601 format)
"2025-03-01T12:00:00.000Z"
User's total shares amount
"1234.56789"
User's USD amount in kvault
"1234.56789"
User's SOL amount in kvault
"1234.56789"
APY in decimal format (not percentage) represented as string. Multiply by 100 to get percentage (%) - 0.1 in API response is 10%.
"0.123"
"0"
"1"
"1.23"
"-0.5"
"999999.999999"
Total interest earned in kvault token amount for kvault
"1234.56789"
Total interest earned in USD for kvault
"1234.56789"
Total interest earned in SOL for kvault
"1234.56789"
Interest earned per second at that specific moment in token
"1234.56789"
Interest earned per second at that specific moment in USD
"1234.56789"
Interest earned per second at that specific moment in SOL
"1234.56789"