getSupply — Solana RPC Method
getSupply returns the current SOL supply broken down into total, circulating, and non-circulating amounts. It can optionally include the list of non-circulating account addresses.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
commitment | string | No | processed, confirmed, or finalized. Default: finalized. |
excludeNonCirculatingAccountsList | bool | No | If true, omits the nonCirculatingAccounts array from the response. Default: false. |
Request
curl -X POST https://api.mainnet-beta.solana.com \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getSupply",
"params": [
{"excludeNonCirculatingAccountsList": true}
]
}'
TypeScript (@solana/kit)
import { createSolanaRpc } from "@solana/kit";
const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
const supply = await rpc
.getSupply({ excludeNonCirculatingAccountsList: true })
.send();
const totalSOL = Number(supply.value.total) / 1_000_000_000;
const circSOL = Number(supply.value.circulating) / 1_000_000_000;
console.log(`Total: ${totalSOL.toLocaleString()} SOL`);
console.log(`Circulating: ${circSOL.toLocaleString()} SOL`);
Response
{
"jsonrpc": "2.0",
"result": {
"context": { "slot": 341200000, "apiVersion": "2.2.4" },
"value": {
"total": 590000000000000000,
"circulating": 480000000000000000,
"nonCirculating": 110000000000000000,
"nonCirculatingAccounts": []
}
},
"id": 1
}
| Field | Type | Description |
|---|---|---|
total | u64 | Total supply of SOL in lamports. |
circulating | u64 | Circulating supply in lamports. |
nonCirculating | u64 | Non-circulating supply in lamports. |
nonCirculatingAccounts | string[] | List of non-circulating account addresses. Empty when excludeNonCirculatingAccountsList is true. |
Common errors
This method rarely fails. The main issue is that including the non-circulating accounts list can produce a large response.
Performance
With excludeNonCirculatingAccountsList: true, the response is small and fast. With the list included, the response can be larger as it enumerates all non-circulating accounts.
FAQ
What counts as non-circulating supply? Non-circulating SOL includes foundation-held accounts, grant accounts with lockup restrictions, and other reserved accounts that are not freely transferable on the open market.
How does total supply increase?
Total supply increases through inflation (new SOL minted as staking rewards each epoch). The rate of increase follows the inflation schedule from getInflationGovernor.
Is circulating supply the same as total supply minus staked SOL? No. Circulating supply is total minus non-circulating (locked/reserved). Staked SOL is circulating — it is delegated but still owned by the staker and can be undelegated.
How accurate is this data? The supply data is computed from the actual on-chain account state and is exact at the reported slot. It updates with every block as transactions modify account balances and inflation is distributed.
Parameters
| Parameter | Type | Required | Description | Default |
|---|---|---|---|---|
commitment | string | No | Commitment level: processed, confirmed, or finalized. | finalized |
excludeNonCirculatingAccountsList | bool | No | If true, omits the list of non-circulating account addresses. | — |
Updated: