# getProgramAccounts
Solana API method that returns all accounts owned by the provided program public key.
# Temporary limitations
Information
This method is enabled for elastic Solana devnet nodes on US Ashburn (ash1) and Amsterdam (ams1) with a rate limit of 2 requests per second (RPS).
On elastic Solana mainnet nodes the getProgramAccounts
method also has a rate limit of 2 requests per second (RPS). If the rate limit is exceeded, you will get the following response:
{
"jsonrpc":"2.0",
"error":{
"code":-32005,
"message":"method request rate exceed",
"data":{
"method_name":"getProgramAccounts",
"try_again_in":"315.794147ms"
}
},
"id":1
}
Parameters:
<string>
— the program's public key, as a base58 encoded string.<object>
— (optional) configuration object containing the following fields:commitment: <string>
— (optional) commitment.encoding: <string>
— (optional) encoding for account data, eitherbase58
(slow),base64
,base64+zstd
, orjsonParsed
.base58
is limited to account data of less than 128 bytes.base64
will return base64 encoded data for account data of any size.base64+zstd
compresses account data using Zstandard and base64 encodes the result.jsonParsed
encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. IfjsonParsed
is requested, but a parser cannot be found, the field falls back to base64 encoding, detectable when the data field is<string>
type.dataSlice: <object>
— (optional) limit the returned account data using the providedoffset: <usize>
andlength: <usize>
fields; only available for base58, base64, or base64+zstd encodings.filters: <array>
— (optional) filter results using up to 4 filter objects; the account must meet all filter criteria to be included in results.with context: bool
— (optional) wrap the result in an RPC response JSON object.minContextSlot: <number>
— (optional) set the minimum slot to evaluate the request.
Filters: (optional)
memcmp: <object>
— compare a provided series of bytes with program account data at a particular offset. Fields:offset: <usize>
— offset into program account data to start the comparison.bytes: <string>
— data to match as an encoded string.encoding: <string>
— encoding for filter bytes data, eitherbase58
orbase64
. Data is limited in size to 128 or fewer decoded bytes.
dataSize: <u64>
— compare the program account data length with the provided data size.
Returns:
By default the result will be an array of JSON objects. If withContext
flag is set, the array will be wrapped in an RPC response JSON object.
account: <object>
— a JSON object with the following sub fields:data: <object>
— token state data associated with the account, either as encoded binary data or in JSON format{<program>: <state>}
.executable: <bool>
— boolean indicating if the account contains a program (and is strictly read-only).lamports: <u64>
— number of lamports assigned to this account, as u64.owner: <string>
— the base58 encoded public key of the program this account has been assigned to.rentEpoch: <u64>
— the epoch at which this account will next owe rent, as u64.
pubkey: <string>
— the account public key as a base58 encoded string.
Example:
- Solana web3.js
- Solana.py
- cURL
import { PublicKey, Connection } from "@solana/web3.js"
const nodeUrl = "CHAINSTACK_NODE_URL"
(async () => {
const MY_TOKEN_MINT_ADDRESS = new PublicKey("BUGuuhPsHpk8YZrL2GctsCtXGneL1gmT5zYb7eMHZDWf");
const PROGRAM_ID = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
const connection = new Connection(nodeUrl);
const accounts = await connection.getProgramAccounts(
PROGRAM_ID,
{
dataSlice: {
offset: 0, // number of bytes
length: 0, // number of bytes
},
filters: [
{
dataSize: 165, // number of bytes
},
{
memcmp: {
offset: 0, // number of bytes
bytes: MY_TOKEN_MINT_ADDRESS, // base58 encoded string
},
},
],
}
);
console.log(
`Found ${accounts.length} token account(s) for mint ${MY_TOKEN_MINT_ADDRESS}`
);
console.log(accounts);
})();