getSupply

Returns information about the current supply of SOL, including total supply, circulating supply, and non-circulating supply. It can also optionally return the list of non-circulating accounts. This data is important for tokenomics analysis, market cap calculations, supply dashboards, and understanding how much SOL is locked vs. freely tradeable.

Parameters

#TypeRequiredDescription
1objectNoConfiguration object

Configuration object fields:

FieldTypeDescription
commitmentstringCommitment level: processed, confirmed, or finalized
excludeNonCirculatingAccountsListboolExclude the list of non-circulating accounts from the response

Response

Returns an RpcResponse object:

FieldTypeDescription
context.slotu64The slot at which the value was read
value.totalu64Total supply in lamports
value.circulatingu64Circulating supply in lamports
value.nonCirculatingu64Non-circulating supply in lamports
value.nonCirculatingAccountsarray[string]List of non-circulating account addresses

Code Examples

cURL

1curl http://[IP_ADDRESS]:[PORT] -X POST -H "Content-Type: application/json" -d '{
2  "jsonrpc": "2.0",
3  "id": 1,
4  "method": "getSupply",
5  "params": [
6    { "excludeNonCirculatingAccountsList": true }
7  ]
8}'

TypeScript

1const response = await fetch("http://[IP_ADDRESS]:[PORT]", {
2  method: "POST",
3  headers: { "Content-Type": "application/json" },
4  body: JSON.stringify({
5    jsonrpc: "2.0",
6    id: 1,
7    method: "getSupply",
8    params: [
9      { excludeNonCirculatingAccountsList: true }
10    ]
11  }),
12});
13const { result } = await response.json();
14console.log("Total:", result.value.total / 1e9, "SOL");

Python

1import requests
2
3response = requests.post("http://[IP_ADDRESS]:[PORT]", json={
4    "jsonrpc": "2.0",
5    "id": 1,
6    "method": "getSupply",
7    "params": [
8        {"excludeNonCirculatingAccountsList": True}
9    ]
10})
11result = response.json()["result"]
12print(f"Total: {result['value']['total'] / 1e9} SOL")

Rust

1use reqwest::Client;
2use serde_json::json;
3
4#[tokio::main]
5async fn main() -> Result<(), Box<dyn std::error::Error>> {
6    let client = Client::new();
7    let res = client.post("http://[IP_ADDRESS]:[PORT]")
8        .json(&json!({
9            "jsonrpc": "2.0",
10            "id": 1,
11            "method": "getSupply",
12            "params": [
13                {"excludeNonCirculatingAccountsList": true}
14            ]
15        }))
16        .send().await?
17        .text().await?;
18    println!("{}", res);
19    Ok(())
20}

Example Response

1{
2  "jsonrpc": "2.0",
3  "result": {
4    "context": { "slot": 166974442 },
5    "value": {
6      "total": 570145524542311600,
7      "circulating": 419145524542311600,
8      "nonCirculating": 151000000000000000,
9      "nonCirculatingAccounts": []
10    }
11  },
12  "id": 1
13}