By the end of this tutorial, you will have the following skill files configured for your agent.
| File | Purpose |
|---|---|
SKILL.md | Main skill instructions: capabilities, quick reference, and workflows |
references/setup.md | Environment setup: RPC, wallet keypair, OpenClaw config |
references/earn.md | Earn vault operations: deposit, withdraw, vault data, user positions |
references/borrow.md | Borrow market operations: deposit, borrow, repay, withdraw, market data |
references/multiply.md | Multiply operations: leveraged positions, flash loans, position health |
references/liquidity.md | Liquidity strategy operations: deposit, withdraw, strategy metrics, user PnL |
references/rewards.md | Farm operations: stake, unstake, harvest, farm state, pending rewards |
references/api.md | Complete REST API endpoint reference for all products |
Prerequisites
- Node.js 22+
- Solana wallet with SOL for transaction fees
- RPC endpoint
Skill Folder Structure
Create Skill Directory
Create a new directory for the Kamino skill in your OpenClaw workspace:
mkdir -p ~/.openclaw/workspace/skills/kamino
cd ~/.openclaw/workspace/skills/kamino
Create File Structure
Create the following files in the directory:
kamino/
├── SKILL.md # Main skill instructions for the agent
└── references/
├── setup.md # Environment and SDK setup
├── earn.md # Kamino Earn operations (vaults)
├── borrow.md # Kamino Borrow operations (lending)
├── multiply.md # Kamino Multiply operations (leverage)
├── liquidity.md # Kamino Liquidity operations (strategies)
├── rewards.md # Kamino Rewards operations (farms)
└── api.md # Kamino API reference
mkdir -p references
touch SKILL.md references/setup.md references/earn.md references/borrow.md references/multiply.md references/liquidity.md references/rewards.md references/api.md
Get a Solana RPC Endpoint
Choose an RPC provider:
- Free:
https://api.mainnet-beta.solana.com(rate limited) - Recommended: Helius, QuickNode, or Triton (paid, production-ready)
Create or Use Existing Wallet Keypair
Create a new keypair if needed:Or use an existing keypair file.
solana-keygen new --outfile ~/solana-wallet.json
Configure OpenClaw
Add your Solana credentials to Replace
~/.openclaw/openclaw.json:{
"gateway": {
"env": {
"SOLANA_RPC_URL": "https://api.mainnet-beta.solana.com",
"SOLANA_WS_URL": "wss://api.mainnet-beta.solana.com",
"WALLET_KEYPAIR_PATH": "/path/to/your/solana-wallet.json"
}
}
}
/path/to/your/solana-wallet.json with the actual path to your keypair file.For Other AI Agents
- Claude: Copy the SKILL.md content into your conversation or attach as a file
- Cursor: Clone into
.cursor/skills/kaminodirectory - Custom Agents: Reference the markdown files directly
File Templates
Copy the following templates into your skill files.SKILL.md
The main skill file that teaches agents how to interact with Kamino:# Kamino Skill
Interact with Kamino Finance on Solana: Earn vaults, Borrow markets, Liquidity strategies, and Rewards farms.
## Prerequisites
See [setup.md](references/setup.md) for installation and configuration.
Required:
- Solana RPC endpoint
- Wallet keypair for signing transactions
- `@solana/kit` and relevant Kamino SDKs installed
## What You Can Do
**Kamino Earn** - Deposit into yield-generating vaults
**Kamino Borrow** - Supply collateral, borrow assets, repay loans
**Kamino Multiply** - Open and manage leveraged positions
**Kamino Liquidity** - Deposit into automated concentrated liquidity strategies
**Kamino Rewards** - Stake, unstake, and harvest farm rewards
**Oracle (Scope)** - Read token prices on-chain or via REST
## Quick Reference
| Operation | Method | Reference |
|-----------|--------|-----------|
| Earn: Deposit | SDK or API | [earn.md](references/earn.md) |
| Earn: Withdraw | SDK or API | [earn.md](references/earn.md) |
| Borrow: Deposit Collateral | API | [borrow.md](references/borrow.md) |
| Borrow: Borrow Assets | API | [borrow.md](references/borrow.md) |
| Borrow: Repay Loan | API | [borrow.md](references/borrow.md) |
| Borrow: Withdraw Collateral | API | [borrow.md](references/borrow.md) |
| Multiply: Open Position | SDK | [multiply.md](references/multiply.md) |
| Multiply: Monitor Health | SDK | [multiply.md](references/multiply.md) |
| Multiply: Close Position | SDK | [multiply.md](references/multiply.md) |
| Liquidity: Deposit | SDK | [liquidity.md](references/liquidity.md) |
| Liquidity: Withdraw | SDK | [liquidity.md](references/liquidity.md) |
| Liquidity: Strategy Data | SDK or API | [liquidity.md](references/liquidity.md) |
| Rewards: Stake | SDK | [rewards.md](references/rewards.md) |
| Rewards: Unstake | SDK | [rewards.md](references/rewards.md) |
| Rewards: Harvest | SDK | [rewards.md](references/rewards.md) |
| Oracle: Read Prices | SDK or API | [api.md](references/api.md) |
| Query Market Data | SDK | [borrow.md](references/borrow.md) |
| Get Vault/Market Lists | API | [api.md](references/api.md) |
## Core Workflow
### For Kamino Earn:
1. Choose a vault (get list via API or use known address)
2. Deposit tokens to earn yield
3. Withdraw vault shares when needed
### For Kamino Borrow:
1. Supply collateral to a market
2. Borrow assets against your collateral
3. Monitor health factor (keep LTV below 75%)
4. Repay loans and withdraw collateral
### For Kamino Multiply:
1. Choose a strategy (LST, JLP, stablecoin, or xStocks)
2. Open a leveraged position with target leverage
3. Monitor LTV and liquidation risk
4. Adjust leverage, repay debt, or close position
### For Kamino Liquidity:
1. Choose a strategy (get list via API or use known address)
2. Deposit tokens (single-sided or two-sided)
3. Monitor share price and PnL
4. Withdraw shares when needed
### For Kamino Rewards:
1. Find the farm for your position (by stake mint or known address)
2. Stake share tokens into the farm
3. Monitor pending rewards
4. Harvest rewards or unstake and withdraw
**Main Market**: `7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF`
## Reference Files
- **[setup.md](references/setup.md)** — Installation and OpenClaw configuration
- **[earn.md](references/earn.md)** — Vault deposit/withdraw code examples
- **[borrow.md](references/borrow.md)** — Lending market operations
- **[multiply.md](references/multiply.md)** — Leveraged position operations
- **[liquidity.md](references/liquidity.md)** — Liquidity strategy operations
- **[rewards.md](references/rewards.md)** — Farm staking and reward harvesting
- **[api.md](references/api.md)** — Complete API endpoint reference
references/setup.md
Setup guide for using Kamino with OpenClaw:# Kamino Setup
Configure OpenClaw to interact with Kamino Finance protocols on Solana.
## Prerequisites
Before using this skill, you need:
- OpenClaw installed (Node.js 22+)
- Solana RPC endpoint (get from Helius, QuickNode, or use public endpoint)
- Solana wallet keypair file for signing transactions
For complete developer documentation: https://kamino.com/docs/build
**Main Market**: `7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF`
references/earn.md
Kamino Earn vault operations:# Kamino Earn Operations
Deposit into yield-generating vaults, withdraw shares, and query vault/user data.
## Dependencies
```bash
npm install @solana/kit @kamino-finance/klend-sdk decimal.js
```
## SDK Instantiation
```typescript
import { createSolanaRpc, address } from '@solana/kit';
import { KaminoVault, KaminoManager } from '@kamino-finance/klend-sdk';
const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
// Initialize a specific vault
const vault = new KaminoVault(
rpc,
address('VAULT_PUBKEY_HERE')
);
// Or use manager for multi-vault operations
const manager = new KaminoManager(rpc);
```
## SDK Operations
| What to Do | SDK Method | Documentation |
|------------|------------|---------------|
| **Transactions** |
| Deposit to vault | `vault.depositIxs(signer, amount)` | [Recipe](https://docs.kamino.finance/build/recipes/earn/earn-via-sdk) |
| Withdraw from vault | `vault.withdrawIxs(signer, shareAmount)` | [Recipe](https://docs.kamino.finance/build/recipes/earn/earn-withdraw-via-sdk) |
| **Read Vault Data** |
| Get vault holdings | `vault.getVaultHoldings()` | [Data Docs](https://docs.kamino.finance/build/earn/data/vault-data) |
| Get vault APY | `vault.getAPYs()` | [Data Docs](https://docs.kamino.finance/build/earn/data/vault-data) |
| Get exchange rate | `vault.getExchangeRate()` | [Data Docs](https://docs.kamino.finance/build/earn/data/vault-data) |
| Get allocations | `vault.getVaultAllocations()` | [Data Docs](https://docs.kamino.finance/build/earn/data/vault-data) |
| Get vault overview | `manager.getVaultOverview(vault, tokenPrice)` | [Data Docs](https://docs.kamino.finance/build/earn/data/vault-data) |
| **Read User Data** |
| Get user shares | `vault.getUserShares(userAddress)` | [Data Docs](https://docs.kamino.finance/build/earn/data/user-position-data) |
| Get all positions | `manager.getUserSharesBalanceAllVaults(userAddress)` | [Data Docs](https://docs.kamino.finance/build/earn/data/user-position-data) |
## API Operations
| What to Do | API Endpoint | Documentation |
|------------|--------------|---------------|
| **Transactions** |
| Deposit to vault | `POST /ktx/kvault/deposit` | [Recipe](https://docs.kamino.finance/build/recipes/earn/earn-via-api) |
| Withdraw from vault | `POST /ktx/kvault/withdraw` | [Recipe](https://docs.kamino.finance/build/recipes/earn/earn-withdraw-via-api) |
| **Read Vault Data** |
| List all vaults | `GET /kvaults/vaults` | [API Docs](https://api-docs.kamino.finance) |
| Get vault details | `GET /vault/{vaultPubkey}` | [API Docs](https://api-docs.kamino.finance) |
| Get vault metrics | `GET /vault/{vaultPubkey}/metrics` | [API Docs](https://api-docs.kamino.finance) |
| Historical metrics | `GET /vault/{vaultPubkey}/metrics/history` | [API Docs](https://api-docs.kamino.finance) |
| **Read User Data** |
| Get user positions | `GET /kvaults/users/{wallet}/positions` | [API Docs](https://api-docs.kamino.finance) |
| Get vault position | `GET /kvaults/users/{wallet}/vaults/{vaultPubkey}/position` | [API Docs](https://api-docs.kamino.finance) |
| Get position PnL | `GET /kvaults/users/{wallet}/vaults/{vaultPubkey}/pnl` | [API Docs](https://api-docs.kamino.finance) |
| Get transactions | `GET /kvaults/users/{wallet}/transactions` | [API Docs](https://api-docs.kamino.finance) |
## Important Notes
- Withdrawals use **vault share amounts**, not underlying token amounts
- SDK automatically handles farm unstaking if needed
- API transactions use Address Lookup Tables - must use `decompileTransactionMessageFetchingLookupTables`
- Historical data only available via API
## Complete Tutorial
[Earn and Withdraw Tutorial](https://docs.kamino.finance/build/tutorials/earn/earn-and-withdraw)
references/borrow.md
Kamino Borrow operations (deposit collateral, borrow, repay, withdraw):# Kamino Borrow Operations
Supply collateral, borrow assets, repay loans, withdraw collateral, and query market/user data.
**Main Market**: `7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF`
## Dependencies
```bash
npm install @solana/kit @kamino-finance/klend-sdk decimal.js
```
## SDK Instantiation
```typescript
import { createSolanaRpc, address } from '@solana/kit';
import { KaminoMarket, VanillaObligation, PROGRAM_ID } from '@kamino-finance/klend-sdk';
const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
const marketPubkey = address('7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF');
// Load market with 400ms slot duration
const market = await KaminoMarket.load(rpc, marketPubkey, 400, PROGRAM_ID);
// Get user's obligation
const userAddress = address('USER_WALLET_ADDRESS');
const obligation = await market.getObligationByWallet(
userAddress,
new VanillaObligation(PROGRAM_ID)
);
```
## SDK Operations
| What to Do | SDK Method | Documentation |
|------------|------------|---------------|
| **Read Market Data** |
| Get total deposit TVL | `market.getTotalDepositTVL()` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| Get total borrow TVL | `market.getTotalBorrowTVL()` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| Get all reserves | `market.getReserves()` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| Get reserve deposit TVL | `reserve.getDepositTvl()` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| Get reserve borrow TVL | `reserve.getBorrowTvl()` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| Get reserve borrow APY | `reserve.totalBorrowAPY(slot)` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| Get reserve supply APY | `reserve.totalSupplyAPY(slot)` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| Get reserve utilization | `reserve.calculateUtilizationRatio()` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| **Read User Data** |
| Get user's obligation | `market.getObligationByWallet(user, obligationType)` | [Data Docs](https://docs.kamino.finance/build/borrow/data/user-position-data) |
| Get all user obligations | `market.getAllUserObligations(user)` | [Data Docs](https://docs.kamino.finance/build/borrow/data/user-position-data) |
| Get LTV ratio | `obligation.loanToValue()` | [Data Docs](https://docs.kamino.finance/build/borrow/data/user-position-data) |
| Get borrow utilization | `obligation.refreshedStats.borrowUtilization` | [Data Docs](https://docs.kamino.finance/build/borrow/data/user-position-data) |
| Get user deposits | `obligation.deposits` | [Data Docs](https://docs.kamino.finance/build/borrow/data/user-position-data) |
| Get user borrows | `obligation.borrows` | [Data Docs](https://docs.kamino.finance/build/borrow/data/user-position-data) |
## API Operations
| What to Do | API Endpoint | Documentation |
|------------|--------------|---------------|
| **Transactions** |
| Deposit collateral | `POST /ktx/klend/deposit` | [Recipe](https://docs.kamino.finance/build/recipes/borrow/deposit-via-api) |
| Borrow assets | `POST /ktx/klend/borrow` | [Recipe](https://docs.kamino.finance/build/recipes/borrow/borrow-via-api) |
| Repay loan | `POST /ktx/klend/repay` | [Recipe](https://docs.kamino.finance/build/recipes/borrow/repay-via-api) |
| Withdraw collateral | `POST /ktx/klend/withdraw` | [Recipe](https://docs.kamino.finance/build/recipes/borrow/withdraw-via-api) |
| **Read Market Data** |
| List all markets | `GET /v2/kamino-market` | [API Docs](https://api-docs.kamino.finance) |
| Get market details | `GET /kamino-market/{marketPubkey}` | [API Docs](https://api-docs.kamino.finance) |
| Historical reserve APY | `GET /kamino-market/{marketPubkey}/reserves/{reservePubkey}/metrics/history` | [API Docs](https://api-docs.kamino.finance) |
| **Read User Data** |
| Get user obligations | `GET /kamino-market/{marketPubkey}/users/{userPubkey}/obligations` | [API Docs](https://api-docs.kamino.finance) |
| Get obligation details | `GET /kamino-market/{marketPubkey}/obligations/{obligationPubkey}` | [API Docs](https://api-docs.kamino.finance) |
| Get obligation PnL | `GET /kamino-market/{marketPubkey}/users/{userPubkey}/obligations/{obligationPubkey}/pnl` | [API Docs](https://api-docs.kamino.finance) |
| Get user rewards | `GET /kamino-market/{marketPubkey}/users/{userPubkey}/rewards` | [API Docs](https://api-docs.kamino.finance) |
## Important Notes
- **Address Lookup Tables**: All API transactions use ALTs, must use `decompileTransactionMessageFetchingLookupTables`
- **Health checks**: Always verify obligation LTV before borrowing or withdrawing collateral
- **Commitment levels**: Use `finalized` for blockhash, `confirmed` for transaction sends
- **Error handling**: Wrap all operations in try-catch blocks
- **Historical data**: Only available via API
## Complete Tutorials
- [Deposit and Borrow Tutorial](https://docs.kamino.finance/build/tutorials/borrow/deposit-and-borrow)
- [Repay and Withdraw Tutorial](https://docs.kamino.finance/build/tutorials/borrow/repay-and-withdraw)
references/multiply.md
Kamino Multiply leveraged position operations:# Kamino Multiply Operations
Open leveraged positions, monitor health, adjust leverage, and close positions.
## Dependencies
```bash
npm install @solana/kit @kamino-finance/klend-sdk @kamino-finance/kswap-sdk @kamino-finance/scope-sdk decimal.js
```
## SDK Instantiation
```typescript
import { createSolanaRpc, address } from '@solana/kit';
import { KaminoMarket, PROGRAM_ID, getFlashLoanInstructions, getDepositWithLeverageIxs, getRepayWithCollIxs } from '@kamino-finance/klend-sdk';
const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
const marketPubkey = address('7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF');
const market = await KaminoMarket.load(rpc, marketPubkey, 400, PROGRAM_ID);
```
## SDK Operations
| What to Do | SDK Method | Documentation |
|------------|------------|---------------|
| **Transactions** |
| Open leveraged position | `getDepositWithLeverageIxs({...})` | [Guide](https://docs.kamino.finance/build/developers/multiply/operations/deposit-xstocks) |
| Repay with collateral | `getRepayWithCollIxs({...})` | [Guide](https://docs.kamino.finance/build/developers/multiply/operations/repay-collateral) |
| Flash loan | `getFlashLoanInstructions({...})` | [Guide](https://docs.kamino.finance/build/developers/multiply/flash-loans) |
| **Read Position Data** |
| Get multiply positions | `market.getUserObligationsByTag(ObligationTypeTag.Multiply, userAddress)` | [Guide](https://docs.kamino.finance/build/developers/multiply/data/health-metrics) |
| Get position LTV | `obligation.refreshedStats.loanToValue` | [Guide](https://docs.kamino.finance/build/developers/multiply/data/health-metrics) |
| Get liquidation LTV | `obligation.refreshedStats.liquidationLtv` | [Guide](https://docs.kamino.finance/build/developers/multiply/data/health-metrics) |
| Get net value | `obligation.refreshedStats.netAccountValue` | [Guide](https://docs.kamino.finance/build/developers/multiply/data/health-metrics) |
## Important Notes
- Multiply uses flash loans to open positions atomically in a single transaction
- Leveraged combo operations (`getDepositWithLeverageIxs`, `getRepayWithCollIxs`) are TypeScript SDK only, not available in Rust
- Always monitor LTV to avoid liquidation
- Requires KSwap SDK for swap routing and Scope SDK for oracle price refresh
- Fetch pair LUTs from `cdn.kamino.finance/resources.json` before building transactions
## Complete Guides
- [Flash Loans](https://docs.kamino.finance/build/developers/multiply/flash-loans)
- [Open Position (xStocks)](https://docs.kamino.finance/build/developers/multiply/operations/deposit-xstocks)
- [Repay with Collateral](https://docs.kamino.finance/build/developers/multiply/operations/repay-collateral)
- [Monitor Position Health](https://docs.kamino.finance/build/developers/multiply/data/health-metrics)
references/liquidity.md
Kamino Liquidity strategy operations:# Kamino Liquidity Operations
Deposit into automated concentrated liquidity strategies, withdraw shares, and query strategy/user data.
## Dependencies
```bash
npm install @solana/kit @kamino-finance/kliquidity-sdk decimal.js
```
## SDK Instantiation
```typescript
import { createSolanaRpc, address } from '@solana/kit';
import { Kamino } from '@kamino-finance/kliquidity-sdk';
const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
const kamino = new Kamino('mainnet-beta', rpc);
```
## SDK Operations
| What to Do | SDK Method | Documentation |
|------------|------------|---------------|
| **Transactions** |
| Single-sided deposit | `kamino.singleSidedDepositTokenB(strategy, amount, signer, slippageBps)` | [Guide](https://docs.kamino.finance/build/developers/liquidity/operations/deposit) |
| Two-sided deposit | `kamino.deposit(strategyWithAddress, amountA, amountB, signer)` | [Guide](https://docs.kamino.finance/build/developers/liquidity/operations/deposit) |
| Withdraw all shares | `kamino.withdrawAllShares(strategyWithAddress, signer)` | [Guide](https://docs.kamino.finance/build/developers/liquidity/operations/withdraw) |
| **Read Strategy Data** |
| Get all strategies | `kamino.getAllStrategiesWithFilters(filters)` | [Guide](https://docs.kamino.finance/build/developers/liquidity/data/strategy) |
| Get share price and balances | `kamino.getStrategyShareData(strategyAddress)` | [Guide](https://docs.kamino.finance/build/developers/liquidity/data/strategy) |
| Get share price only | `kamino.getStrategySharePrice(strategyAddress)` | [Guide](https://docs.kamino.finance/build/developers/liquidity/data/strategy) |
| **Read User Data** |
| Get user positions | `kamino.getUserPositions(walletAddress)` | [Guide](https://docs.kamino.finance/build/developers/liquidity/data/user-position) |
## API Operations
| What to Do | API Endpoint | Documentation |
|------------|--------------|---------------|
| **Read Strategy Data** |
| List all strategies | `GET /strategies?status=LIVE` | [API Ref](https://kamino.com/docs/build/api-reference/liquidity/strategy-data/strategies-list) |
| Get strategy metrics | `GET /strategies/{pubkey}/metrics` | [API Ref](https://kamino.com/docs/build/api-reference/liquidity/strategy-data/strategy-metrics) |
| Historical metrics | `GET /v2/strategies/{pubkey}/history` | [API Ref](https://kamino.com/docs/build/api-reference/liquidity/strategy-data/strategy-metrics-history) |
| Total TVL | `GET /strategies/tvl` | [API Ref](https://kamino.com/docs/build/api-reference/liquidity/strategy-data/strategies-tvl) |
| Fees and rewards | `GET /strategies/fees-and-rewards?period=24h` | [API Ref](https://kamino.com/docs/build/api-reference/liquidity/strategy-data/strategies-fees-and-rewards) |
| **Read User Data** |
| User PnL | `GET /v2/strategies/{pubkey}/shareholders/{wallet}/pnl` | [API Ref](https://kamino.com/docs/build/api-reference/liquidity/user-data/user-pnl) |
| User transactions | `GET /v2/shareholders/{wallet}/transactions` | [API Ref](https://kamino.com/docs/build/api-reference/liquidity/user-data/user-transactions) |
## Important Notes
- Single-sided deposit auto-swaps half the input via the SDK's built-in swap router
- Withdrawals return both Token A and Token B proportionally
- Use `POST /luts/find-minimal` for address lookup table resolution on deposits and withdrawals
- Historical data only available via API
## Complete Guide
- [Deposit Guide](https://docs.kamino.finance/build/developers/liquidity/operations/deposit)
- [Withdraw Guide](https://docs.kamino.finance/build/developers/liquidity/operations/withdraw)
references/rewards.md
Kamino Rewards farm operations:# Kamino Rewards Operations
Stake into farms, unstake, harvest rewards, and query farm/user data.
## Dependencies
```bash
npm install @solana/kit @kamino-finance/farms-sdk decimal.js
```
## SDK Instantiation
```typescript
import { createSolanaRpc, address } from '@solana/kit';
import { Farms, FarmState } from '@kamino-finance/farms-sdk';
const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
const farms = new Farms(rpc);
```
## SDK Operations
| What to Do | SDK Method | Documentation |
|------------|------------|---------------|
| **Transactions** |
| Stake tokens | `farms.stakeIx(...)` | [Guide](https://docs.kamino.finance/build/developers/rewards/operations/stake) |
| Unstake tokens | `farms.unstakeIx(...)` | [Guide](https://docs.kamino.finance/build/developers/rewards/operations/unstake) |
| Withdraw unstaked | `farms.withdrawUnstakedDepositIx(...)` | [Guide](https://docs.kamino.finance/build/developers/rewards/operations/withdraw-unstaked) |
| Harvest all rewards | `farms.claimForUserForFarmAllRewardsIx(...)` | [Guide](https://docs.kamino.finance/build/developers/rewards/operations/harvest) |
| **Read Farm Data** |
| Get farm state | `FarmState.fetch(rpc, farmAddress)` | [Guide](https://docs.kamino.finance/build/developers/rewards/data/farm-state) |
| Batch-load farms | `farms.getAllFarmStatesByPubkeys(addresses)` | [Guide](https://docs.kamino.finance/build/developers/rewards/data/farm-state) |
| Find farms by mint | `farms.getFarmsForMint(stakeMint)` | [Guide](https://docs.kamino.finance/build/developers/rewards/data/farm-state) |
| Get incentive APY | `farms.getRewardsAPYForStrategy(strategyAddress)` | [Guide](https://docs.kamino.finance/build/developers/rewards/data/farm-state) |
| **Read User Data** |
| Get all user positions | `farms.getAllFarmsForUser(walletAddress, now)` | [Guide](https://docs.kamino.finance/build/developers/rewards/data/user-position) |
| Get pending rewards | `farms.getUserPendingRewards(userState, farmState, now, oraclePrices)` | [Guide](https://docs.kamino.finance/build/developers/rewards/data/user-position) |
| Get lockup status | `farms.getLockupDurationAndExpiry(farm, user, now)` | [Guide](https://docs.kamino.finance/build/developers/rewards/data/user-position) |
## API Operations
| What to Do | API Endpoint | Documentation |
|------------|--------------|---------------|
| Farm transactions | `GET /farms/{farmPubkey}/transactions` | [API Ref](https://kamino.com/docs/build/api-reference/rewards/farm-transactions) |
| Farm management history | `GET /farms/{farmPubkey}/management-history` | [API Ref](https://kamino.com/docs/build/api-reference/rewards/farm-management-history) |
| User farm transactions | `GET /farms/users/{pubkey}/transactions` | [API Ref](https://kamino.com/docs/build/api-reference/rewards/user-transactions) |
| Oracle prices (for reward valuation) | `GET /oracles/prices` | [API Ref](https://kamino.com/docs/build/api-reference/oracle/oracle-prices) |
## Important Notes
- **Delegated farms** (klend reserve farms, kvault farms) have no stake mint; a delegate authority stakes on behalf of users
- **Non-delegated farms** own their stake token; use `getFarmsForMint` to discover them
- Unstaking triggers a **withdrawal cooldown** before tokens can be withdrawn
- Reward valuation requires oracle prices from `GET /oracles/prices?source=scope`
- Farm operations are SDK-only; there are no transaction-building API endpoints for farms
## Complete Guide
- [Farm State Guide](https://docs.kamino.finance/build/developers/rewards/data/farm-state)
- [User Position Guide](https://docs.kamino.finance/build/developers/rewards/data/user-position)
- [Stake Guide](https://docs.kamino.finance/build/developers/rewards/operations/stake)
- [Harvest Guide](https://docs.kamino.finance/build/developers/rewards/operations/harvest)
references/api.md
Kamino REST API endpoints:# Kamino API Reference
Quick reference for Kamino Finance REST API.
## Base URL
`https://api.kamino.finance`
No API key required for public endpoints.
## Complete Documentation
- Full API Reference: https://kamino.com/docs/build/api-reference
- OpenAPI Specification: https://api-docs.kamino.finance
## Key Endpoints
**Kamino Earn:**
- `POST /ktx/kvault/deposit` - Deposit to vault
- `POST /ktx/kvault/withdraw` - Withdraw from vault
- `GET /kvaults/vaults` - List all vaults
- `GET /kvaults/users/{walletAddress}/positions` - User positions
**Kamino Borrow:**
- `POST /ktx/klend/deposit` - Deposit collateral
- `POST /ktx/klend/borrow` - Borrow assets
- `POST /ktx/klend/repay` - Repay loan
- `POST /ktx/klend/withdraw` - Withdraw collateral
- `GET /v2/kamino-market` - List all markets
- `GET /kamino-market/{marketPubkey}/users/{userPubkey}/obligations` - User obligations
**Kamino Multiply:**
- Multiply operations are SDK-only (no API transaction endpoints)
- Monitor positions via `GET /kamino-market/{marketPubkey}/users/{userPubkey}/obligations`
**Kamino Liquidity:**
- `GET /strategies?status=LIVE` - List all strategies
- `GET /strategies/{pubkey}/metrics` - Strategy metrics
- `GET /v2/strategies/{pubkey}/history` - Historical metrics
- `GET /strategies/tvl` - Total TVL
- `GET /v2/strategies/{pubkey}/shareholders/{wallet}/pnl` - User PnL
- `GET /v2/shareholders/{wallet}/transactions` - User transactions
**Kamino Rewards (Farms):**
- `GET /farms/{farmPubkey}/transactions` - Farm transactions
- `GET /farms/{farmPubkey}/management-history` - Farm management history
- `GET /farms/users/{pubkey}/transactions` - User farm transactions
**Oracle:**
- `GET /oracles/prices` - Oracle prices with timestamp and staleness
- `GET /prices` - Token USD prices by mint
**Utilities:**
- `POST /luts/find-minimal` - Find minimal Address Lookup Tables
## Important Notes
- All transaction endpoints return base64-encoded transactions
- Transactions use Address Lookup Tables and require `decompileTransactionMessageFetchingLookupTables`
- Client must decode, sign with fresh blockhash, and submit transactions
- Farm operations (stake, unstake, harvest) are SDK-only with no API transaction endpoints
Usage Examples
Once installed, your agent can execute commands like:- “Deposit 100 USDC into the SOL-USDC vault”
- “Check my current lending positions on Kamino”
- “Withdraw 50% of my vault shares”
- “Supply 1000 USDC to the lending market”
- “What’s the APY on the SOL-USDC vault?”
- “Deposit into the KMNO/USDC liquidity strategy”
- “What are my pending farm rewards?”
- “Harvest all rewards from my staked positions”
- “Get the current SOL price from the oracle”