curl --request POST \
--url https://api.kamino.finance/kvaults/vaults/{pubkey}/transactions \
--header 'Content-Type: application/json' \
--data '
{
"instruction": "withdraw",
"type": "withdraw",
"limit": 100,
"direction": "desc",
"paginationToken": "eyJsYXN0SWQiOjgxfQ==",
"start": "2024-01-01T00:00:00.000Z",
"end": "2024-01-01T00:00:00.000Z"
}
'const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
instruction: 'withdraw',
type: 'withdraw',
limit: 100,
direction: 'desc',
paginationToken: 'eyJsYXN0SWQiOjgxfQ==',
start: '2024-01-01T00:00:00.000Z',
end: '2024-01-01T00:00:00.000Z'
})
};
fetch('https://api.kamino.finance/kvaults/vaults/{pubkey}/transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.kamino.finance/kvaults/vaults/{pubkey}/transactions"
payload = {
"instruction": "withdraw",
"type": "withdraw",
"limit": 100,
"direction": "desc",
"paginationToken": "eyJsYXN0SWQiOjgxfQ==",
"start": "2024-01-01T00:00:00.000Z",
"end": "2024-01-01T00:00:00.000Z"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)false{
"result": [
{
"ix": {
"solPrice": "1234.56789",
"sharePrice": "1234.56789",
"tokenPrice": "1234.56789",
"tokenAmount": "1234.56789",
"market": "VEG1EMtttdHunMbSza8uoms1R18VXmYSph2bBpHcSJd",
"reserve": "VEG1EMtttdHunMbSza8uoms1R18VXmYSph2bBpHcSJd",
"numberOfShares": "1234.56789",
"fullWithdraw": true
},
"instruction": "withdrawFromAvailable",
"timestamp": "2025-03-01T12:00:00.000Z",
"signature": "2XWcSQVtR4NoHBhzYpDkYkmYtEFkFXC5ZwrKiPok1kvA86GvnN15qP7RNP6eTeNWgJqgnR1GA2M3QPp1hucW7e1v",
"kvault": "HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E",
"wallet": "AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"
}
],
"hasMore": true,
"paginationToken": "eyJsYXN0SWQiOjgxfQ=="
}{
"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 KVault transactions by vault
Get Kamino Earn Vault transactions for a given vault address, one row per instruction. end defaults to the current time. Request the next page with paginationToken while hasMore is true.
curl --request POST \
--url https://api.kamino.finance/kvaults/vaults/{pubkey}/transactions \
--header 'Content-Type: application/json' \
--data '
{
"instruction": "withdraw",
"type": "withdraw",
"limit": 100,
"direction": "desc",
"paginationToken": "eyJsYXN0SWQiOjgxfQ==",
"start": "2024-01-01T00:00:00.000Z",
"end": "2024-01-01T00:00:00.000Z"
}
'const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
instruction: 'withdraw',
type: 'withdraw',
limit: 100,
direction: 'desc',
paginationToken: 'eyJsYXN0SWQiOjgxfQ==',
start: '2024-01-01T00:00:00.000Z',
end: '2024-01-01T00:00:00.000Z'
})
};
fetch('https://api.kamino.finance/kvaults/vaults/{pubkey}/transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.kamino.finance/kvaults/vaults/{pubkey}/transactions"
payload = {
"instruction": "withdraw",
"type": "withdraw",
"limit": 100,
"direction": "desc",
"paginationToken": "eyJsYXN0SWQiOjgxfQ==",
"start": "2024-01-01T00:00:00.000Z",
"end": "2024-01-01T00:00:00.000Z"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)false{
"result": [
{
"ix": {
"solPrice": "1234.56789",
"sharePrice": "1234.56789",
"tokenPrice": "1234.56789",
"tokenAmount": "1234.56789",
"market": "VEG1EMtttdHunMbSza8uoms1R18VXmYSph2bBpHcSJd",
"reserve": "VEG1EMtttdHunMbSza8uoms1R18VXmYSph2bBpHcSJd",
"numberOfShares": "1234.56789",
"fullWithdraw": true
},
"instruction": "withdrawFromAvailable",
"timestamp": "2025-03-01T12:00:00.000Z",
"signature": "2XWcSQVtR4NoHBhzYpDkYkmYtEFkFXC5ZwrKiPok1kvA86GvnN15qP7RNP6eTeNWgJqgnR1GA2M3QPp1hucW7e1v",
"kvault": "HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E",
"wallet": "AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As"
}
],
"hasMore": true,
"paginationToken": "eyJsYXN0SWQiOjgxfQ=="
}{
"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
"VEG1EMtttdHunMbSza8uoms1R18VXmYSph2bBpHcSJd"
Body
Filter by exact instruction name. Combined with type when both are set.
"withdraw"
Filter by transaction type. deposit: buy, buyWithMinSharesOut, deposit, depositWithMinSharesOut. withdraw: sell, withdraw, withdrawFromAvailable, redeemInKind.
deposit, withdraw "withdraw"
Maximum number of transactions to return (1-1000)
1 <= x <= 1000100
Sort order (asc for oldest first, desc for newest first)
asc, desc "desc"
Pagination position. Resend the other body fields unchanged when requesting the next page.
"eyJsYXN0SWQiOjgxfQ=="
Date input (ISO 8601 string or epoch in ms)
"2024-01-01T00:00:00.000Z"
Date input (ISO 8601 string or epoch in ms)
"2024-01-01T00:00:00.000Z"