Skip to main content
By the end of this tutorial, you will have the following skill files configured for your agent.
FilePurpose
SKILL.mdMain skill instructions: capabilities, quick reference, and workflows
references/setup.mdEnvironment setup: RPC, wallet keypair, OpenClaw config
references/earn.mdEarn vault operations: deposit, withdraw, vault data, user positions
references/borrow.mdBorrow market operations: deposit, borrow, repay, withdraw, market data
references/multiply.mdMultiply operations: leveraged positions, flash loans, position health
references/liquidity.mdLiquidity strategy operations: deposit, withdraw, strategy metrics, user PnL
references/rewards.mdFarm operations: stake, unstake, harvest, farm state, pending rewards
references/api.mdComplete REST API endpoint reference for all products

Prerequisites

  • Node.js 22+
  • Solana wallet with SOL for transaction fees
  • RPC endpoint

Skill Folder Structure

1

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
2

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
3

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)
4

Create or Use Existing Wallet Keypair

Create a new keypair if needed:
solana-keygen new --outfile ~/solana-wallet.json
Or use an existing keypair file.
5

Configure OpenClaw

Add your Solana credentials to ~/.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"
    }
  }
}
Replace /path/to/your/solana-wallet.json with the actual path to your keypair file.
6

Restart OpenClaw Gateway

After updating the configuration:
openclaw gateway restart
7

Verify Setup

Test your RPC connection:
curl -X POST $SOLANA_RPC_URL \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}'

For Other AI Agents

  • Claude: Copy the SKILL.md content into your conversation or attach as a file
  • Cursor: Clone into .cursor/skills/kamino directory
  • 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”
For detailed code examples, see the Kamino documentation links in the reference files.