Kamino Kamino Earn User API
The Kamino Earn User API from Kamino — 8 operation(s) for kamino earn user.
The Kamino Earn User API from Kamino — 8 operation(s) for kamino earn user.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/kamino-kamino-earn-user-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
version: 1.0.0
title: Kamino Public Airdrop Kamino Earn User API
description: 'The Kamino API provides a comprehensive way to interact with Kamino without reading directly from the blockchain.
The API also provides the ability to fetch data that might not be available from just reading the chain.
The API is rate-limited for unauthenticated users. If you feel you need to make more requests or run into rate-limit issues, please reach out.
'
servers:
- url: https://api.kamino.finance
tags:
- name: Kamino Earn User
paths:
/kvaults/users/{pubkey}/transactions:
get:
summary: Get user KVault transactions
description: Get all Kamino Earn Vault transactions for a given user
tags:
- Kamino Earn User
parameters:
- schema:
allOf:
- $ref: '#/components/schemas/AddressBase58'
- description: Valid base58-encoded address of the user wallet
example: AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As
required: true
description: Valid base58-encoded address of the user wallet
name: pubkey
in: path
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/KVaultInstruction'
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: High-level error message describing the failure
example: Invalid query params
details:
type: array
items:
type: object
additionalProperties: {}
description: Detailed validation issues (present only for validation errors)
required:
- error
description: Bad request response (400)
example:
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
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/kvaults/users/{pubkey}/positions:
get:
summary: Get all user KVault positions
description: Get a list of user positions for each Kamino Earn Vault the user has currently deposited into. Returns staked and unstaked shares.
tags:
- Kamino Earn User
parameters:
- schema:
allOf:
- $ref: '#/components/schemas/AddressBase58'
- description: Valid base58-encoded address of the user wallet
example: AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As
required: true
description: Valid base58-encoded address of the user wallet
name: pubkey
in: path
responses:
'200':
description: OK
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/VaultStateArray'
- items:
type: object
properties:
vaultAddress:
allOf:
- $ref: '#/components/schemas/AddressBase58'
- description: Address of the Kamino Earn Vault
stakedShares:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: The number of Kamino Earn Vault shares staked in a farm
unstakedShares:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: The number of Kamino Earn Vault shares held in the user wallet
totalShares:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: The total number of Kamino Earn Vault shares both held and staked by the user
required:
- vaultAddress
- stakedShares
- unstakedShares
- totalShares
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: High-level error message describing the failure
example: Invalid query params
details:
type: array
items:
type: object
additionalProperties: {}
description: Detailed validation issues (present only for validation errors)
required:
- error
description: Bad request response (400)
example:
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
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/kvaults/users/{userPubkey}/positions/{vaultPubkey}:
get:
summary: Get user position for a specific KVault
description: Get a single user position for a Kamino Earn Vault the user currently has currently deposited into. Returns staked and unstaked shares.
tags:
- Kamino Earn User
parameters:
- schema:
allOf:
- $ref: '#/components/schemas/AddressBase58'
- description: Valid base58-encoded address of the vault
example: HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E
required: true
description: Valid base58-encoded address of the vault
name: vaultPubkey
in: path
- schema:
allOf:
- $ref: '#/components/schemas/AddressBase58'
- description: Valid base58-encoded address of the user wallet
example: AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As
required: true
description: Valid base58-encoded address of the user wallet
name: userPubkey
in: path
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
vaultAddress:
allOf:
- $ref: '#/components/schemas/AddressBase58'
- description: Address of the Kamino Earn Vault
stakedShares:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: The number of Kamino Earn Vault shares staked in a farm
unstakedShares:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: The number of Kamino Earn Vault shares held in the user wallet
totalShares:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: The total number of Kamino Earn Vault shares both held and staked by the user
required:
- vaultAddress
- stakedShares
- unstakedShares
- totalShares
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: High-level error message describing the failure
example: Invalid query params
details:
type: array
items:
type: object
additionalProperties: {}
description: Detailed validation issues (present only for validation errors)
required:
- error
description: Bad request response (400)
example:
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
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
metadata:
type: string
description: Error message describing why it was not found
example: Account could not be found
required:
- metadata
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/kvaults/users/{pubkey}/metrics/history:
get:
summary: Get historical user metrics for all KVault positions
description: Get historical timeseries of total usd/sol/interest/apy for all user Kamino Earn Vault positions
tags:
- Kamino Earn User
parameters:
- schema:
allOf:
- $ref: '#/components/schemas/AddressBase58'
- description: Valid base58-encoded address of the user wallet
example: AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As
required: true
description: Valid base58-encoded address of the user wallet
name: pubkey
in: path
- schema:
anyOf:
- type: string
- type: number
default: '1970-01-01T00:00:00.000Z'
description: Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.
examples:
- '1970-01-01T00:00:00.000Z'
- 0
required: false
description: Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.
name: start
in: query
- schema:
anyOf:
- type: string
- type: number
description: End date of the range (defaults to current time). Accepts ISO string or epoch in ms.
examples:
- '2025-01-01T00:00:00.000Z'
- 1735689600000
required: false
description: End date of the range (defaults to current time). Accepts ISO string or epoch in ms.
name: end
in: query
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/UserKVaultTotal'
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: High-level error message describing the failure
example: Invalid query params
details:
type: array
items:
type: object
additionalProperties: {}
description: Detailed validation issues (present only for validation errors)
required:
- error
description: Bad request response (400)
example:
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
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/kvaults/users/{userPubkey}/vaults/{vaultPubkey}/metrics/history:
get:
summary: Get historical user metrics for a single KVault
description: Get historical timeseries of total usd/sol/interest/apy for a single user Kamino Earn Vault position
tags:
- Kamino Earn User
parameters:
- schema:
allOf:
- $ref: '#/components/schemas/AddressBase58'
- description: Valid base58-encoded address of the vault
example: HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E
required: true
description: Valid base58-encoded address of the vault
name: vaultPubkey
in: path
- schema:
allOf:
- $ref: '#/components/schemas/AddressBase58'
- description: Valid base58-encoded address of the user wallet
example: AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As
required: true
description: Valid base58-encoded address of the user wallet
name: userPubkey
in: path
- schema:
anyOf:
- type: string
- type: number
default: '1970-01-01T00:00:00.000Z'
description: Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.
examples:
- '1970-01-01T00:00:00.000Z'
- 0
required: false
description: Start date of the range (defaults to Unix epoch). Accepts ISO string or epoch in ms.
name: start
in: query
- schema:
anyOf:
- type: string
- type: number
description: End date of the range (defaults to current time). Accepts ISO string or epoch in ms.
examples:
- '2025-01-01T00:00:00.000Z'
- 1735689600000
required: false
description: End date of the range (defaults to current time). Accepts ISO string or epoch in ms.
name: end
in: query
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/UserKvaultMetrics'
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: High-level error message describing the failure
example: Invalid query params
details:
type: array
items:
type: object
additionalProperties: {}
description: Detailed validation issues (present only for validation errors)
required:
- error
description: Bad request response (400)
example:
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
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/kvaults/users/{userPubkey}/vaults/{vaultPubkey}/pnl:
get:
summary: Get user KVault PnL
description: Get current PnL and cost basis of user vault position
tags:
- Kamino Earn User
parameters:
- schema:
allOf:
- $ref: '#/components/schemas/AddressBase58'
- description: Valid base58-encoded address of the vault
example: HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E
required: true
description: Valid base58-encoded address of the vault
name: vaultPubkey
in: path
- schema:
allOf:
- $ref: '#/components/schemas/AddressBase58'
- description: Valid base58-encoded address of the user wallet
example: AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As
required: true
description: Valid base58-encoded address of the user wallet
name: userPubkey
in: path
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/KvaultPnl'
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: High-level error message describing the failure
example: Invalid query params
details:
type: array
items:
type: object
additionalProperties: {}
description: Detailed validation issues (present only for validation errors)
required:
- error
description: Bad request response (400)
example:
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
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/kvaults/users/{userPubkey}/vaults/{vaultPubkey}/pnl/history:
get:
summary: Get user KVault PnL history
description: Get PnL and cost basis history of user vault position
tags:
- Kamino Earn User
parameters:
- schema:
allOf:
- $ref: '#/components/schemas/AddressBase58'
- description: Valid base58-encoded address of the vault
example: HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E
required: true
description: Valid base58-encoded address of the vault
name: vaultPubkey
in: path
- schema:
allOf:
- $ref: '#/components/schemas/AddressBase58'
- description: Valid base58-encoded address of the user wallet
example: AxqtG9SHDkZTLSWg81Sp7VqAzQpRqXtR9ziJ3VQAS8As
required: true
description: Valid base58-encoded address of the user wallet
name: userPubkey
in: path
- schema:
anyOf:
- type: string
- type: number
description: Date input (ISO 8601 string or epoch in ms)
examples:
- '2024-01-01T00:00:00.000Z'
- 1704067200000
required: false
description: Date input (ISO 8601 string or epoch in ms)
name: start
in: query
- schema:
anyOf:
- type: string
- type: number
description: Date input (ISO 8601 string or epoch in ms)
examples:
- '2024-01-01T00:00:00.000Z'
- 1704067200000
required: false
description: Date input (ISO 8601 string or epoch in ms)
name: end
in: query
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
history:
type: array
items:
$ref: '#/components/schemas/KvaultPnlTimeseriesValue'
totalPnl:
$ref: '#/components/schemas/KvaultMultiValue'
totalCostBasis:
$ref: '#/components/schemas/KvaultMultiValue'
required:
- history
- totalPnl
- totalCostBasis
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: High-level error message describing the failure
example: Invalid query params
details:
type: array
items:
type: object
additionalProperties: {}
description: Detailed validation issues (present only for validation errors)
required:
- error
description: Bad request response (400)
example:
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
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/kvaults/users/{pubkey}/rewards:
get:
summary: Get season user rewards
description: Get user season points rewards for each Kamino Earn Vault which the user has invested in
tags:
- Kamino Earn User
parameters:
- schema:
$ref: '#/components/schemas/AddressBase58'
required: true
description: Valid base58-encoded address
name: pubkey
in: path
- schema:
type: string
description: Points source identifier
example: Season1
examples:
- Season1
- Season2
- Season3
- Season4
required: false
description: Points source identifier
name: source
in: query
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/KvaultUserRewardMetrics'
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: High-level error message describing the failure
example: Invalid query params
details:
type: array
items:
type: object
additionalProperties: {}
description: Detailed validation issues (present only for validation errors)
required:
- error
description: Bad request response (400)
example:
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
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
UserKvaultMetrics:
type: object
properties:
createdOn:
allOf:
- $ref: '#/components/schemas/SnapshotDateTime'
- description: Timestamp when the snapshot was created (ISO 8601 format)
example: '2025-03-01T12:00:00.000Z'
sharesAmount:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: User's total shares amount
usdAmount:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: User's USD amount in kvault
solAmount:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: User's SOL amount in kvault
apy:
allOf:
- $ref: '#/components/schemas/Apy'
- description: APY in decimal format (not percentage) represented as string. Multiply by 100 to get percentage (%) - 0.1 in API response is 10%.
example: '0.2'
cumulativeInterestEarned:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: Total interest earned in kvault token amount for kvault
cumulativeInterestEarnedUsd:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: Total interest earned in USD for kvault
cumulativeInterestEarnedSol:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: Total interest earned in SOL for kvault
interestEarnedPerSecond:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: Interest earned per second at that specific moment in token
interestEarnedPerSecondUsd:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: Interest earned per second at that specific moment in USD
interestEarnedPerSecondSol:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: Interest earned per second at that specific moment in SOL
required:
- createdOn
- sharesAmount
- usdAmount
- solAmount
- apy
- cumulativeInterestEarned
- cumulativeInterestEarnedUsd
- cumulativeInterestEarnedSol
- interestEarnedPerSecond
- interestEarnedPerSecondUsd
- interestEarnedPerSecondSol
AddressBase58:
type: string
description: Valid base58-encoded address
example: VEG1EMtttdHunMbSza8uoms1R18VXmYSph2bBpHcSJd
KvaultMultiValue:
type: object
properties:
usd:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: Value in USD
sol:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: Value in SOL
token:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: Value in token denomination
required:
- usd
- sol
- token
VaultStateArray:
type: array
items:
type: object
properties:
address:
allOf:
- $ref: '#/components/schemas/AddressBase58'
- description: Public key of the vault
state:
$ref: '#/components/schemas/The_vault_state_object'
programId:
allOf:
- $ref: '#/components/schemas/AddressBase58'
- description: Public key of the kvault program which owns the vault
required:
- address
- state
- programId
Decimal:
type: string
description: Decimal value represented as string
example: '1234.56789'
Apy:
type: string
description: Borrow interest APY
example: '0.027610992938039702'
examples:
- '0.123'
- '0'
- '1'
- '1.23'
- '-0.5'
- '999999.999999'
Error:
type: object
properties:
error:
type: string
description: Error message for internal server failure
example: An internal error occurred
required:
- error
description: Internal server error response (500)
example:
error: An internal error occurred
KvaultPnlTimeseriesValue:
type: object
properties:
timestamp:
type: number
description: Unix timestamp in milliseconds
type:
anyOf:
- type: string
enum:
- buy
- type: string
enum:
- sell
- type: string
enum:
- mark-to-market
position:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: Current position value
quantity:
allOf:
- $ref: '#/components/schemas/Decimal'
- description: Quantity involved in transaction
tokenPrice:
allOf:
- $ref: '#/components/schemas/KvaultMultiValue'
- description: Token price snapshot
sharePrice:
allOf:
- $ref: '#/components/schemas/KvaultMultiValue'
- description: Share price snapshot
costBasis:
allOf:
- $ref: '#/components/schemas/KvaultMultiValue'
- description: Cost basis for position
realizedPnl:
allOf:
- $ref: '#/components/schemas/KvaultMultiValue'
- description: Realized profit/loss
pnl:
allOf:
- $ref: '#/components/schemas/KvaultMultiValue'
- description: Total profit/loss
positionValue:
allOf:
- $ref: '#/components/schemas/KvaultMultiValue'
- description: Value of the position
investment:
allOf:
- $ref: '#/components/schemas/KvaultMultiValue'
- description: Total invested value
required:
- timestamp
- type
- position
- quantity
- tokenPrice
- sharePrice
- costBasis
- realizedPnl
- pnl
- positionValue
- investment
The_vault_state_object:
type: object
properties:
vaultAdminAuthority:
allOf:
- $ref: '#/compon
# --- truncated at 32 KB (45 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kamino/refs/heads/main/openapi/kamino-kamino-earn-user-api-openapi.yml