Solana
App · Cryptocurrency · 7 actions
Read the Solana blockchain through its keyless public JSON-RPC endpoints: SOL and SPL token balances, account state, a wallet's recent transactions, a transaction's full detail with the balance changes it caused, token supply, and cluster health. No account or API key required.
Actions
| Action | What it does |
|---|---|
| Get account info | Get an account's state: the program that owns it, its balance, whether it is executable, and its data. |
| Get network status | Check that a Solana cluster is healthy and see where it is in the current epoch: the slot it has reached, how far through the epoch that is, and the version the node runs. |
| Get recent transactions | List the transactions that touched an address, newest first, with each one's signature, time, and whether it succeeded. |
| Get SOL balance | Get the SOL balance of any wallet or account address, in lamports and in SOL. |
| Get token balances | List the SPL token balances held by a wallet, one row per token account with its mint and amount. |
| Get token supply | Get the circulating supply of an SPL token from its mint address, as the raw amount and with the mint's decimals applied. |
| Get transaction | Get a confirmed transaction by signature, with what it actually moved worked out: the fee, the instructions it ran, and the SOL and token balance changes per account. |
Get account info
Get an account's state: the program that owns it, its balance, whether it is executable, and its data. Accounts the node can decode (token accounts, mints, stake and vote accounts) come back as readable fields; anything else keeps its data as base64.
Inputs
- Address
addresstextRequired - Base58 address of the account to read. Any account works: a wallet, a token account, a mint, or a program.
- Cluster
clustertext - Which Solana cluster to read from. Mainnet Beta is the live chain carrying real value; Devnet and Testnet are for trying a workflow out first and their tokens are worth nothing. Defaults to Mainnet Beta.One of:
mainnet-beta(Mainnet Beta (live)),devnet,testnet. Default:mainnet-beta. - Commitment
commitmenttext - How settled the data has to be before the node answers. 'Finalized' is a block that can no longer be rolled back and is the right choice for anything about money; 'confirmed' is a couple of seconds fresher; 'processed' is the newest and the least certain. Defaults to finalized.One of:
finalized(Finalized (safest)),confirmed,processed(Processed (newest)). Default:finalized.
Outputs
account_typetext- Kind of account, e.g. 'mint' or 'account'
addresstext- Address the account is for
clustertext- Cluster it was read from
context_slotnumber- Slot the node answered at, i.e. how current this reading is
data_base64text- Raw account data, when it could not be decoded
executabletrue/false- Whether the account is a program itself
existstrue/false- False when nothing has ever been created at this address; the rest of the fields are then empty
lamportsnumber- Balance in lamports, the chain's own unit (1 SOL = 1,000,000,000)
ownertext- Address of the program that owns the account
owner_programtext- Name of that program when it is a well-known one, e.g. 'SPL Token Program'
parsedobject- Decoded account fields, when the node could
programtext- Program the data was decoded as, e.g. 'spl-token'
rent_epochnumber- Epoch rent is next owed, when one applies
rent_exempttrue/false- Whether the account holds enough to owe no rent
solnumber- The same balance expressed in SOL
sol_stringtext- The same balance in SOL as an exact decimal string, for balances too large to hold in a number without rounding
spacenumber- Size of the account's data, in bytes
Example output
{
"account_type": "mint",
"address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"cluster": "mainnet-beta",
"context_slot": 351842091,
"data_base64": null,
"executable": false,
"exists": true,
"lamports": 388127588933,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"owner_program": "SPL Token Program",
"parsed": {
"decimals": 6,
"freezeAuthority": "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar",
"isInitialized": true,
"mintAuthority": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"supply": "8492155106448329"
},
"program": "spl-token",
"rent_epoch": null,
"rent_exempt": true,
"sol": 388.127588933,
"sol_string": "388.127588933",
"space": 82
}Get network status
Check that a Solana cluster is healthy and see where it is in the current epoch: the slot it has reached, how far through the epoch that is, and the version the node runs. Useful as a guard before a workflow reads anything else.
Inputs
- Cluster
clustertext - Which Solana cluster to read from. Mainnet Beta is the live chain carrying real value; Devnet and Testnet are for trying a workflow out first and their tokens are worth nothing. Defaults to Mainnet Beta.One of:
mainnet-beta(Mainnet Beta (live)),devnet,testnet. Default:mainnet-beta.
Outputs
block_heightnumber- Current block height
clustertext- Cluster checked
endpointtext- RPC endpoint the check was made against
epochnumber- Current epoch number
epoch_progress_percentnumber- How far through the epoch the cluster is
feature_setnumber- Feature-set identifier the node runs
healthtext- 'ok', or what the node said about being behind
healthytrue/false- Whether the node is caught up with the cluster
slotnumber- Highest slot the node has reached
slot_indexnumber- Slots into the current epoch
slots_in_epochnumber- Total slots this epoch holds
solana_core_versiontext- Node software version, e.g. '2.3.6'
transaction_countnumber- Transactions the cluster has ever processed
Example output
{
"block_height": 329914772,
"cluster": "mainnet-beta",
"endpoint": "https://api.mainnet-beta.solana.com",
"epoch": 814,
"epoch_progress_percent": 74.56,
"feature_set": 3341060832,
"health": "ok",
"healthy": true,
"slot": 351842091,
"slot_index": 322091,
"slots_in_epoch": 432000,
"solana_core_version": "2.3.6",
"transaction_count": 425819330244
}Get recent transactions
List the transactions that touched an address, newest first, with each one's signature, time, and whether it succeeded. This is how a workflow watches a wallet: hand a signature to 'Get transaction' for the detail, or stop at the last one already seen so a scheduled run only picks up what is new.
Inputs
- Address
addresstextRequired - Base58 address to list transactions for. A wallet, a token account, or a program all work.
- Limit
limitnumber - How many transactions to return, newest first, from 1 to 1000. Defaults to 10.From 1 to 1000. Default:
10. - Before signature
beforetext - Return only transactions older than this signature. Pass the 'oldest_signature' of a previous run to page further back in time.
- Until signature
untiltext - Stop at this signature and return only what is newer than it. Pass the 'newest_signature' a previous run saw so a scheduled workflow picks up only new activity.
- Cluster
clustertext - Which Solana cluster to read from. Mainnet Beta is the live chain carrying real value; Devnet and Testnet are for trying a workflow out first and their tokens are worth nothing. Defaults to Mainnet Beta.One of:
mainnet-beta(Mainnet Beta (live)),devnet,testnet. Default:mainnet-beta. - Commitment
commitmenttext - How settled the data has to be before the node answers. 'Finalized' is a block that can no longer be rolled back and is the right choice for anything about money; 'confirmed' is a couple of seconds fresher. Defaults to finalized.One of:
finalized(Finalized (safest)),confirmed. Default:finalized.
Outputs
addresstext- Address the transactions were listed for
clustertext- Cluster they were read from
countnumber- Number of transactions returned
newest_signaturetext- First signature in the list, to use as 'until' next run
oldest_signaturetext- Last signature in the list, for paging back
signatureslist
Example output
{
"address": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
"cluster": "mainnet-beta",
"count": 2,
"newest_signature": "5j7s6NiJS3JAkvgkoc18WVAsiSaci2pxB2A6ueCJP4tprA2TFg9wSyTLeYouxPBJEMzJinENTkpA52YStRW5Dia7",
"oldest_signature": "3nVfYSN2SPZWGZa6Ln6NKGRA7XQvZSTVeM8FBGoLnJRDSXhTyPZKfcEXtnfwvJnAynmYQqDbAWJDkUDBGa2vhcFT",
"signatures": [
{
"block_time": 1784894400,
"block_time_iso": "2026-07-24T12:00:00+00:00",
"confirmation_status": "finalized",
"error": null,
"memo": null,
"signature": "5j7s6NiJS3JAkvgkoc18WVAsiSaci2pxB2A6ueCJP4tprA2TFg9wSyTLeYouxPBJEMzJinENTkpA52YStRW5Dia7",
"slot": 351842077,
"succeeded": true
},
{
"block_time": 1784893180,
"block_time_iso": "2026-07-24T11:39:40+00:00",
"confirmation_status": "finalized",
"error": {
"InstructionError": [
0,
{
"Custom": 1
}
]
},
"memo": null,
"signature": "3nVfYSN2SPZWGZa6Ln6NKGRA7XQvZSTVeM8FBGoLnJRDSXhTyPZKfcEXtnfwvJnAynmYQqDbAWJDkUDBGa2vhcFT",
"slot": 351839112,
"succeeded": false
}
]
}Get SOL balance
Get the SOL balance of any wallet or account address, in lamports and in SOL. An address that has never been funded reads as zero rather than as an error.
Inputs
- Address
addresstextRequired - Base58 address of the wallet or account to read, for example '9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM'.
- Cluster
clustertext - Which Solana cluster to read from. Mainnet Beta is the live chain carrying real value; Devnet and Testnet are for trying a workflow out first and their tokens are worth nothing. Defaults to Mainnet Beta.One of:
mainnet-beta(Mainnet Beta (live)),devnet,testnet. Default:mainnet-beta. - Commitment
commitmenttext - How settled the data has to be before the node answers. 'Finalized' is a block that can no longer be rolled back and is the right choice for anything about money; 'confirmed' is a couple of seconds fresher; 'processed' is the newest and the least certain. Defaults to finalized.One of:
finalized(Finalized (safest)),confirmed,processed(Processed (newest)). Default:finalized.
Outputs
addresstext- Address the balance is for
clustertext- Cluster it was read from
context_slotnumber- Slot the node answered at, i.e. how current this reading is
lamportsnumber- Balance in lamports, the chain's own unit (1 SOL = 1,000,000,000)
solnumber- The same balance expressed in SOL
sol_stringtext- The same balance in SOL as an exact decimal string, for balances too large to hold in a number without rounding
Example output
{
"address": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
"cluster": "mainnet-beta",
"context_slot": 351842091,
"lamports": 2497550000,
"sol": 2.49755,
"sol_string": "2.49755"
}Get token balances
List the SPL token balances held by a wallet, one row per token account with its mint and amount. Narrow it to a single mint to ask about one token, such as how much USDC a wallet holds.
Inputs
- Owner address
ownertextRequired - Base58 address of the wallet whose token balances to read. This is the wallet itself, not one of its token accounts.
- Mint address
minttext - Mint address of a single token to report on, for example the USDC mint. Leave blank to return every token account the wallet holds.
- Token program
token_programtext - Which token program to look under when no mint is given. Most tokens use the original SPL Token program; newer ones with transfer fees or interest use Token-2022, and its accounts are invisible to a query for the original.One of:
spl-token(SPL Token (original)),token-2022. Default:spl-token. - Include empty accounts
include_emptytrue/false - Include token accounts holding a zero balance. A wallet keeps an account for every token it has ever touched, so these are left out by default.Default:
false. - Cluster
clustertext - Which Solana cluster to read from. Mainnet Beta is the live chain carrying real value; Devnet and Testnet are for trying a workflow out first and their tokens are worth nothing. Defaults to Mainnet Beta.One of:
mainnet-beta(Mainnet Beta (live)),devnet,testnet. Default:mainnet-beta. - Commitment
commitmenttext - How settled the data has to be before the node answers. 'Finalized' is a block that can no longer be rolled back and is the right choice for anything about money; 'confirmed' is a couple of seconds fresher; 'processed' is the newest and the least certain. Defaults to finalized.One of:
finalized(Finalized (safest)),confirmed,processed(Processed (newest)). Default:finalized.
Outputs
accountslistclustertext- Cluster they were read from
context_slotnumber- Slot the node answered at, i.e. how current this reading is
countnumber- Number of accounts returned
minttext- Mint the query was narrowed to, or null
ownertext- Wallet the balances belong to
token_programtext- Token program the query covered, or null when a mint was given instead
total_accountsnumber- Accounts before empty ones were filtered out
Example output
{
"accounts": [
{
"account_lamports": 2039280,
"amount": "1250450000",
"decimals": 6,
"is_native": false,
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"owner": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
"program": "spl-token",
"pubkey": "FpB2Zh7KrKrDqvJVv3cvtRYYFXFbLPTNCsSCLZbSHqZm",
"state": "initialized",
"token_program_id": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"ui_amount": 1250.45,
"ui_amount_string": "1250.45"
},
{
"account_lamports": 2541280,
"amount": "500000000",
"decimals": 9,
"is_native": true,
"mint": "So11111111111111111111111111111111111111112",
"owner": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
"program": "spl-token",
"pubkey": "7uKZ4pDcCBrDbQCEmqNaGgb1Vv4rBfbjBcvBRRCxAr3m",
"state": "initialized",
"token_program_id": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"ui_amount": 0.5,
"ui_amount_string": "0.5"
}
],
"cluster": "mainnet-beta",
"context_slot": 351842091,
"count": 2,
"mint": null,
"owner": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
"token_program": "spl-token",
"total_accounts": 5
}Get token supply
Get the circulating supply of an SPL token from its mint address, as the raw amount and with the mint's decimals applied.
Inputs
- Mint address
minttextRequired - Base58 mint address of the token, for example 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' for USDC.
- Cluster
clustertext - Which Solana cluster to read from. Mainnet Beta is the live chain carrying real value; Devnet and Testnet are for trying a workflow out first and their tokens are worth nothing. Defaults to Mainnet Beta.One of:
mainnet-beta(Mainnet Beta (live)),devnet,testnet. Default:mainnet-beta. - Commitment
commitmenttext - How settled the data has to be before the node answers. 'Finalized' is a block that can no longer be rolled back and is the right choice for anything about money; 'confirmed' is a couple of seconds fresher; 'processed' is the newest and the least certain. Defaults to finalized.One of:
finalized(Finalized (safest)),confirmed,processed(Processed (newest)). Default:finalized.
Outputs
amounttext- Raw amount in the token's smallest unit, as a string because it can be larger than a number holds exactly
clustertext- Cluster it was read from
context_slotnumber- Slot the node answered at, i.e. how current this reading is
decimalsnumber- Decimal places the mint uses, e.g. 6 for USDC
minttext- Mint the supply is for
ui_amountnumber- The human-readable amount, with those decimals already applied
ui_amount_stringtext- The same human figure as an exact decimal string
Example output
{
"amount": "8492155106448329",
"cluster": "mainnet-beta",
"context_slot": 351842091,
"decimals": 6,
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"ui_amount": 8492155106.448329,
"ui_amount_string": "8492155106.448329"
}Get transaction
Get a confirmed transaction by signature, with what it actually moved worked out: the fee, the instructions it ran, and the SOL and token balance changes per account. Use it to confirm a payment arrived and for how much.
Inputs
- Signature
signaturetextRequired - Base58 transaction signature, the long string an explorer shows for a transaction, or one returned by 'Get recent transactions'.
- Include program logs
include_logstrue/false - Include the program log messages the transaction emitted. They are long and mostly useful for working out why something failed, so they are left out by default.Default:
false. - Cluster
clustertext - Which Solana cluster to read from. Mainnet Beta is the live chain carrying real value; Devnet and Testnet are for trying a workflow out first and their tokens are worth nothing. Defaults to Mainnet Beta.One of:
mainnet-beta(Mainnet Beta (live)),devnet,testnet. Default:mainnet-beta. - Commitment
commitmenttext - How settled the data has to be before the node answers. 'Finalized' is a block that can no longer be rolled back and is the right choice for anything about money; 'confirmed' is a couple of seconds fresher. Defaults to finalized.One of:
finalized(Finalized (safest)),confirmed. Default:finalized.
Outputs
accountslist- Every account the transaction referenced, in order
block_timenumber- Block time as seconds since the Unix epoch
block_time_isotext- The same block time as an ISO 8601 UTC timestamp
clustertext- Cluster it was read from
compute_units_consumednumber- Compute units the transaction used
errorobject- Why it failed, or null when it succeeded
fee_lamportsnumber- Fee paid, in lamports
fee_payertext- Account that paid the fee (the first signer)
fee_solnumber- The same fee expressed in SOL
fee_sol_stringtext- The same fee in SOL as an exact decimal string
instructionslistlogslist- Program log messages, when they were asked for
recent_blockhashtext- Blockhash the transaction was signed against
signaturetext- Signature of the transaction
slotnumber- Slot the transaction landed in
sol_balance_changeslistsucceededtrue/false- Whether the transaction ran without error
token_balance_changeslistversiontext- Transaction version: 'legacy' or 0
Example output
{
"accounts": [
"9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
"3nq5EFTvQxLcRUqcRPBTQjPZbDdBXqzZbYbFAyGtxTfp",
"11111111111111111111111111111111"
],
"block_time": 1784894400,
"block_time_iso": "2026-07-24T12:00:00+00:00",
"cluster": "mainnet-beta",
"compute_units_consumed": 450,
"error": null,
"fee_lamports": 5000,
"fee_payer": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
"fee_sol": 5e-06,
"fee_sol_string": "0.000005",
"instructions": [
{
"accounts": [],
"data": null,
"index": 0,
"info": {
"destination": "3nq5EFTvQxLcRUqcRPBTQjPZbDdBXqzZbYbFAyGtxTfp",
"lamports": 100000000,
"source": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM"
},
"program": "system",
"program_id": "11111111111111111111111111111111",
"type": "transfer"
}
],
"logs": [],
"recent_blockhash": "6vJDPqZmRr2Tp3fnLxvGpJmwLzY6cH9SxiCWJRBhkPYq",
"signature": "5j7s6NiJS3JAkvgkoc18WVAsiSaci2pxB2A6ueCJP4tprA2TFg9wSyTLeYouxPBJEMzJinENTkpA52YStRW5Dia7",
"slot": 351842077,
"sol_balance_changes": [
{
"address": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
"change_lamports": -100005000,
"change_sol": -0.100005,
"post_lamports": 2397545000,
"pre_lamports": 2497550000
},
{
"address": "3nq5EFTvQxLcRUqcRPBTQjPZbDdBXqzZbYbFAyGtxTfp",
"change_lamports": 100000000,
"change_sol": 0.1,
"post_lamports": 100890880,
"pre_lamports": 890880
}
],
"succeeded": true,
"token_balance_changes": [],
"version": "legacy"
}