> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kamino.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Build

> Integrate Kamino for yield or crypto loans

# Build on Kamino

Deposit to earn, lend or borrow programmatically, and use our APIs to read market data and user positions. Available via TypeScript SDK, REST APIs and full working examples.

[ Get Started ](https://docs.kamino.com/build/developers/overview.md)

![Build on Kamino section background illustration](https://mintcdn.com/kamino-3d73a151/lP5bd214efImJ7R7/images/bg-hero.png?fit=max\&auto=format\&n=lP5bd214efImJ7R7\&q=85\&s=438df1f8f5bc6c92ac322c32ca8bc060)

## Integration Guides

> [card] [Earn - Kamino Vaults](https://docs.kamino.com/build/earn.md)
>
> Lending strategies to earn yield
>
> * Vault and user data
> * Current & historical data
> * Deposit & Withdraw txn
> * Deploy vaults

> [card] [Borrow - Kamino Lend](https://docs.kamino.com/build/borrow.md)
>
> Flexible lending and borrowing
>
> * User and PnL data
> * Historical yield & liquidity
> * Deposit & Withdraw txn
> * Borrow & Repay txn

> [card] [API Reference](https://docs.kamino.com/build/api-reference/introduction.md)
>
> APIs for data & transactions
>
> * Current & historical data
> * Build transactions
> * Earn vaults
> * Borrow lend

## Quick Snippets

> [tab] Deposit on Earn
>
> ```typescript theme={"theme":"css-variables"}
> import { createSolanaRpc, address, generateKeyPairSigner } from '@solana/kit';
> import { KaminoManager, KaminoVault, getMedianSlotDurationInMsFromLastEpochs } from '@kamino-finance/klend-sdk';
> import { Decimal } from 'decimal.js';
>
> const signer = await generateKeyPairSigner();
> const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
> const slotDuration = await getMedianSlotDurationInMsFromLastEpochs();
> const manager = new KaminoManager(rpc, slotDuration);
> const vault = new KaminoVault(rpc, address('HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E'), slotDuration);
>
> const vaultState = await vault.getState();
> const { depositIxs } = await vault.depositIxs(
>   signer,
>   new Decimal(100.0),
>   await manager.loadVaultReserves(vaultState),
>   await manager.loadVaultFarmState(vaultState),
>   null
> );
> ```

> [tab] Borrow
>
> ```typescript theme={"theme":"css-variables"}
> import { createSolanaRpc, address, generateKeyPairSigner } from '@solana/kit';
> import {
>   KaminoMarket,
>   KaminoAction,
>   VanillaObligation,
>   PROGRAM_ID,
>   getCurrentLedgerInstant,
>   getMedianSlotDurationInMsFromLastEpochs,
> } from '@kamino-finance/klend-sdk';
> import BN from 'bn.js';
>
> const signer = await generateKeyPairSigner();
> const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
> const market = await KaminoMarket.load(
>   rpc,
>   address('7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF'),
>   await getMedianSlotDurationInMsFromLastEpochs()
> );
> const usdtReserve = market!.getExistingFloatRateReserveByMint(address('Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB'));
>
> const borrowAction = await KaminoAction.buildBorrowTxns({
>   kaminoMarket: market!,
>   amount: new BN(1_000_000),
>   reserveAddress: usdtReserve.address,
>   owner: signer,
>   obligation: new VanillaObligation(PROGRAM_ID),
>   useV2Ixs: true,
>   scopeRefreshConfig: undefined,
>   currentLedgerInstant: await getCurrentLedgerInstant(rpc),
> });
>
> ```

> [tab] Get Earn balances
>
> ```typescript theme={"theme":"css-variables"}
> import { createSolanaRpc, address } from '@solana/kit';
> import { KaminoVault, getCurrentLedgerInstant, getMedianSlotDurationInMsFromLastEpochs } from '@kamino-finance/klend-sdk';
>
> const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
> const vault = new KaminoVault(
>   rpc,
>   address('HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E'),
>   await getMedianSlotDurationInMsFromLastEpochs()
> );
>
> const user = address('EZC9wzVCvihCsCHEMGADYdsRhcpdRYWzSCZAVegSCfqY');
> const shares = await vault.getUserShares(user);
> const rate = await vault.getExchangeRate(await getCurrentLedgerInstant(rpc));
>
> console.log({
>   shares: shares.totalShares.toString(),
>   tokens: shares.totalShares.mul(rate).toString(),
> });
> ```

> [tab] Get Loan health
>
> ```typescript theme={"theme":"css-variables"}
> import { createSolanaRpc, address } from '@solana/kit';
> import { KaminoMarket, VanillaObligation, PROGRAM_ID, getMedianSlotDurationInMsFromLastEpochs } 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, await getMedianSlotDurationInMsFromLastEpochs());
>
> const userAddress = address('EZC9wzVCvihCsCHEMGADYdsRhcpdRYWzSCZAVegSCfqY');
> const obligation = await market!.getObligationByWallet(userAddress, new VanillaObligation(PROGRAM_ID));
>
> console.log('Loan-to-Value:', obligation!.loanToValue().toFixed(4));
>
> ```

> [tab] Get Market data
>
> ```typescript theme={"theme":"css-variables"}
> import { createSolanaRpc, address } from '@solana/kit';
> import { KaminoMarket, getMedianSlotDurationInMsFromLastEpochs } from '@kamino-finance/klend-sdk';
>
> const market = await KaminoMarket.load(
>   createSolanaRpc('https://api.mainnet-beta.solana.com'),
>   address('7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF'),
>   await getMedianSlotDurationInMsFromLastEpochs()
> );
>
> console.log({
>   totalDepositsUsd: market!.getTotalDepositTVL().toFixed(2),
>   totalBorrowsUsd: market!.getTotalBorrowTVL().toFixed(2),
> });
>
> ```

## Earn Tutorials

Quick tutorials for depositing into Earn vaults.

> [card] [Earn via API](https://docs.kamino.com/build/recipes/earn/earn-via-api.md)
>
> Deposit to vaults using REST API

> [card] [Earn via SDK](https://docs.kamino.com/build/recipes/earn/earn-via-sdk.md)
>
> Deposit to vaults using TypeScript SDK

> [card] [Earn with Privy Wallet](https://docs.kamino.com/build/recipes/earn/earn-with-privy.md)
>
> Integrate deposits with Privy embedded wallets

## Deploy an Earn Vault and Get Revenue Share

Any builder can deploy a private or public Earn Vault and get revenue share in just a few lines of code.

```typescript theme={"theme":"css-variables"}
const tokenMint = address('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'); // USDC
const kaminoManager = new KaminoManager(rpc, slotDuration);

const kaminoVaultConfig = new KaminoVaultConfig({
  admin: adminSigner,
  tokenMint: tokenMint,
  tokenMintProgramId: TOKEN_PROGRAM_ADDRESS,
  performanceFeeRatePercentage: new Decimal(10.0),
  managementFeeRatePercentage: new Decimal(1.0),
  name: 'Earn USDC Vault',
  vaultTokenSymbol: 'kUSDC',
  vaultTokenName: 'kUSDC receipt',
});

const { vault: vaultSigner, initVaultIxs: instructions } =
  await kaminoManager.createVaultIxs(kaminoVaultConfig);
```

[Start Earning ](https://docs.kamino.com/build/earn.md)

## Kamino management portal

No code solution to deploy markets, vaults and rewards.

> [card] [Earn Vaults](https://kamino.com/curators/vaults)
>
> Deploy custom earn vault and earn revenue share.

> [card] [Borrow markets](https://kamino.com/curators/markets)
>
> Choose collateral, debt, interest rate and oracle.

> [card] [Incentive campaigns](https://manage.kamino.com)
>
> Incentive campaigns, points and more.

[manage.kamino.com ](https://manage.kamino.com)

## Developer Tools

> [card] [TypeScript SDK](https://github.com/Kamino-Finance/klend-sdk)

> [card] [Earn Code Examples](https://docs.kamino.com/build/earn/index.md)

> [card] [Borrow Code Examples](https://docs.kamino.com/build/borrow/index.md)

> [card] [Smart Contract Repo](https://github.com/Kamino-Finance/klend)

Found a vulnerability? Kamino's [Bug Bounty program](https://docs.kamino.com/security/bug-bounty.md) on Sherlock offers rewards up to 1,000,000 USDC.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.