99914c9](https://github.com/solana-labs/solana-program-library/tree/99914c9fc7246b22ef04416586ab1722c89576de)
- Re-review commit hash [3b48fa0](https://github.com/solana-labs/solana-program-library/tree/3b48fa09d38d1b66ffb4fef186b606f1bc4fdb31)
- Final report [https://solana.com/SolanaQuantstampStakePoolAudit.pdf](https://solana.com/SolanaQuantstampStakePoolAudit.pdf)
- Neodyme
- Review commit hash [0a85a9a](https://github.com/solana-labs/solana-program-library/tree/0a85a9a533795b6338ea144e433893c6c0056210)
- Report [https://solana.com/SolanaNeodymeStakePoolAudit.pdf](https://solana.com/SolanaNeodymeStakePoolAudit.pdf)
- Kudelski
- Review commit hash [3dd6767](https://github.com/solana-labs/solana-program-library/tree/3dd67672974f92d3b648bb50ee74f4747a5f8973)
- Report [https://solana.com/SolanaKudelskiStakePoolAudit.pdf](https://solana.com/SolanaKudelskiStakePoolAudit.pdf)
Upgrade keys for this program are owned by a committee of Solana Staking Ecosystem participants. Leveraging this program provides minimal risk compared to deploying or writing our own stake pool implementation, in case of a network fork or loss of funds.
### Jito Stake Pool Addresses
All networks use the SPL Stake Pool program at `SPoo1Ku8WFXoNDMHPsrGSTSG1Y47rzgn41SLUNakuHy`.
**Mainnet & Testnet:**
- Stake Pool: `Jito4APyf642JPZPx3hGc6WWJ8zPKtRbRs4P815Awbb`
- JitoSOL Mint: `J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn`
**Devnet:**
The Devnet deployment on `SPoo1Ku8WFXoNDMHPsrGSTSG1Y47rzgn41SLUNakuHy` is deployed to an outdated version (v0.6.4) and no longer upgradable. For up-to-date testing, use:
- Program: `DPoo15wWDqpPJJtS2MUZ49aRxqz5ZaaJCJP4z8bLuib`
- Stake Pool: `JitoY5pcAxWX6iyP2QdFwTznGb8A99PRCUCVVxB46WZ`
- JitoSOL Mint: `J1tos8mqbhdGcF3pgj4PCKyVjzWSURcpLZU7pPGHxSYi`
### Interceptor Program
The Jito Interceptor program manages stake account deposits with a time-decaying fee mechanism to protect against toxic flow. For details, see the [Interceptor user guide](https://www.jito.network/docs/jitosol/user-guides/interceptor.md).
- Mainnet: `5TAiuAh3YGDbwjEruC1ZpXTJWdNDS7Ur7VeqNNiHMmGV`
- Testnet & Devnet: `2KVTQFqDBoq1BZhYf6NVUYbrTf7Ff2e3UMWf6jRT5GHV`
---
# MEV & Claims API
> Individual reward claims, validator commissions, and distribution mechanics
# MEV Rewards API Documentation
## Overview
The MEV Rewards API provides access to Maximal Extractable Value (MEV) and priority fee rewards distributed through the Jito network. The API offers two main endpoints for querying rewards data for different participants in the ecosystem.
## What are MEV Rewards?
**MEV (Maximal Extractable Value)** refers to the additional profit that validators can earn by reordering, including, or excluding transactions within the blocks they produce.
## What are Priority Fee Rewards?
**Priority Fees** are additional fees that users pay to prioritize their transactions. These fees are distributed between validators and their stakers similar to MEV rewards.
---
## API Endpoints
### 1. Staker Rewards
**Purpose**: Retrieve individual claimable MEV and priority fee rewards from the tip distribution merkle trees. This includes both:
- Rewards claimable by actual stakers (delegators) who have staked SOL with validators
- Rewards claimable by validators for their own commission portion (when they act as their own claimant)
**Key Insight**: When `stake_authority` and `withdraw_authority` are both the system program (`11111111111111111111111111111111`), and `claimant` equals `validator_vote_account`, these are validator self-rewards for their commission.
**Endpoint**: `/api/v1/staker_rewards`
**Method**: `GET` or `POST`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `stake_authority` | string | No | - | Filter by stake authority public key |
| `validator_vote_account` | string | No | - | Filter by validator vote account public key |
| `epoch` | number | No | - | Filter by specific epoch |
| `page` | number | No | 1 | Page number for pagination |
| `limit` | number | No | 100 | Results per page (max: 10,000) |
| `sort_order` | string | No | "desc" | Sort order: "asc" or "desc" |
#### Response Fields
| Field | Type | Description |
|-------|------|-------------|
| `claimant` | string | The public key that can claim these rewards |
| `stake_authority` | string | The authority that controls the stake account (system program for validator self-rewards) |
| `withdraw_authority` | string | The authority that can withdraw from the stake account (system program for validator self-rewards) |
| `validator_vote_account` | string | The vote account of the validator these rewards came from |
| `claim_status_account` | string | Account tracking the claim status for MEV rewards |
| `priority_fee_claim_status_account` | string | Account tracking the claim status for priority fee rewards (may be null) |
| `epoch` | number | The epoch when these rewards were earned |
| `amount` | number | MEV reward amount in lamports |
| `priority_fee_amount` | number | Priority fee reward amount in lamports (may be null) |
#### Example Request
```bash
curl "https://kobe.mainnet.jito.network/api/v1/staker_rewards?limit=2"
```
#### Example Response
```json
{
"rewards": [
{
"claimant": "DdCNGDpP7qMgoAy6paFzhhak2EeyCZcgjH7ak5u5v28m",
"stake_authority": "11111111111111111111111111111111",
"withdraw_authority": "11111111111111111111111111111111",
"validator_vote_account": "DdCNGDpP7qMgoAy6paFzhhak2EeyCZcgjH7ak5u5v28m",
"epoch": 824,
"amount": 348145740523,
"claim_status_account": "DQ3CwqPPCkRqkDyNvMMhNW5i5HJhQ733XoTez3BWkCBS",
"priority_fee_amount": null,
"priority_fee_claim_status_account": null
},
{
"claimant": "9QU2QSxhb24FUX3Tu2FpczXjpK3VYrvRudywSZaM29mF",
"stake_authority": "11111111111111111111111111111111",
"withdraw_authority": "11111111111111111111111111111111",
"validator_vote_account": "9QU2QSxhb24FUX3Tu2FpczXjpK3VYrvRudywSZaM29mF",
"epoch": 824,
"amount": 242405379963,
"claim_status_account": "2Ykg9QPDqAXkNk4ChTcLKKEaiAp3WVra5Kqeozt1T5EW",
"priority_fee_amount": null,
"priority_fee_claim_status_account": null
}
],
"total_count": 0
}
```
*Note: This example shows validator self-rewards. Delegator leaves look identical except `stake_authority` / `withdraw_authority` will be real stake-account keys and `claimant` will **not** equal the validator vote account.*
---
### 2. Validator Rewards
**Purpose**: Retrieve aggregated MEV and priority fee rewards data per validator. This provides a high-level summary of each validator's performance including total revenue, commission rates, and number of stakers.
**Key Difference**: Unlike staker rewards which show individual claimable amounts, this endpoint aggregates data to show totals per validator.
**Endpoint**: `/api/v1/validator_rewards`
**Method**: `GET` or `POST`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `vote_account` | string | No | - | Filter by validator vote account public key |
| `epoch` | number | No | - | Filter by specific epoch |
| `page` | number | No | 1 | Page number for pagination |
| `limit` | number | No | 100 | Results per page (max: 10,000) |
| `sort_order` | string | No | "desc" | Sort order: "asc" or "desc" |
#### Response Fields
| Field | Type | Description |
|-------|------|-------------|
| `vote_account` | string | The validator's vote account public key |
| `mev_revenue` | number | Total MEV revenue earned in lamports |
| `mev_commission` | number | MEV commission rate in basis points (bps) |
| `num_stakers` | number | Number of stakers delegated to this validator |
| `epoch` | number | The epoch when these rewards were earned |
| `claim_status_account` | string | Account tracking the claim status for MEV rewards |
| `priority_fee_commission` | number | Priority fee commission rate in basis points (bps) |
| `priority_fee_revenue` | number | Total priority fee revenue earned in lamports |
#### Example Request
```bash
curl "https://kobe.mainnet.jito.network/api/v1/validator_rewards?epoch=678&limit=2"
```
#### Example Response
```json
{
"rewards": [
{
"vote_account": "he1iusunGwqrNtafDtLdhsUQDFvo13z9sUa36PauBtk",
"mev_revenue": 934451876628,
"mev_commission": 0,
"priority_fee_revenue": 0,
"priority_fee_commission": null,
"num_stakers": 13222,
"epoch": 678,
"claim_status_account": "2aT6uw4FAnMr32JJLEQf5xDALHFcHTJDBBQKwsZfgsUa"
},
{
"vote_account": "CvSb7wdQAFpHuSpTYTJnX5SYH4hCfQ9VuGnqrKaKwycB",
"mev_revenue": 922545272656,
"mev_commission": 2500,
"priority_fee_revenue": 0,
"priority_fee_commission": null,
"num_stakers": 558,
"epoch": 678,
"claim_status_account": "BJKb86G3Ed3B7Mz1cdsEB49u5d1mjehGpK6fxoKofFZa"
}
],
"total_count": 1083
}
```
---
## Key Differences Between Endpoints
### Staker Rewards vs Validator Rewards
| Aspect | Staker Rewards | Validator Rewards |
|--------|---------------|-------------------|
| **Data Granularity** | Individual claimable amounts | Aggregated totals per validator |
| **What it shows** | Each specific reward claim from merkle trees | Summary statistics per validator |
| **Use case** | Finding specific claims, tracking individual rewards | Validator performance analysis, commission rates |
| **Includes** | Both delegator rewards AND validator self-rewards | Only validator-level aggregates |
| **Commission info** | Not included | Commission rates and revenue splits |
### Understanding Validator Self-Rewards
In the staker rewards endpoint, when you see:
- `claimant` = `validator_vote_account`
- `stake_authority` = `withdraw_authority` = `11111111111111111111111111111111` (system program)
This indicates the validator claiming their own portion of MEV rewards.
### Reward Distribution Flow
1. **MEV Tips Generated**: Searchers submit bundles with tips to validators
2. **Merkle Tree Creation**: Tips are distributed via merkle trees to eligible claimants
3. **Staker Rewards Endpoint**: Shows individual entries from these merkle trees (one per claimant)
4. **Validator Rewards Endpoint**: Shows aggregated view with total revenue and commission data
---
## Important Notes
### Commission Rates
- **MEV Commission**: Percentage of MEV rewards that the validator keeps (rest goes to stakers)
- **Priority Fee Commission**: Percentage of priority fee rewards that the validator keeps
- Rates are expressed in basis points (bps), where 10,000 bps = 100%
### Claim Status Accounts
- **Stakers**: Have separate claim status accounts for MEV and priority fee rewards
- **Validators**: Only have MEV claim status accounts (priority fees flow directly to validators)
### Reward Distribution Flow
1. Searchers submit bundles with tips to validators
2. Validators earn MEV revenue and priority fees from successful bundles
3. Validators keep their commission and distribute the rest to stakers
4. Rewards are tracked per epoch and can be claimed using the respective claim status accounts
### Data Availability
- All amounts are denominated in lamports (1 SOL = 1,000,000,000 lamports)
- Data is available on a per-epoch basis
- Historical data is preserved for all previous epochs
---
## Error Handling
The API returns standard HTTP status codes:
- `200 OK`: Successful request
- `400 Bad Request`: Invalid parameters
- `500 Internal Server Error`: Server error
In case of errors, both endpoints return appropriate error responses with details about what went wrong.
---
## Rate Limiting
The API implements caching with a 60-second lifespan to ensure optimal performance. Identical requests within this timeframe will return cached results.
---
# Validator API
> Network analytics, validator rankings, and stake pool APY metrics
## API Endpoints
### 1. Validators
**Purpose**: Returns validator state for a given epoch (defaults to latest). The current epoch will always report `mev_rewards = 0` because rewards settle at epoch boundary.
**Endpoint**: `/api/v1/validators`
**Method**: `GET or POST`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
| --------- | ------ | -------- |-------- | ------------------------------ |
| `epoch` | number | No | - | Filter by specific epoch |
#### Response Fields
| Field | Type | Description |
| ------------------------------ |-------- | ------------------------------------------------------------- |
| `vote_account` | string | Validator vote account public key |
| `mev_commission_bps` | number | Validator’s MEV commission in basis-points |
| `mev_rewards` | number | Post-commission MEV lamports paid to validator + stakers |
| `priority_fee_commission_bps` | number | Priority-fee commission (bps) |
| `priority_fee_rewards` | number | Post-commission priority-fee lamports |
| `running_jito` | boolean | `true` if validator is running Jito-Solana |
| `running_bam` | boolean | `true` if validator is running BAM |
| `active_stake` | number | Lamports actively staked with this validator |
| `jito_directed_stake_target` | boolean | Whether or not this is a jito directed stake target validator |
| `jito_directed_stake_lamports` | number | Total stake amount in lamports for Jito directed stake |
#### Example Request
```bash
curl -X POST \
https://kobe.mainnet.jito.network/api/v1/validators \
-H 'Content-Type: application/json' \
-d '{ "epoch":600 }'
```
#### Example Response
```json
{
"validators": [
{
"vote_account": "GdRKUZKdiXMEATjddQW6q4W8bPgXRBYJKayfeqdQcEPa",
"mev_commission_bps": 10000,
"mev_rewards": 4438669326,
"priority_fee_commission_bps": 5000,
"priority_fee_rewards": 31269273876,
"active_stake": 57968373482697,
"running_jito": true,
"running_bam": false,
"jito_directed_stake_target": null,
"jito_directed_stake_lamports": null,
}
// …
]
}
```
---
### 2. JitoSOL Validators
**Purpose**: Returns JitoSOL stake pool validators for a given epoch (defaults to latest). Only includes validators that are actively part of the JitoSOL validator set.
**Endpoint**: `/api/v1/jitosol_validators`
**Method**: `GET | POST`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
| --------- | ------ | -------- |-------- | ------------------------------ |
| `epoch` | number | No | - | Filter by specific epoch |
#### Response Fields
| Field | Type | Description |
| ----------------------------- |-------- | ----------------------------------------------------------------------------- |
| `vote_account` | string | Validator vote account public key |
| `mev_commission_bps` | number | Validator’s MEV commission in basis-points |
| `mev_rewards` | number | Post-commission MEV lamports paid to validator + stakers |
| `priority_fee_commission_bps` | number | Priority-fee commission (bps) |
| `priority_fee_rewards` | number | Post-commission priority-fee lamports |
| `running_jito` | boolean | `true` if validator is running Jito-Solana |
| `running_bam` | boolean | `true` if validator is running BAM |
| `active_stake` | number | Lamports actively staked with this validator |
| `jito_sol_active_lamports` | number | Active stake lamports delegated to this validator from the JitoSOL stake-pool |
#### Example Request
```bash
curl -X POST \
https://kobe.mainnet.jito.network/api/v1/jitosol_validators \
-H 'Content-Type: application/json' \
-d '{ "epoch":600 }'
```
#### Example Response
```json
{
"validators": [
{
"vote_account": "CviQXDMPZPVAZ5qgVGN2gSBSD9GqqwRt7VZidoHMpArr",
"mev_commission_bps": 10000,
"mev_rewards": 3204800942,
"priority_fee_commission_bps": null,
"priority_fee_rewards": null,
"running_jito": true,
"running_bam": false,
"active_stake": 47753222427851,
"jito_sol_active_lamports": 3282880
},
// …
]
}
```
---
### 3. Validator Historical Reward
**Purpose**: Returns historical reward data for a single validator, sorted by epoch (desc).
**Endpoint**: `/api/v1/validators/{vote_account}`
**Method**: `GET`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
| --------- | ------ | -------- |-------- | ------------------------------ |
#### Response Fields
| Field | Type | Description |
| ----------------------------- |-------- | -------------------------------------------------------- |
| `epoch` | number | The epoch when these rewards were earned |
| `mev_commission_bps` | number | Validator’s MEV commission in basis-points |
| `mev_rewards` | number | Post-commission MEV lamports paid to validator + stakers |
| `priority_fee_commission_bps` | number | Priority-fee commission (bps) |
| `priority_fee_rewards` | number | Post-commission priority-fee lamports |
#### Example Request
```bash
curl https://kobe.mainnet.jito.network/api/v1/validators/GdRKUZKdiXMEATjddQW6q4W8bPgXRBYJKayfeqdQcEPa
```
#### Example Response
```json
[
{
"epoch": 608,
"mev_commission_bps": 10000,
"mev_rewards": 59355050,
"priority_fee_commission_bps": 5000,
"priority_fee_rewards": 43328291
}
// …
]
```
---
### 4. Jito Stake Over Time
**Purpose**: Returns a map of epoch → percentage of **all Solana stake** that is delegated to Jito-running validators.
**Endpoint**: `/api/v1/jito_stake_over_time`
**Method**: `GET | POST`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
| --------- | ------ | -------- |-------- | ------------------------------ |
#### Response Fields
| Field | Type | Description |
| ----------------------- |-------- | --------------------------------------------------------------------------------------------------------------------- |
| `stake_ratio_over_time` | object | Map of epoch → decimal ratio representing the percentage of total Solana stake delegated to Jito validators (0.0-1.0) |
#### Example Request
```bash
curl https://kobe.mainnet.jito.network/api/v1/jito_stake_over_time
```
#### Example Response
```json
{
"stake_ratio_over_time": {
"484": 0.27771625202212147,
"485": 0.27866636980357196
}
}
```
---
### 5. MEV Rewards
**Purpose**: Network-level statistics for a single epoch.
**Endpoint**: `/api/v1/mev_rewards`
**Method**: `GET | POST`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
| --------- | ------ | -------- |-------- | ------------------------------ |
| `epoch` | number | No | - | Filter by specific epoch |
#### Response Fields
| Field | Type | Description |
| ---------------------------- |-------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `epoch` | number | The epoch number for which MEV rewards data is provided |
| `total_network_mev_lamports` | number | Total MEV rewards generated across the entire Solana network during this epoch, measured in lamports |
| `jito_stake_weight_lamports` | number | Total amount of stake (in lamports) delegated to validators running Jito software during this epoch |
| `mev_reward_per_lamport` | number | MEV rewards earned per lamport of stake for Jito validators in this epoch (calculated as total_network_mev_lamports / jito_stake_weight_lamports) |
#### Example Request
```bash
curl -X POST https://kobe.mainnet.jito.network/api/v1/mev_rewards -H 'Content-Type: application/json' -d '{ "epoch": 600 }'
```
#### Example Response
```json
{
"epoch": 600,
"total_network_mev_lamports": 19630470685094,
"jito_stake_weight_lamports": 273972433518536409,
"mev_reward_per_lamport": 0.0000716512622565213
}
```
---
### 6. Daily MEV Rewards
**Purpose**: Aggregated MEV tips per calendar day.
**Endpoint**: `/api/v1/daily_mev_rewards`
**Method**: `GET`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
| --------- | ------ | -------- |-------- | ------------------------------ |
#### Response Fields
| Field | Type | Description |
| ---------------- |-------- | ---------------------------------------------------------------------------------------------------------- |
| `day` | string | The calendar date in UTC format (YYYY-MM-DD HH:MM:SS.sss UTC) for which the MEV rewards data is aggregated |
| `count_mev_tips` | number | Total number of individual MEV tip transactions that occurred on this day |
| `jito_tips` | number | Total amount of MEV tips paid to Jito (in SOL) on this day |
| `tippers` | number | Total number of unique accounts that submitted MEV tips on this day |
| `validator_tips` | number | Total amount of MEV tips distributed to validators (in SOL) on this day |
#### Example Request
```bash
curl https://kobe.mainnet.jito.network/api/v1/daily_mev_rewards
```
#### Example Response
```json
[
{
"day": "2025-07-29 00:00:00.000 UTC",
"count_mev_tips": 23899823,
"jito_tips": 385.815098392558,
"tippers": 898619,
"validator_tips": 7330.48686946401
},
{
"day": "2025-07-30 00:00:00.000 UTC",
"count_mev_tips": 16157401,
"jito_tips": 232.975239402936,
"tippers": 581839,
"validator_tips": 4426.5295486581
}
]
```
---
### 7. Stake Pool Stats
**Purpose**: Stake pool analytics including TVL, APY, validator count, supply metrics, and aggregated MEV rewards over time.
**Endpoint**: `/api/v1/stake_pool_stats`
**Method**: `GET` or `POST`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default. | Description |
| -------------------- | ------ | -------- |------------- | ----------------------------------------------------------------- |
| `bucket_type` | string | No | "Daily". | Time bucket aggregation type. Currently only "Daily" is supported |
| `range_filter` | object | No | Last 7 days | Date range filter with `start` and `end` DateTime fields |
| `range_filter.start` | string | No | 7 days ago | Start date in ISO 8601 format (e.g., "2025-08-15T22:55:06Z") |
| `range_filter.end` | string | No | Now. | End date in ISO 8601 format (e.g., "2025-08-22T22:55:06Z") |
| `sort_by` | object | No | Default sort | Sort configuration object |
| `sort_by.field` | string | No | "BlockTime" | Sort field. Currently only "BlockTime" is supported |
| `sort_by.order` | string | No. | "Asc" | Sort order: "Asc" or "Desc" |
#### Response Fields
| Field | Type | Description |
| ------------------------ |------- | ---------------------------------------------------------------------- |
| `aggregated_mev_rewards` | number | Total aggregated MEV rewards across all time periods (in lamports) |
| `mev_rewards` | array | Time series data of MEV rewards with integer data points |
| `tvl` | array | Time series data of Total Value Locked in the stake pool (in lamports) |
| `apy` | array | Time series data of Annual Percentage Yield as decimal values |
| `num_validators` | array | Time series data of validator count in the stake pool |
| `supply` | array | Time series data of JitoSOL token supply as decimal values |
#### Example Request
```bash
curl -X POST \
https://kobe.mainnet.jito.network/api/v1/stake_pool_stats \
-H 'Content-Type: application/json' \
-d '{
"bucket_type": "Daily",
"range_filter": {
"start": "2025-08-15T00:00:00Z",
"end": "2025-08-16T00:00:00Z"
},
"sort_by": {
"field": "BlockTime",
"order": "Asc"
}
}'
```
#### Example Response
```json
{
"aggregated_mev_rewards": 17917503591959,
"mev_rewards": [
{
"data": 841552703382,
"date": "2025-08-15T22:55:06Z"
},
{
"data": 5244986563088,
"date": "2025-08-16T23:20:47Z"
}
],
"tvl": [
{
"data": 15209213875510266,
"date": "2025-08-15T22:55:06Z"
},
{
"data": 15211604884230567,
"date": "2025-08-16T23:20:47Z"
}
],
"apy": [
{
"data": 0.07184861225308525,
"date": "2025-08-15T22:55:06Z"
},
{
"data": 0.07184861239211937,
"date": "2025-08-16T23:20:47Z"
}
],
"num_validators": [
{
"data": 1040,
"date": "2025-08-15T22:55:06Z"
},
{
"data": 1040,
"date": "2025-08-16T23:20:47Z"
}
],
"supply": [
{
"data": 12420237.336776868,
"date": "2025-08-15T22:55:06Z"
},
{
"data": 12422189.896316852,
"date": "2025-08-16T23:20:47Z"
}
]
}
```
---
### 8. MEV Commission Average Overtime
**Purpose**: Returns stake-weighted average MEV commission rates by epoch for all Jito-running validators.
**Endpoint**: `/api/v1/mev_commission_average_over_time`
**Method**: `GET`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Response Fields
| Field | Type | Description |
| ---------------------------------- |------- | ------------------------------------------------------------------- |
| `average_mev_commission_over_time` | object | Map of epoch numbers to stake-weighted average MEV commission rates |
#### Calculation Method
The average MEV commission is calculated as a **stake-weighted average**:
1. **Filter**: Only includes validators running Jito (`running_jito: true`)
2. **Weight by Stake**: Each validator's commission rate is weighted by their active stake amount
3. **Aggregate by Epoch**: Results are grouped and averaged per epoch
4. **Formula**: `(Sum of [MEV Commission × Active Stake]) / (Sum of Active Stake)`
This provides a more accurate representation of the effective commission rate experienced by stakers, as validators with more stake have proportionally more influence on the average.
#### Example Request
```bash
curl https://kobe.mainnet.jito.network/api/v1/mev_commission_average_over_time
```
#### Example Response
```json
{
"aggregated_mev_rewards": 841552703382,
"mev_rewards": [
{
"data": 841552703382,
"date": "2025-08-15T22:55:06Z"
}
],
"tvl": [
{
"data": 15209213875510266,
"date": "2025-08-15T22:55:06Z"
}
],
"apy": [
{
"data": 0.07184861225308525,
"date": "2025-08-15T22:55:06Z"
}
],
"num_validators": [
{
"data": 1040,
"date": "2025-08-15T22:55:06Z"
}
],
"supply": [
{
"data": 12420237.336776868,
"date": "2025-08-15T22:55:06Z"
}
]
}
```
---
### 9. JitoSOL/SOL Ratio
**Purpose**: Retrieve the historical exchange ratio between JitoSOL and SOL over time.
**Endpoint**: `/api/v1/jitosol_sol_ratio`
**Method**: `GET` or `POST`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
|--------------------- | ------ | -------- | ----------- |------------------------------------------------------------- |
| `range_filter` | object | No | Last 7 days | Date range filter with `start` and `end` DateTime fields |
| `range_filter.start` | string | No | 7 days ago | Start date in ISO 8601 format (e.g., "2025-08-15T00:00:00Z") |
| `range_filter.end` | string | No | Now | End date in ISO 8601 format (e.g., "2025-08-22T00:00:00Z") |
#### Response Fields
| Field | Type | Description |
| -------- | ------ | -------------------------------------------------- |
| `ratios` | array | Time series data of JitoSOL to SOL exchange ratios |
#### Example Request
```bash
curl -X POST \
https://kobe.mainnet.jito.network/api/v1/jitosol_sol_ratio \
-H 'Content-Type: application/json' \
-d '{
"range_filter": {
"start": "2025-08-15T00:00:00Z",
"end": "2025-08-16T00:00:00Z"
}
}'
```
#### Example Response
```json
{
"ratios": [
{
"data": 1.224550985871672,
"date": "2025-08-15T22:55:06Z"
}
]
}
```
---
### 10. Preferred Withdraw Validator List
**Purpose**: Retrieve a list of validators with lower rank (borderline of delegation) that are optimal candidates for withdrawal operations. These validators have sufficient withdrawable stake while being the least impactful to remove stake from. Withdrawing from these validators minimizes rebalancing needs and helps maintain optimal APY for the stake pool.
**Endpoint**: `/api/v1/preferred_withdraw_validator_list`
**Method**: `GET`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `min_stake_threshold` | number | No | 10000 | **Denominated in SOL.** Minimum stake threshold. Only validators with withdrawable stake above this threshold will be included |
| `limit` | number | No | 50 | Number of validators to return in the response |
| `randomized` | boolean | No | false | Whether to randomize the order of validators. Use this when you want to minimize the chance of unstaking from the same validators as other clients. Useful in multisig or durable nonce scenarios where transactions are sitting for extended periods of time |
**Important:** Query parameters are denominated in SOL for convenience.
#### Response Fields
| Field | Type | Description |
|-------|------|-------------|
| `rank` | number | The position of the validator in the ranked list (1-indexed) |
| `vote_account` | string | The validator's vote account public key |
| `withdrawable_lamports` | number | **Denominated in lamports.** Amount of lamports available for withdrawal from this validator (1 SOL = 1,000,000,000 lamports) |
| `stake_account` | string | The validator's stake account address from the stake pool |
**Important:** Response amounts are denominated in lamports, not SOL.
#### Example Request
```bash
# Get default list (50 lower-ranked validators optimal for withdrawal)
curl "https://kobe.mainnet.jito.network/api/v1/preferred_withdraw_validator_list"
# Get top 20 lower-ranked validators with at least 5,000 SOL withdrawable stake
curl "https://kobe.mainnet.jito.network/api/v1/preferred_withdraw_validator_list?min_stake_threshold=5000&limit=20"
# Get randomized list for multisig scenarios to avoid transaction conflicts
curl "https://kobe.mainnet.jito.network/api/v1/preferred_withdraw_validator_list?limit=30&randomized=true"
```
#### Example Response
```json
[
{
"rank": 1,
"vote_account": "J2nUHEAgZFRyuJbFjdqPrAa9gyWDuc7hErtDQHPhsYRp",
"withdrawable_lamports": 95000000000000,
"stake_account": "6USTT5jBUBRgZMGRkG7QX2S5MjQ8wVwSYMRfRRhJMqDj"
},
{
"rank": 2,
"vote_account": "Certusm1sa411sMpV9FPqU5dXAYhmmhygvxJ23S6hJ24",
"withdrawable_lamports": 87500000000000,
"stake_account": "3kxSvADSt7N8LKNRVK5DW7xNVQRszK3VUvkUPMmJPcWo"
},
{
"rank": 3,
"vote_account": "DfXygSm4jCyNCybVYYK6DwvWqjKee8pbDmJGcLWNDXjh",
"withdrawable_lamports": 73200000000000,
"stake_account": "8ZfVWmhFZHCRvU7uuS9MbVbxDtB1uH7kdUPnnPFKoQRi"
},
{
"rank": 4,
"vote_account": "HxRrsnbc6K8CdEo3LCTrSUkFaDDxv9BdJsTDzBKnUVWH",
"withdrawable_lamports": 65000000000000,
"stake_account": "AyPMvRePEuQuaBQn2JHXWVkGmUGQpCfgKQCBPBxyqbia"
},
{
"rank": 5,
"vote_account": "EARNynHRWg6GfwJBmRAYa9C1zDa6Vq7AWTLS2hZaL9a",
"withdrawable_lamports": 52000000000000,
"stake_account": "FJemUNBmezZ5FFKpQQFvag4g9x4TjBKN7tCnQPJzUXQ7"
}
]
```
---
### 11. BAM Epoch Metrics
**Purpose**: Returns BAM delegation metrics for a given epoch.
**Endpoint**: `/api/v1/bam_delegation_metrics`
**Method**: `GET`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
| --------- | ------ | -------- |-------- | ------------------------------ |
| `epoch` | number | Yes | - | Filter by specific epoch |
#### Response Fields
| Field | Type | Description |
| ------------------------------- |-------- | ----------------------------------------------------------------------------- |
| `allocation_bps` | number | Allocation tier based on JIP-28 in BPS |
| `available_bam_delegation_stake`| number | Total JitoSOL stake available for BAM delegation in lamports |
| `bam_stake` | number | Total stake amount of BAM eligible validators in lamports |
| `eligible_bam_validator_count` | number | Eligible BAM validator count |
| `epoch` | number | Epoch number |
| `jitosol_stake` | number | Total Jitosol stake amount |
| `timestamp` | number | Timestamp |
| `total_stake` | number | Total stake amount of all validators in lamports |
#### Example Request
```bash
curl -X GET \
https://kobe.mainnet.jito.network/api/v1/bam_epoch_metrics?epoch=895
```
#### Example Response
```json
{
"bam_epoch_metrics": {
"allocation_bps": 3000,
"available_bam_delegation_stake": 4206990925405254,
"bam_stake": 14856675235224159,
"eligible_bam_validator_count": 49,
"epoch": 895,
"jitosol_stake": 14023303084684180,
"timestamp": 1765846141,
"total_stake": 417067545601353217
}
}
```
---
### 12. BAM Validators
**Purpose**: Returns a list of BAM validators for a given epoch, including their eligibility status and stake-related metrics.
**Endpoint**: `/api/v1/bam_validators`
**Method**: `GET`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
| --------- | ------ | -------- |-------- | ------------------------------ |
| `epoch` | number | Yes | - | Filter by specific epoch |
#### Response Fields
| Field | Type | Description |
| ------------------------------- |-------- | ----------------------------------------------------------------------------- |
| `active_stake` | number | Active stake in lamports |
| `epoch` | number | Epoch number |
| `identity_account` | string | Identity account public key |
| `is_eligible` | boolean | Is eligible validator for BAM delegation |
| `ineligibility_reason` | string | The reason of ineligibility |
| `timestamp` | number | Timestamp |
| `vote_account` | string | Vote account public key |
#### Example Request
```bash
curl -X GET \
https://kobe.mainnet.jito.network/api/v1/bam_validators?epoch=895
```
#### Example Response
```json
{
"bam_validators": [
{
"active_stake": 550051344710010,
"epoch": 895,
"identity_account": "6XKqyUVUcpe3CNucjF6gk5zonJDqNGvob6kaTy4Ps1U",
"is_eligible": true,
"ineligibility_reason": null,
"timestamp": 1765846137,
"vote_account": "SKRuTecmFDZHjs2DxRTJNEK7m7hunKGTWJiaZ3tMVVA"
},
...
]
}
```
---
### 13. BAM Delegation Blacklist
**Purpose**: Returns a list of vote accounts that are blacklisted from BAM delegation.
**Endpoint**: `/api/v1/bam_delegation_blacklist`
**Method**: `GET`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
| --------- | ------ | -------- |-------- | ------------------------------ |
| N/A | N/A | N/A | N/A | No query parameters. |
#### Response Fields
| Field | Type | Description |
| ------------------------------- |-------- | ------------------------- |
| `added_epoch` | number | Epoch number |
| `vote_account` | string | Vote account public key |
#### Example Request
```bash
curl -X GET \
https://kobe.mainnet.jito.network/api/v1/bam_delegation_blacklist
```
#### Example Response
```json
[
{
"vote_account": "12345......",
"added_epoch": 892
}
]
```
---
### 14. BAM Validator Scoring
**Purpose**: Returns the scoring components of a specific validator
**Endpoint**: `/api/v1/bam_validator_score`
**Method**: `GET`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
| -------------- | ------- | -------- |-------- | ------------------------------- |
| `epoch` | number | Yes | - | Filter by specific epoch |
| `vote_account` | string | Yes | - | Filter by specific vote account |
#### Response Fields
| Field | Type | Description |
| -------------- |-------- | ------------------------- |
| `vote_account` | string | Vote account public key |
| `score` | number | Score number |
#### Example Request
```bash
curl -X GET \
https://kobe.mainnet.jito.network/api/v1/bam_validator_score?epoch=902&vote_account=48oxpSHQkM4sdXUY9NQ8KnEtebzZbyk8uUT7JRdVQNuf
```
#### Example Response
```json
{
"vote_account": "48oxpSHQkM4sdXUY9NQ8KnEtebzZbyk8uUT7JRdVQNuf",
"score": 1
}
```
---
## Frontend APY Calculation
The Jito frontend calculates the current APY displayed to users by fetching historical stake pool data and using the most recent available data point.
### Jito Frontend Implementation
Here's how the Jito frontend retrieves and processes APY data:
```javascript
export default async function handler(req, res) {
const apiUrl = 'https://kobe.mainnet.jito.network/api/v1/stake_pool_stats'
// Set up start and end dates
const start = new Date('2022-10-31T00:00:00Z') // Launch date
const end = new Date()
const statsRequest = {
bucket_type: 'Daily',
range_filter: {
start: start.toISOString(),
end: end.toISOString(),
},
sort_by: {
field: 'BlockTime',
order: 'Asc',
},
}
try {
const response = await fetch(apiUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(statsRequest),
})
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`)
}
const data = await response.json()
if (data) {
const {
aggregated_mev_rewards: aggregatedMevRewards,
apy,
mev_rewards: mevRewards,
num_validators: numValidators,
supply,
tvl,
} = data
const camelCaseData = {
getStakePoolStats: {
aggregatedMevRewards,
apy,
mevRewards,
numValidators,
supply,
tvl,
},
}
res.status(200).json(camelCaseData)
} else {
res.status(200).json(data)
}
} catch (error) {
console.error('Error fetching data:', error)
res.status(500).json({ message: `Error fetching data: ${error.message}` })
}
}
```
### APY Selection Logic
To display the current APY on the frontend:
1. **Fetch Complete History**: The API call retrieves all historical data from JitoSOL's launch date (October 31, 2022) to the present
2. **Select Most Recent**: The frontend uses the most recent data point from the `apy` array
3. **Display Current Rate**: This most recent APY value represents the current annualized yield rate shown to users
The `apy` field in the response contains time-series data where each entry includes:
- `data`: The APY as a decimal value (e.g., 0.07184861225308525 = ~7.18%)
- `date`: The timestamp when this APY was calculated
Note that the stake_pool_stats endpoint returns smoothed values when requesting for periods longer than 10 epochs. Hence, the APY data we show on our frontend is smoothed.
---
## Notes & Caveats
* The **current epoch** always reports `mev_rewards = 0` because rewards are finalized at epoch-close.
* All lamport values are **post-commission** – delegators receive their share via separate claim paths documented in the *MEV Rewards API* page.
* Pagination caps: `limit ≤ 10 000` for list endpoints.
* All endpoints are cached for at least 60 s; identical requests within this window return cached data.
---
# Steward API
> Steward program event monitoring
## API Endpoints
### 1. Steward Events
**Purpose**: Retrieves Jito Steward program events with filtering and pagination support. Returns detailed information about stakenet decisions and operations.
**Endpoint**: `/api/v1/steward_events`
**Method**: `GET or POST`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
| -------------- | ------ | -------- |-------- | ------------------------------------------------------------- |
| `event_type` | string | No | - | Filter by specific steward event type (see Event Types below) |
| `vote_account` | string | No | - | Filter by validator vote account public key |
| `epoch` | number | No | - | Filter by specific epoch number |
| `limit` | number | No | 100 | Number of results to return (used with skip for pagination) |
| `skip` | number | No | 0 | Number of results to skip for pagination |
#### Event Types
| Event Type. | Versions Supported | Description |
| -------------------------- | ------------------ | ------------------------------------------------------ |
| `ScoreComponents` | V1, V2, V3 | Validator scoring calculations and performance metrics |
| `InstantUnstakeComponents` | V1, V2, V3 | Emergency unstaking events for problematic validators |
| `RebalanceEvent` | V1 | Stake rebalancing operations across validators |
| `DecreaseComponents` | V1 | Stake reduction events for underperforming validators |
| `StateTransition` | V1 | Steward operational state changes |
| `AutoAddValidatorEvent` | V1 | Automatic validator additions to the stake pool |
| `AutoRemoveValidatorEvent` | V1 | Automatic validator removals from the stake pool |
| `EpochMaintenanceEvent` | V1 | Routine epoch-boundary maintenance operations |
#### Special Event Type Handling
- **ScoreComponents**: Queries all versions (ScoreComponents, ScoreComponentsV2, ScoreComponentsV3)
- **InstantUnstakeComponents**: Queries all versions (InstantUnstakeComponents, InstantUnstakeComponentsV2, InstantUnstakeComponentsV3)
#### Response Fields
| Field | Type | Description |
| -------- |-------- | ------------------------------ |
| `events` | array | Array of steward event objects |
#### Steward Event Object Fields
| Field | Type | Description |
| -------------- |------------ | ----------------------------------------------------------------- |
| `signature` | string | Transaction signature where the event occurred |
| `event_type` | string | Type of steward event (e.g., "AutoAddValidatorEvent") |
| `vote_account` | string | Validator vote account public key associated with the event |
| `timestamp` | string | ISO 8601 timestamp when the event occurred |
| `epoch` | number | Epoch number when the event took place |
| `slot` | number | Blockchain slot number where the event occurred |
| `data` | object | Event-specific data (varies by event type) |
| `tx_error` | string/null | Transaction error message if the event failed, null if successful |
#### Sorting and Pagination
- **Default Sort**: Events are sorted by slot number in descending order (newest first)
- **Pagination**: Use `limit` and `skip` parameters for pagination
- **Total Count**: Response includes total count for pagination calculation
#### Example Request
```bash
curl -X POST \
https://kobe.mainnet.jito.network/api/v1/steward_events?event_type=ScoreComponents | jq
```
#### Example Response
```json
{
"events": [
{
"signature": "48TciVTNG2kVVE8CnCbAQjRG7qCk7HMyunNRZR1zT8gYNWRvg2kPPjSDuwwrHnTjvXGAqQ6WJY18DQybQPBGw2Uc",
"event_type": "AutoAddValidatorEvent",
"vote_account": "Csp2hDVRX4cRitFEswJJcoH9ju4rcPUSsqU9pkh5JBQU",
"timestamp": "2025-08-21T18:42:42Z",
"data": {
"validator_list_index": 1039
},
"epoch": 837,
"tx_error": null
},
// …
]
}
```
---
# Staking Integration
> Code examples for integrating JitoSOL staking functionality
## Developer Integration Guide
This guide shows how to integrate JitoSOL staking and unstaking functionality using both assisted (SPL stake pool library) and manual transaction building methods.
## Installation
```bash
npm install @solana/spl-stake-pool
npm install @solana/web3.js
npm install @solana/spl-token
npm install @jito-foundation/stake-deposit-interceptor-sdk
```
## Basic Setup
```typescript
import * as solanaStakePool from '@solana/spl-stake-pool'
import { Connection, PublicKey, LAMPORTS_PER_SOL } from '@solana/web3.js'
// JitoSOL stake pool address (Mainnet)
const JITO_STAKE_POOL_ADDRESS = new PublicKey('Jito4APyf642JPZPx3hGc6WWJ8zPKtRbRs4P815Awbb')
// JitoSOL mint address
const JITO_MINT_ADDRESS = new PublicKey('J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn')
const connection = new Connection('YOUR_RPC_ENDPOINT')
```
## Assisted Staking (Recommended)
### Staking SOL for JitoSOL
```typescript
async function stakeSOL(amount: number, userWallet: any) {
// Convert SOL to lamports
const lamports = Math.floor(amount * LAMPORTS_PER_SOL)
// Get deposit instructions from SPL stake pool library
const { instructions, signers } = await solanaStakePool.depositSol(
connection,
JITO_STAKE_POOL_ADDRESS,
userWallet.publicKey,
lamports
)
// Create and send transaction
const transaction = new Transaction()
transaction.add(...instructions)
const { blockhash } = await connection.getLatestBlockhash('finalized')
transaction.recentBlockhash = blockhash
transaction.feePayer = userWallet.publicKey
// Sign with any additional signers
if (signers.length > 0) {
transaction.sign(...signers)
}
const signedTransaction = await userWallet.signTransaction(transaction)
const signature = await connection.sendRawTransaction(signedTransaction.serialize())
return signature
}
```
### Unstaking JitoSOL for SOL
```typescript
async function unstakeJitoSOL(amount: number, userWallet: any, useReserve: boolean = false) {
// Get withdraw instructions from SPL stake pool library
const { instructions, signers } = await solanaStakePool.withdrawStake(
connection,
JITO_STAKE_POOL_ADDRESS,
userWallet.publicKey,
amount, // Amount in JitoSOL tokens
useReserve // false = withdraw to stake account, true = instant SOL via reserve
)
const transaction = new Transaction()
transaction.add(...instructions)
const { blockhash } = await connection.getLatestBlockhash('finalized')
transaction.recentBlockhash = blockhash
transaction.feePayer = userWallet.publicKey
if (signers.length > 0) {
transaction.sign(...signers)
}
const signedTransaction = await userWallet.signTransaction(transaction)
const signature = await connection.sendRawTransaction(signedTransaction.serialize())
return signature
}
```
### Depositing Stake Accounts with Interceptor
When depositing existing stake accounts (as opposed to native SOL), the Jito Interceptor program handles the transaction. The interceptor implements a 10-hour cooldown period with a time-decaying fee to protect against toxic flow. For more details, see the [Interceptor user guide](https://www.jito.network/docs/jitosol/user-guides/interceptor.md).
```typescript
import { depositStake } from '@jito-foundation/stake-deposit-interceptor-sdk'
async function depositStakeAccount(
stakeAccount: PublicKey,
validatorVote: PublicKey,
userWallet: any
) {
// Get deposit instructions from interceptor SDK
const { instructions, signers } = await depositStake(
connection,
userWallet.publicKey, // payer for deposit receipt rent
JITO_STAKE_POOL_ADDRESS, // stake pool to deposit into
userWallet.publicKey, // authorized withdrawer/staker
validatorVote, // validator vote account for the stake
stakeAccount, // stake account to deposit
null // poolTokenReceiverAccount (optional, will create associated token account if not provided)
)
// Create and send transaction
const transaction = new Transaction()
transaction.add(...instructions)
const { blockhash } = await connection.getLatestBlockhash('finalized')
transaction.recentBlockhash = blockhash
transaction.feePayer = userWallet.publicKey
// Sign with any additional signers
if (signers.length > 0) {
transaction.sign(...signers)
}
const signedTransaction = await userWallet.signTransaction(transaction)
const signature = await connection.sendRawTransaction(signedTransaction.serialize())
return signature
}
```
**Note:** When depositing stake accounts, JitoSOL tokens are minted and held by the interceptor program's vault, not immediately sent to your wallet. A deposit receipt is created that will be auto-claimed after the 10-hour cooldown (with no fees) or and can be claimed earlier with a time-decaying fee. For SDK documentation and claiming examples, see the [@jito-foundation/stake-deposit-interceptor-sdk](https://github.com/jito-foundation/stake-deposit-interceptor/tree/master/package).
## Getting Pool Information
```typescript
async function getPoolInfo() {
const stakePoolAccount = await solanaStakePool.getStakePoolAccount(
connection,
JITO_STAKE_POOL_ADDRESS
)
if (!stakePoolAccount?.account?.data) {
throw new Error('Failed to fetch stake pool account data')
}
const stakePoolData = stakePoolAccount.account.data
// Calculate conversion rate
const solJitoConversion = !stakePoolData.poolTokenSupply.isZero()
? Number(stakePoolData.totalLamports.toString()) / Number(stakePoolData.poolTokenSupply.toString())
: 0
return {
totalLamports: stakePoolData.totalLamports,
totalPoolTokens: stakePoolData.poolTokenSupply,
solJitoConversion,
poolMint: stakePoolData.poolMint,
reserveStake: stakePoolData.reserveStake,
validatorList: stakePoolData.validatorList,
manager: stakePoolData.manager
}
}
```
## Manual Transaction Building
For developers who need more control or want to understand the underlying mechanics, transactions can be built manually instead of using the SPL stake pool library helpers.
### High-Level Manual Approach
**Manual Staking:**
- Create associated token account for JitoSOL if needed
- Build `DepositSol` instruction (instruction index 14) with proper account metas
- Handle withdraw authority PDA derivation
- Manage compute budget and transaction signing
**Manual Unstaking:**
- Create approval instruction for token transfer
- Find suitable validator stake account within the pool
- *Tip: Use the [Preferred Withdraw Validator List API](https://www.jito.network/docs/jitosol/jitosol-liquid-staking/for-developers/stake-pool-api.md#10-preferred-withdraw-validator-list) to get optimal validators for withdrawal that minimize rebalancing needs*
- Create temporary stake account for receiving unstaked funds
- Build `WithdrawStake` instruction (instruction index 10)
- Handle all required account metas and signers
The manual approach involves:
1. **Account Discovery**: Finding the right accounts (withdraw authority, validator stake accounts, etc.)
2. **Instruction Building**: Manually constructing the raw instruction data and account metas
3. **Signer Management**: Handling ephemeral keypairs and approval authorities
4. **Error Handling**: Managing edge cases like insufficient validator balances
### Detailed Manual Implementation
For complete manual implementation examples, see the reference repository at:
**[https://github.com/jito-foundation/jito-stake-unstake-reference](https://github.com/jito-foundation/jito-stake-unstake-reference)**
The repository includes:
- `useManualStake.ts` - Manual DepositSol instruction building
- `useManualUnstake.ts` - Manual WithdrawStake instruction building with validator selection
- Working examples of account derivation, instruction data encoding, and transaction construction
## Important Considerations
### Unstaking Options
- **Withdraw to Stake Account** (`useReserve: false`): Creates a stake account that requires deactivation (1 epoch) before SOL is liquid
- **Instant Reserve Withdrawal** (`useReserve: true`): Immediate SOL but subject to available liquidity and fees
### Network Differences
- Pool parameters and minimum balances differ between Mainnet and Testnet
- Always verify addresses and test on Testnet first
## Additional Resources
- [Solana Stake Pool Documentation](https://spl.solana.com/stake-pool)
- [SPL Stake Pool TypeScript SDK](https://github.com/solana-program/stake-pool/tree/main/clients/js-legacy)
- [Jito Interceptor SDK](https://github.com/jito-foundation/stake-deposit-interceptor/tree/master/package) - TypeScript SDK for stake account deposits
- [JitoSOL Stake/Unstake Reference Implementation](https://github.com/jito-foundation/jito-stake-unstake-reference)
- [Jito Network Documentation](https://docs.jito.network/)
This guide provides both assisted (library-based) and manual transaction building approaches. For production applications, transaction confirmation, and user experience considerations.
---
# BAM Boost API
> JIP 31 BAM Early Adopter Subsidy Programme
## API Endpoints
### 1. BAM Boost Validators
**Purpose**: Returns BAM boost information for all validators in a given epoch
**Endpoint**: `/api/v1/bam_boost_validators`
**Method**: `GET`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Query Parameters
| Parameter | Type | Required | Default | Description |
| -------------- | ------- | -------- |-------- | ------------------------------- |
| `epoch` | number | Yes | - | Filter by specific epoch |
#### Response Fields
The response contains a `bam_boost_validators` array with the following fields per entry:
| Field | Type | Description |
| ---------------------- | -------------- | ------------------------------------ |
| `name` | string \| null | Validator name (null if not set) |
| `epoch` | number | Epoch number |
| `identity_account` | string | Validator identity public key |
| `amount` | number | BAM boost amount in lamports |
| `claimed` | boolean | Whether the boost has been claimed |
| `claim_status_address` | string | Claim status account public key |
#### Example Request
```bash
curl -X GET \
https://kobe.mainnet.jito.network/api/v1/bam_boost_validators?epoch=900
```
#### Example Response
```json
{
"bam_boost_validators": [
{
"name": "IBB Club",
"epoch": 900,
"identity_account": "2KFrkqEeSBKEHiMjUugPxTkBJ2jXepgFBqHu5ZFxtaFg",
"amount": 5185289422,
"claimed": false,
"claim_status_address": "Grhjd1iPxRbDpdcpMnHTjj6gHgPLqqny8yVzRYX1DHFk"
},
{
"name": null,
"epoch": 900,
"identity_account": "Ha1CoNmAcbCQbg9QcCjLH79gLCqVZdxABwccQH3xexXE",
"amount": 5243935756,
"claimed": false,
"claim_status_address": "58ic9vW34xN8FyPAm4guHgJxvcQ37peXJeamNjuNFVUk"
}
]
}
```
---
### 2. Claim
**Purpose**: Returns the claim proof and details required to claim BAM boost rewards for a specific validator
**Endpoint**: `/api/v1/claim/{network}/{epoch}/{identity_account}`
**Method**: `GET`
**Base URL**: `https://kobe.mainnet.jito.network`
#### Path Parameters
| Parameter | Type | Required | Description |
| ------------------ | ------ | -------- | ------------------------------------------------ |
| `network` | string | Yes | Network name (e.g., `mainnet`) |
| `epoch` | number | Yes | Epoch number for the claim |
| `identity_account` | string | Yes | Validator identity public key |
#### Response Fields
| Field | Type | Description |
| ---------------------- | ---------- | ----------------------------------------------------- |
| `amount` | number | Claimable amount in lamports |
| `claimant` | string | Public key of the claimant |
| `proof` | number[][] | Merkle proof as array of 32-byte arrays |
| `merkle_root` | number[] | 32-byte merkle root |
| `distributor_address` | string | Merkle distributor program address |
| `claim_status_address` | string | Account address tracking the claim status |
#### Example Request
```bash
curl -X GET \
https://kobe.mainnet.jito.network/api/v1/claim/mainnet/915/5zuNci3TV79w6zLoJZzbZujMvkVZb2FcSPhgv9aT24AK
```
#### Example Response
```json
{
"amount": 1014322740,
"claimant": "5zuNci3TV79w6zLoJZzbZujMvkVZb2FcSPhgv9aT24AK",
"proof": [
[...],
[...]
],
"merkle_root": [...],
"distributor_address": "CCRhL2ynYebEzxLWNUHCcEXrKqmJa2jJjnZrr7bDbgnb",
"claim_status_address": "FYvKEnv3i36SwNRwFTvAKaQH8oo1F3EFTGfVc55oVkqm"
}
```
---
# Staking SOL for JitoSOL
> Complete guide to staking your SOL
## Overview
**Time Required:** 2-5 minutes
**Prerequisites:** Solana wallet with SOL tokens and small amount for transaction fees
### Step 1: Prepare Your Wallet
**Supported Wallets:**
- [Phantom](https://phantom.app/) (Beginner-friendly)
- [Solflare](https://solflare.com/) (Beginner-friendly)
- [Backpack](https://backpack.app/)
- [Ledger](https://www.ledger.com/) (Hardware wallet via browser)
- [Squads](https://squads.so/) (Multi-signature)
- [Fireblocks](https://www.fireblocks.com/) (Institutional)
**What You Need:**
- SOL to deposit (or other SPL tokens you want to convert)
- ~0.01 SOL minimum for transaction fees
- If you don't have SOL: Buy from Coinbase, Kraken, or Binance and transfer to your wallet
**Ledger Users:** JitoSOL works with Ledger wallets directly or through browser extensions. Approve transactions on your device when prompted.
### Step 2: Connect to Jito
1. Go to [jito.network/staking](https://www.jito.network/staking/)
2. Ensure you're on the "Stake" tab

3. Click **"Connect Wallet"** and select your wallet type
4. Approve the connection request
5. Verify your wallet address appears in the top right
**Wallet-Specific Guides:**
- [Phantom Guide](https://www.jito.network/docs/jitosol/get-started/stake-sol-for-jitosol-flow/staking-with-phantom.md)
- [Solflare Guide](https://www.jito.network/docs/jitosol/get-started/stake-sol-for-jitosol-flow/staking-with-solflare.md)
- [Fireblocks Guide](https://www.jito.network/docs/jitosol/get-started/stake-sol-for-jitosol-flow/stake-with-fireblocks.md)
- [Squads Guide](https://www.jito.network/docs/jitosol/get-started/stake-sol-for-jitosol-flow/staking-with-squads.md)
### Step 3: Choose Staking Method and Deposit
**Option 1: SOL Staking**

1. Enter SOL amount to stake
2. Choose method:
- **Direct Mint:** Mint JitoSOL via Stake Pool contract (Recommended, no slippage)
- **via Jupiter:** Swap SOL for JitoSOL via Jupiter DEX
3. Review how much JitoSOL you'll receive
4. Click "Convert to JitoSOL"
**Option 2: Convert Stake Accounts to JitoSOL**
1. Click on the stake accounts row to view your existing stakes
2. Select stake accounts to convert
3. Confirm conversion to liquid JitoSOL
- Note: deposited stake will be temporarily held by Jito's Interceptor program
**Option 3: Convert SPL Tokens to JitoSOL**

1. Select source token from the dropdown (USDC, USDT, WBTC, mSOL, etc.)
2. Enter amount to convert
3. Review Jupiter's conversion route and rates
4. Execute the swap to receive JitoSOL

### Step 4: Complete Transaction

**Review Transaction:**
- Check JitoSOL amount you'll receive (+ amount)
- Verify SOL being spent (- amount)
- Confirm network fees
- **Ledger users:** Ensure transaction hash matches your device
**Confirm in Wallet:**
1. Click "Confirm" in your wallet
2. Wait for blockchain confirmation (typically 10-30 seconds)

**Verify Success:**
- Look for success notification
- Check JitoSOL appears in your wallet
## What Happens Next
**Immediate Benefits:**
- Start earning staking and MEV rewards immediately
- Rewards automatically compound into your JitoSOL value
**Using JitoSOL:**
- **Hold:** Simply hold to accrue rewards
- **DeFi:** Use in lending, DEXs, and yield farming
- **Trade:** Exchange on Jupiter anytime
**Next Steps:**
- [Track Performance](https://www.jito.network/docs/jitosol/get-started/viewing-jitosol-rewards.md)
- [Explore DeFi Opportunities](https://www.jito.network/defi/)
## Method Comparison
**SOL Staking:**
- Straightforward SOL to JitoSOL conversion
- Choose Direct Mint for simple, no slippage staking. (Recommended)
- Or, choose Via Jupiter to swap via DEX if needed
**Stake Account Conversion:**
- Convert existing SOL stakes to liquid JitoSOL via Interceptor
- Keep earning rewards while gaining liquidity
**SPL Token Conversion:**
- Convert any supported asset (USDC, USDT, WBTC, mSOL, stSOL, etc.) to JitoSOL
- Uses Jupiter for optimal swap routes
## Troubleshooting
**Transaction Failed?**
- Ensure sufficient SOL for fees
- Increase priority fees or tip amount
- Check slippage if converting via Jupiter
- Refresh page and reconnect
**Need Help?**
- Review [FAQ section](https://www.jito.network/docs/jitosol/faqs/general-faqs.md)
- Use wallet-specific guides above
Ready to start? Visit [jito.network/staking](https://www.jito.network/staking/)
---
# Staking with Phantom
> Step-by-step guide for staking SOL using Phantom wallet
**Time Required:** 2-5 minutes
**Prerequisites:** Phantom wallet with SOL
## Prerequisites
**What You Need:**
- SOL to stake (purchase from Coinbase, Kraken, or Binance if needed)
- Small amount of SOL for transaction fees
**Ledger Users:** If using Phantom with Ledger:
1. Connect Ledger and open Solana app
2. Connect via Phantom browser extension
3. Approve transactions on your Ledger device when prompted
## Step 1: Connect Phantom Wallet
1. Go to [jito.network/staking](https://www.jito.network/staking/)

2. Click **"Connect Wallet"** in the top right corner

3. Select **"Phantom"** from the wallet options

4. Click **"Connect"** to authorize the connection

5. Verify your wallet address appears in the top right corner
## Step 2: Stake SOL via Direct Mint
1. Ensure you're on the **"Stake"** tab

2. Enter SOL amount to stake
3. Select **"Direct Mint"** (recommended due to no slippage)
4. Review JitoSOL amount you'll receive
5. Click **"Convert to JitoSOL"**

**Other Options:** You can also convert existing stake accounts or other SPL tokens (USDC, USDT, mSOL, etc.) to JitoSOL. See the [main staking overview](https://www.jito.network/docs/jitosol/get-started/stake-sol-for-jitosol-flow/overview.md) for details on these methods.
## Step 3: Complete Transaction

**Review Transaction:**
- Check JitoSOL amount you'll receive (+ amount)
- Verify SOL being spent (- amount)
- Confirm network fees
**Approve in Phantom:**
1. Click **"Confirm"** in your Phantom wallet
2. Wait for blockchain confirmation (typically 10-30 seconds)

**Verify Success:**
- Look for success notification
- Check JitoSOL appears in your Phantom wallet
- Your JitoSOL balance represents staked SOL plus accumulated rewards
## What Happens Next
**Immediate Benefits:**
- Start earning staking and MEV rewards immediately
- Rewards automatically compound into your JitoSOL's value
- Track earnings in the [Rewards section](https://www.jito.network/docs/jitosol/get-started/viewing-jitosol-rewards.md)
**Using JitoSOL:**
- Hold to accrue rewards
- Use in DeFi protocols (see [guide](https://www.jito.network/docs/jitosol/get-started/using-jitosol-flow/using-overview.md) or go to our [DeFi opportunities page](https://www.jito.network/defi/))
- Trade anytime
## Troubleshooting
**Transaction Failed?**
- Ensure sufficient SOL for fees (~0.01 SOL minimum)
- Check Phantom wallet connection
- Refresh page and reconnect
**Need Help?**
- Review [main staking overview](https://www.jito.network/docs/jitosol/get-started/stake-sol-for-jitosol-flow/overview.md)
- Check [FAQ section](https://www.jito.network/docs/jitosol/faqs/general-faqs.md)
---
# Staking with Solflare
> Step-by-step guide for staking SOL using Solflare wallet
**Time Required:** 2-5 minutes
**Prerequisites:** Solflare wallet with SOL
## Prerequisites
**What You Need:**
- SOL to stake (purchase from Coinbase, Kraken, or Binance if needed)
- Small amount of SOL for transaction fees
## Step 1: Connect Solflare Wallet
1. Go to [jito.network/staking](https://www.jito.network/staking/)

2. Click **"Connect Wallet"** in the top right corner

3. Select **"Solflare"** from the wallet options

4. Click **"Connect"** to authorize the connection (you may choose "Trust this app" to prevent future prompts)

5. Verify your wallet address appears in the top right corner
## Step 2: Stake SOL via Direct Mint
1. Ensure you're on the **"Stake"** tab

2. Enter SOL amount to stake
3. Select **"Direct Mint"** (recommended due to no slippage)
4. Review JitoSOL amount you'll receive
5. Click **"Convert to JitoSOL"**

**Other Options:** You can also convert existing stake accounts or other SPL tokens (USDC, USDT, mSOL, etc.) to JitoSOL. See the [main staking overview](https://www.jito.network/docs/jitosol/get-started/stake-sol-for-jitosol-flow/overview.md) for details on these methods.
## Step 3: Complete Transaction

**Review Transaction:**
- Check JitoSOL amount you'll receive (+ amount)
- Verify SOL being spent (- amount)
- Confirm network fees
**Approve in Solflare:**
1. Click **"Approve"** in your Solflare wallet
2. Wait for blockchain confirmation (typically 10-30 seconds)

**Verify Success:**
- Look for success notification
- Check JitoSOL appears in your Solflare wallet
- Your JitoSOL balance represents staked SOL plus accumulated rewards
## What Happens Next
**Immediate Benefits:**
- Start earning staking and MEV rewards immediately
- Rewards automatically compound into your JitoSOL's value
- Track earnings in the [Rewards section](https://www.jito.network/docs/jitosol/get-started/viewing-jitosol-rewards.md)
**Using JitoSOL:**
- Hold to accrue rewards
- Use in DeFi protocols (see [guide](https://www.jito.network/docs/jitosol/get-started/using-jitosol-flow/using-overview.md) or go to our [DeFi opportunities page](https://www.jito.network/defi/))
- Trade anytime
## Troubleshooting
**Transaction Failed?**
- Ensure sufficient SOL for fees (~0.01 SOL minimum)
- Check Solflare wallet connection
- Refresh page and reconnect
**Need Help?**
- Review [main staking overview](https://www.jito.network/docs/jitosol/get-started/stake-sol-for-jitosol-flow/overview.md)
- Check [FAQ section](https://www.jito.network/docs/jitosol/faqs/general-faqs.md)
---
# Stake with Fireblocks
JitoSOL's is integrated with Fireblocks for secure institutional custody.
- The [jito.network](https://www.jito.network/staking) site enables minting directly from Fireblocks. Select WalletConnect and pair using the Fireblocks app. Note, Fireblocks has not upgraded many customers to WalletConnect v2, which is required for usage. If you get "Error: Unable to init wallet, please try again later", your account is likely using the wrong WalletConnect version. Open a ticket with customer service and they can switch your service in an hour.
- Follow the traditional workflow on [jito.network](https://www.jito.network/staking) and assets will be minted to your account.
- JitoSOL is included in the Fireblocks asset list and it will be shown like SOL or any other SPL token.
Jito maintains a Fireblocks account and can provide real-time support through the process.
---
# Staking With Squads
Squads, a turnkey multisig program for Solana, has integrated with JitoSOL. This enables teams or individuals to stake with JitoSOL in a secure environment.
See their [documentation page](https://docs.squads.so/squads-v3-docs/integrations/staking/jitosol) for a step-by-step guide and Jito can assist with any other questions.
---
# Buying or Selling JitoSOL
> JitoSOL can be purchased with any mainstream SPL tokens
## Jupiter
Jupiter ([jup.ag](https://jup.ag)) is the recommended venue for any purchases or sales of JitoSOL. The exchange aggregates liquidity across the entire Solana network and suggests the best route based on sizing and token pairs. Trades can also be split automatically across multiple routes if that provides better execution. Jupiter does not currently charge fees. See [here](https://jup.ag/onboard) for additional Jupiter instruction.
After navigating to the site, connect your wallet and enter the payment token (USDC, SOL, etc.) along with JitoSOL in the "You Receive" section. Click "Swap" and the trade will be immediately executed.

Check the trade price and ensure there is not a slippage warning for poor execution. If you receive this notice, consider reducing your trade size or minting JitoSOL directly on our website with no slippage.
## Alternate Venues
JitoSOL is available directly from [Orca](https://www.orca.so/). Note Jupiter integrates these pools so no need to visit Orca or any other venue directly.
---
# Unstaking Overview
> Compare instant trading vs direct unstaking to choose the best method
## Two Ways to Convert JitoSOL
When you want to convert your JitoSOL back to SOL (or other tokens), you have two main options:
### Method Comparison
| Method | Speed | Typical Fee | Best For |
|--------|-------|-------------|----------|
| **Jupiter Trading** | Instant | <0.3% | Most users |
| **Direct Unstaking** | Up to 2 days | 0.1% | Large amounts, fee optimization |
## Option 1: Instant Trading (Recommended)
**Use the integrated Jupiter interface for instant conversion**

**Advantages:**
- Instant settlement - Get your SOL immediately
- No waiting period - No need to track cooldown periods
- Simple process - Single transaction, no multi-step workflow
- Best liquidity - Often better exchange rates due to deep liquidity
**How it works:**
1. Go to [jito.network/staking](https://www.jito.network/staking/) and select "Unstake" tab
2. Choose "Immediately via Jupiter" option
3. Enter JitoSOL amount to convert
4. Review the SOL amount you'll receive
5. Click "Unstake SOL" and approve in your wallet

**Alternative:** You can also trade JitoSOL directly on [Jupiter](https://jup.ag/) for any other token.
## Option 2: Direct Unstaking
**Use the delayed unstaking interface for direct conversion**

**Advantages:**
- Fixed 0.1% unstaking fee
- No slippage. Get exact exchange rate
- Direct from protocol. No third-party dependencies
**Disadvantages:**
- 2 day waiting period: Must wait for Solana epoch completion
- Multi-step process: Requires multiple wallet interactions
- Timing complexity: Need to track and complete withdrawal
**When to use direct unstaking:**
- Very large amounts where fee difference is significant
- You specifically need the exact exchange rate without slippage
- You're not in a hurry and can wait up to 2 days
- Market liquidity on Jupiter is temporarily insufficient
### How Direct Unstaking Works

The waiting period is a requirement of the Solana protocol, not specific to JitoSOL. All staked SOL requires a "cooldown" period of 1 epoch (up to 2 days) before it can be withdrawn.
**Process Overview:**
1. **Initiate unstaking** - Press "Unstake SOL" button to transfer your stake from the pool to a stake account in your wallet
2. **Deactivate stake account** - Click "Deactivate" on the Manage page or in your wallet. Your stake will be available at the next epoch boundary (up to 2 days)
3. **Withdraw SOL** - Click "Withdraw" to move SOL to your wallet once deactivation is complete
**Important:** This action is irreversible. Once initiated, Jito will remove your stake from the stake pool.
### How to Complete Direct Unstaking
**Step 1: Access the Interface**
1. Go to [jito.network/staking](https://www.jito.network/staking/) and select "Unstake" tab
2. Connect your wallet and enter amount to unstake
3. Select the delayed unstaking option (shows 0.1% fee and waiting time)
**Step 2: Review and Confirm**

**Step 3: Wallet Confirmation**

Review the transaction details and approve in your wallet to initiate the unstaking process.
**Step 4: Complete the Process**
- **Monitor Progress:** Check the [Manage page](https://www.jito.network/manage/) for your new stake account
- **Deactivate:** Click "Deactivate" when ready (can be done immediately)
- **Wait:** Your stake will be ready at the next epoch boundary (up to 2 days)
- **Withdraw:** Click "Withdraw" once deactivation is complete
**Wallet-Specific Guides:**
- [Phantom Wallet Guide](https://www.jito.network/docs/jitosol/get-started/unstaking-jitosol-flow/unstaking-with-phantom.md)
- [Solflare Wallet Guide](https://www.jito.network/docs/jitosol/get-started/unstaking-jitosol-flow/unstaking-with-solflare.md)
## Choosing the Right Method
### Use Jupiter Trading When:
- You need SOL immediately
- You want to convert to other tokens (USDC, mSOL, etc.)
- You prefer simple, one-step transactions
- The amount is moderate (fee difference isn't significant)
### Use Direct Unstaking When:
- You're unstaking very large amounts (>100 SOL)
- You can wait up to 2 days for completion
- You want to minimize fees (0.1% vs potentially higher slippage)
- You prefer interacting directly with the protocol
## Troubleshooting
**Instant unstake transaction failing?**
- Increase your slippage setting
- Increase priority fees or tip amount
**Direct unstaking seems complex?**
- Use our wallet-specific guides for step-by-step instructions
- Most users find Jupiter conversion much simpler
## Summary
Most users should use Instake Unstaking for instant, convenient conversion with competitive rates. Direct unstaking is primarily useful for very large amounts or when you specifically need to minimize fees and can wait several days.
---
# Unstaking with Phantom
> Step-by-step guide for delayed unstaking using Phantom wallet
This guide covers **delayed unstaking** using Phantom wallet. For most users, we recommend [instant trading via Jupiter](https://www.jito.network/docs/jitosol/get-started/unstaking-jitosol-flow/unstaking-overview.md#option-1-instant-trading-recommended) instead.
**Time Required:** Setup (5 minutes) + waiting period (up to 2 days)
**Fee:** 0.1% unstaking fee
## Step 1: Connect Your Phantom Wallet
1. Go to [jito.network/staking](https://www.jito.network/staking/)

2. Click **"Connect Wallet"** in the top right corner

3. Select **"Phantom"** from the wallet options

4. Click **"Connect"** to authorize the connection

5. Verify your wallet address appears in the top right corner
## Step 2: Choose Delayed Unstaking Option
1. Select the **"Unstake"** tab
2. Enter JitoSOL amount to unstake
3. Choose **"Delayed in X days"** (shows 0.1% fee)
4. Click **"Unstake SOL"**


## Step 3: Access SOL in Your Phantom Wallet
After initiating unstaking, your stake account will appear in Phantom. Navigate to your SOL holdings:

Click on **Solana (SOL)** to access the detailed view.

## Step 4: View Your Stakes
In the SOL detail page, you'll see your stake accounts:


**Stake Status:**
- **Active**: Earning rewards, needs deactivation
- **Activating**: Becoming active
- **Deactivating**: Cooling down, will become inactive at next epoch
- **Inactive**: Ready to withdraw
## Step 5: Deactivate Active Stakes
For any stakes showing as **"Active"**, you need to deactivate them:

1. Select the active stake account
2. Click **"Unstake"** to begin deactivation
3. Confirm the transaction

**Note:** Deactivate each active stake account individually.
## Step 6: Wait for Epoch Completion
**Waiting Period:** Up to 2 days (1 Solana epoch)
The stake needs to cool down due to Solana's protocol requirements. This applies to all unstaking methods, not just JitoSOL. You can check the status in Phantom. Once it shows **"Inactive"**, it's ready to withdraw.
## Step 7: Withdraw Your SOL
Once your stakes show as **"Inactive"**:
1. Select the inactive stake account
2. Click **"Withdraw Stake"**
3. Confirm the withdrawal transaction


SOL will then be available as regular SOL in your wallet.
## Key Points
- **Multiple Accounts**: You may have multiple stake accounts to process individually
- **Timing**: Up to 2-day wait is a Solana protocol requirement
- **Process**: Irreversible once initiated
- **Fees**: 0.1% unstaking fee applies
## Need Instant Access?
If you can't wait up to 2 days, consider [instant trading via Jupiter](https://www.jito.network/docs/jitosol/get-started/unstaking-jitosol-flow/unstaking-overview.md#option-1-instant-trading-recommended) instead:
- Immediate settlement
- Single transaction
- Convert to any token, not just SOL
## Troubleshooting
**Don't see your stake accounts?**
- Ensure you've initiated unstaking from the Jito website first
- Check that your Phantom wallet is properly connected
- Refresh your wallet or reconnect if needed
**Stakes still showing as Active?**
- You must manually deactivate each Active stake account
- This step cannot be skipped. It's required by Solana's protocol
**Need help?**
- Review [unstaking overview](https://www.jito.network/docs/jitosol/get-started/unstaking-jitosol-flow/unstaking-overview.md)
---
# Unstaking with Solflare
> Step-by-step guide for delayed unstaking using Solflare wallet
This guide covers **delayed unstaking** using Solflare wallet. For most users, we recommend [instant trading via Jupiter](https://www.jito.network/docs/jitosol/get-started/unstaking-jitosol-flow/unstaking-overview.md#option-1-instant-trading-recommended) instead.
**Time Required:** Setup (5-10 minutes) + waiting period (up to 2 days)
**Fee:** 0.1% unstaking fee
## Step 1: Connect Solflare Wallet
1. Go to [jito.network/staking](https://www.jito.network/staking/)

2. Click **"Connect Wallet"** in the top right corner

3. Select **"Solflare"** from the wallet options

4. Select to connect

5. Click **"Connect"** to authorize the connection (you may choose "Trust this app" to prevent future prompts)

6. Verify your wallet address appears in the top right corner
## Step 2: Initiate Delayed Unstaking
1. Select the **"Unstake"** tab
2. Enter JitoSOL amount to unstake
3. Choose **"Delayed in X days"** (shows 0.1% fee)
4. Click **"Unstake SOL"**


## Step 3: Access Staking in Solflare
Click the **"Staking"** tab in the bottom navigation of your Solflare wallet to access your stake accounts.

## Step 4: View Your Stake Accounts
Check your stake accounts and their status:

**Stake Status:**
- **Active**: Earning rewards, needs unstaking
- **Unstaked**: Ready to withdraw
- Various validators with different APY rates
## Step 5: Unstake Active Stakes
For stakes showing as **"Active"**:

1. Click on the active stake account to see validator details and APY

2. Review the unstaking details. Then click the **"Unstake"** button to initiate
3. Click the yellow **"Review"** button

4. Confirm the unstaking transaction by clicking **"Confirm"**

After confirmation, your stake will show as **"Unstaking"** with a countdown timer.
**Note:** Unstake each active stake account individually.
## Step 6: Wait for Epoch Completion
**Waiting Period:** Up to 2 days (1 Solana epoch)
Stakes need to cool down due to Solana protocol requirements. Check status in Solflare. Once showing **"Unstaked"**, they're ready to withdraw.
## Step 7: Withdraw Your SOL
Once your stakes show as **"Unstaked"**:

Your stake will show as **"Unstaked"** when available for withdrawal.

1. Click **"Withdraw"** to start the withdrawal process
2. Review the withdrawal details (token amount, destination, network fees)

3. Click **"Confirm"** to complete the process
Your SOL will now be available as regular SOL in your wallet for immediate use.
## Key Points
- **Multiple Accounts**: You may have multiple stake accounts to process individually
- **Timing**: Up to 2-day wait is a Solana protocol requirement
- **Process**: Irreversible once initiated
- **Fees**: 0.1% unstaking fee applies
- **Timer Display**: Solflare shows countdown timer for unstaking progress
## Need Instant Access?
Consider [instant trading via Jupiter](https://www.jito.network/docs/jitosol/get-started/unstaking-jitosol-flow/unstaking-overview.md#option-1-instant-trading-recommended):
- Immediate settlement
- Single transaction
- Convert to any token
## Troubleshooting
**Don't see stake accounts?**
- Ensure you initiated unstaking from Jito website first
- Click "Staking" tab in bottom navigation
- Refresh wallet if needed
**Stakes still Active?**
- Manually unstake each Active stake account
**Can't find Staking section?**
- Look for "Staking" tab in bottom navigation bar
- Should be visible alongside "Tokens", "Stocks", "Earn", and "Collect"
**Need help?**
- Review [unstaking overview](https://www.jito.network/docs/jitosol/get-started/unstaking-jitosol-flow/unstaking-overview.md)
---
# Using JitoSOL Overview
> JitoSOL integrates with 20+ leading Solana DeFi protocols for enhanced yield opportunities
JitoSOL has extensive integrations across the Solana DeFi ecosystem, with over 40% of JitoSOL supply actively used as collateral and liquidity provision. JitoSOL has 16M SOL TVL and 180,000 holders as of July 2025.
### **Lending & Borrowing Protocols:**
[marginfi](https://www.jito.network/docs/jitosol/get-started/using-jitosol-flow/mrgnfi.md) - Leading lending protocol
[Drift](https://www.jito.network/docs/jitosol/get-started/using-jitosol-flow/drift.md) - Cross-margined perpetuals and spot trading
[Save](https://www.jito.network/docs/jitosol/get-started/using-jitosol-flow/save.md) - Decentralized lending protocol
### **Liquidity Provision & DEXs:**
[Raydium](https://www.jito.network/docs/jitosol/get-started/using-jitosol-flow/raydium.md) - Solana's largest DEX and go-to for new token launches
[Orca](https://www.jito.network/docs/jitosol/get-started/using-jitosol-flow/orca.md) - Leading DEX with concentrated liquidity and excellent UX
[Meteora](https://www.jito.network/docs/jitosol/get-started/using-jitosol-flow/meteora.md) - Dynamic liquidity market maker (DLMM) with innovative features
[Kamino Finance](https://www.jito.network/docs/jitosol/get-started/using-jitosol-flow/kamino.md) - Automated vault management and lending protocol
### **Getting Started:**
1. **For Beginners**: Start with [Kamino](https://www.jito.network/docs/jitosol/get-started/using-jitosol-flow/kamino.md) vaults for automated yield farming
2. **For Active Traders**: Try [marginfi](https://www.jito.network/docs/jitosol/get-started/using-jitosol-flow/mrgnfi.md) for lending/borrowing or [Drift](https://www.jito.network/docs/jitosol/get-started/using-jitosol-flow/drift.md) for trading
3. **For Liquidity Providers**: Use [Raydium](https://www.jito.network/docs/jitosol/get-started/using-jitosol-flow/raydium.md) for new opportunities or [Orca](https://www.jito.network/docs/jitosol/get-started/using-jitosol-flow/orca.md) for stable pairs
4. **For Automated LP**: Let [Kamino](https://www.jito.network/docs/jitosol/get-started/using-jitosol-flow/kamino.md) manage concentrated liquidity positions automatically
### **Risk Considerations:**
All DeFi protocols carry smart contract risks. JitoSOL itself is built on the audited Solana Labs Stake Pool program with 9+ security audits. Each integration has its own risk profile - always DYOR before depositing funds.
### **New Integrations:**
Jito actively works with leading Solana protocols to expand JitoSOL utility. Recent growth includes expanded lending options and automated vault strategies.
---
# Kamino Finance
> Automated liquidity vaults with $1.6B+ TVL for optimized JitoSOL yields
Kamino Finance is Solana's leading automated vault protocol with over $2.4 billion TVL. Kamino creates actively managed liquidity strategies that optimize yield farming across concentrated liquidity AMMs like Orca, Meteora, and Raydium.
## JitoSOL Integration
Kamino offers multiple vault strategies featuring JitoSOL, with the **JitoSOL-SOL vault** being the largest liquidity vault on the platform.

### **Key Advantages**
**Automated Management**: Kamino removes the complexity of maintaining concentrated liquidity positions by:
- Automatically rebalancing positions based on market conditions
- Compounding rewards continuously
- Optimizing fee collection ranges
**Enhanced Yields**: Vault strategies earn from multiple sources:
- Base JitoSOL staking + MEV rewards (~7.5%)
- Trading fees from liquidity provision
- Additional protocol incentives when available
- Automated compounding for maximum efficiency
## Major Vault Strategies
### **JitoSOL-SOL Vault (Recommended)**
- **TVL**: Largest vault on Kamino
- **Platform**: Primarily Raydium with Orca integration
- **Risk**: Low (both assets are SOL-based)
- **Yield**: Staking rewards + trading fees + incentives

**Benefits**:
- No impermanent loss risk (assets are price-correlated)
- Earn full staking rewards on both sides
- Additional trading fees from JitoSOL-SOL swaps
- Automated position management
## Getting Started
1. **Visit Kamino**: | Lawful Basis: Performance of a Contract (i.e., to Provide Our Services to You) | Lawful Basis: Legitimate Interest | Lawful Basis: Consent | Lawful Basis: For Compliance with Legal Obligations | |
|---|---|---|---|---|
| To Provide the Services or Information Requested | ✓ | ✓ | ✓ | |
| To Measure Performance and Carry Out Research | ✓ | ✓ | ||
| For Customer Support | ✓ | ✓ | ✓ | ✓ |
| For Advertising Purposes | ✓ | ✓ | ||
| For Administrative or Legal Purposes | ✓ | ✓ | ✓ |
Project |
Pool Split |
Amount In JTO |
To |
Destination Pool |
Date Sent |
Date Start |
Date Ends |
Notes |
Raydium |
JTO/SOL |
80000 |
NCV2Uo3hfW5LSZXAJe19y6SpC5K98PuQwShCSZgTki3 |
12/07/2023 |
12/07/2023 |
12/14/2023 |
||
Raydium |
JTO/SOL |
5000 |
NCV2Uo3hfW5LSZXAJe19y6SpC5K98PuQwShCSZgTki3 |
12/15/2023 |
12/14/2023 |
12/21/2023 |
Tapered incentives for second weeks |
|
Orca |
JTO/USDC |
80000 |
93MjUKNKxazKmgS3GBX2Gj2BttEjJUyi7NYeyDHdHSc2 |
93MjUKNKxazKmgS3GBX2Gj2BttEjJUyi7NYeyDHdHSc2 |
12/07/2023 |
12/07/2023 |
12/14/2023 |
|
Orca |
JTO/USDC |
5000 |
93MjUKNKxazKmgS3GBX2Gj2BttEjJUyi7NYeyDHdHSc2 |
93MjUKNKxazKmgS3GBX2Gj2BttEjJUyi7NYeyDHdHSc2 |
12/15/2023 |
12/14/2023 |
12/21/2023 |
Tapered incentives for second weeks |
Kamino |
JitoSOL/JTO |
245000 |
5TBk9eYiageouQ575xU4RENwnxGjJgEQ7UBy6J91WKYE |
8DRToyNBUTR4MxqkKAP49s9z1JhotQWy3rMQKEw1HHdu |
12/07/2023 |
12/07/2023 |
01/07/2025 |
Initial 600k allocation -- not all paid out |
Kamino |
JitoSOL/JTO |
50000 |
5TBk9eYiageouQ575xU4RENwnxGjJgEQ7UBy6J91WKYE |
8DRToyNBUTR4MxqkKAP49s9z1JhotQWy3rMQKEw1HHdu |
12/07/2023 |
02/06/2024 |
03/06/2024 |
|
Kamino |
JitoSOL/SOL |
300000 |
5TBk9eYiageouQ575xU4RENwnxGjJgEQ7UBy6J91WKYE |
HCntzqDU5wXSWjwgLQP5hqh3kLHRYizKtPErvSCyggXd |
12/07/2023 and 12/15/2023 |
12/06/2023 |
03/06/2024 |
|
Kamino |
JitoSOL/JUP |
20000 |
5TBk9eYiageouQ575xU4RENwnxGjJgEQ7UBy6J91WKYE |
4dPX2rrJgSEeB7sLrM9SdTE9PWzfeMe8Ky5YCfqQCwMD |
12/07/2023 |
02/01/2024 |
03/01/2024 |
|
Meteora |
JitoSOL/JUP |
20000 |
JADaUV8kvDpDbJr55wxXJHVaBS3VCj8thZZHjfeuCVLd |
2QrWsSWrGvoAqkDC5XSGqjS752RWLaopqAaGrbugSxBL |
01/29/2024 |
02/01/2024 |
03/01/2024 |