> For the complete documentation index, see [llms.txt](https://docs.triton.one/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.triton.one/solana/reading-account-state.md).

# Reading account state

Choose how to read Solana account state: standard JSON-RPC, Cloudbreak for getProgramAccounts and token queries, Account Sync, or the Metaplex DAS API.

Solana keeps all of its state in accounts: a wallet, each token balance, a DEX market, an open order, and the program code itself. The standard way to read this state is Solana JSON-RPC polling, supported by every Triton endpoint.

However, Agave nodes make some of these reads slow or expensive as you scale:

* **Set queries like `getProgramAccounts` (gPA).** Fetching every account a program owns scans the program's entire account set and applies filters only after each account is loaded, so an unindexed scan gets slow and can time out on large programs.
* **Polling for fresh state.** Re-fetching the same accounts on a loop leaves your data stale between calls and burns requests (and rate limits) against the same endpoint.
* **NFT and compressed NFT.** Assembling an asset's owner, metadata, and (for compressed NFTs) its Merkle proof from raw accounts takes custom indexing, decompression, and many calls.

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><i class="fa-server">:server:</i> <strong>Standard RPC</strong></td><td>The standard Solana JSON-RPC account methods are supported. Program and token account queries route through Cloudbreak; most other account reads are served by Triton's standard RPC nodes.</td><td><a href="/solana/rpc-methods/readme.md">Account methods</a></td></tr><tr><td><i class="fa-database">:database:</i> <strong>Cloudbreak</strong></td><td>getProgramAccounts and SPL token account queries served from Cloudbreak indexes. Your requests are routed through Cloudbreak automatically, with nothing for you to set up.</td><td><a href="/solana/reading-account-state/cloudbreak-indexed-accounts.md">Cloudbreak Accounts</a></td></tr><tr><td><i class="fa-arrows-rotate">:arrows-rotate:</i> <strong>Account Sync</strong></td><td>Account reads served from a local cache kept fresh by a live gRPC or WS stream, with the method names you already call.</td><td><a href="/solana/reading-account-state/account-sync.md">Account Sync</a></td></tr><tr><td><i class="fa-image">:image:</i> <strong>DAS API</strong></td><td>One API to fetch ownership, metadata, and balances for NFTs, cNFTs, and tokens, via the Metaplex Digital Asset Standard, an extension of JSON-RPC.</td><td><a href="/solana/reading-account-state/metaplex-das-api.md">Metaplex DAS API</a></td></tr></tbody></table>

## Read path for each method

Every account-read method is served by one of these. Standard RPC covers the methods the node answers directly; the rest route through a specialized service.

| Service                                                                             | Account-read methods                                                                                                                                                                                                                                                                                           |
| ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Standard RPC** (Triton's standard RPC nodes)\*                                    | `getAccountInfo`, `getMultipleAccounts`, `getBalance`, `getTokenAccountBalance`, `getTokenLargestAccounts`, `getTokenSupply`, `getSupply`, `getVoteAccounts`, `getStakeMinimumDelegation`, `getMinimumBalanceForRentExemption`                                                                                 |
| **Cloudbreak** (your requests route through it by default, no changes on your side) | `getProgramAccounts` (including Token and Token-2022 program queries with `memcmp` filters), `getTokenAccountsByOwner`, `getTokenAccountsByDelegate`                                                                                                                                                           |
| **Account Sync** (served from RAM via SDK)                                          | `getAccountInfo`, `getMultipleAccountsInfo`, `getParsedAccountInfo`, `getMultipleParsedAccounts` (and `*AndContext` variants)                                                                                                                                                                                  |
| **DAS API** (Metaplex JSON-RPC extension)                                           | `getAsset`, `getAssets` (also `getAssetBatch`), `getAssetProof`, `getAssetProofs` (also `getAssetProofBatch`), `getAssetsByOwner`, `getAssetsByAuthority`, `getAssetsByCreator`, `getAssetsByGroup`, `searchAssets`, `getTokenAccounts`, `getNftEditions`, `getSignaturesForAsset` (also `getAssetSignatures`) |

\*`getTokenLargestAccounts` is served by the DAS index on most endpoints and, on shared infrastructure, billed as a standard RPC call.

{% hint style="info" %}
The single and multiple account reads (`getAccountInfo`, `getMultipleAccounts`) are served by Triton's standard RPC nodes by default, but you can also use Account Sync (the `@triton-one/triton-sdk` SDK) to resolve them from your local cache instead of a network call.
{% endhint %}

Depending on your use case, your build might combine multiple read paths:

| Use case                                                                                    | Read path                                                                                                                                                                                                                             |
| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Reading many program accounts at scale** (DEX, lending, indexers)                         | Cloudbreak serves indexed `getProgramAccounts` and token queries, so repeated filter shapes avoid a full account scan.                                                                                                                |
| **Tracking a set of accounts live** (any frontend or backend with a large polling codebase) | Account Sync keeps your existing code, stores the accounts locally in RAM, backed by a stream, and serves your reads from there without an RPC request for each read.                                                                 |
| **Wallets and NFT apps**                                                                    | DAS API fetches assets and metadata you need in one call, while Cloudbreak or Account Sync handle user balance lookups.                                                                                                               |
| **Low-latency trading and market making**                                                   | We recommend streaming account updates with gRPC ([Dragon's Mouth](/solana/real-time-streaming/dragon-s-mouth-grpc.md)). If you want account reads in a web3.js-shaped client, Account Sync reduces read latency compared to polling. |

## Limitations

* **`getLargestAccounts`.** It is disabled on Triton's mainnet endpoints and returns HTTP `410` with `The RPC call or parameters have been disabled`.
* **`requestAirdrop`.** It is disabled on Triton's mainnet endpoints and returns HTTP `410`. See [requestAirdrop](/solana/rpc-methods/utility-methods/requestairdrop.md) for devnet airdrops and the faucet.
* **`getTokenAccountsByMint`.** It is not available on shared endpoints and returns JSON-RPC error `-32601 Method not found`.
* **`getTokenLargestAccounts`.** It is served from the DAS index on most endpoints and returns the top 20 accounts. If you pass it a config, set `commitment` to `confirmed` or `finalized`; `processed` and an empty `{}` return an error.
* **Light Protocol (ZK Compression).** Accounts owned by the Account Compression program `compr6CUsB5m2jS4Y3831ztGSTnDpnKJTKS95d64XVq` are excluded from Yellowstone streams by default. On shared endpoints, `getProgramAccounts` for them is served by standard RPC nodes, without Cloudbreak's index.
* **Token program filters on shared endpoints.** `getProgramAccounts` calls for SPL Token and Token-2022 need a `memcmp` with the full 32-byte owner pubkey at offset `32` or the full mint pubkey at offset `0`. Calls without one are rejected with HTTP `403`.
* **System Program filter on shared endpoints.** `getProgramAccounts` calls for the System Program need a `memcmp` filter. Calls without one are rejected with HTTP `403`.
* **Commitment.** Cloudbreak ingests from a gRPC stream at `confirmed` commitment, so `processed` requests on the methods routed through Cloudbreak are answered at `confirmed` instead.
* **Batches.** `getProgramAccounts`, `getTokenAccountsByOwner` and `getTokenAccountsByDelegate` are split out of JSON-RPC batches and processed individually, as is any batch that mixes methods served by different backends.
* **Result order.** Results can come back in a different order from your requests, so match each result to its request by `id`.

## Pricing

Account Sync usage is billed under your plan. See [triton.one/pricing](https://triton.one/pricing).

## What's next

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><i class="fa-play">:play:</i> <strong>Quickstart</strong></td><td>Query account state via JSON-RPC and set up Account Sync.</td><td><a href="/solana/reading-account-state/quickstart.md">Reading account state quickstart</a></td></tr><tr><td><i class="fa-list-check">:list-check:</i> <strong>Best practices</strong></td><td>Reduce latency and cost on your account state reads.</td><td><a href="/solana/reading-account-state/best-practices.md">Reading account state best practices</a></td></tr></tbody></table>

***

<i class="fa-life-ring">:life-ring:</i> Contact support by clicking the chat icon in your [customer dashboard](https://customers.triton.one)\ <i class="fa-briefcase">:briefcase:</i> Sales questions? [Contact us](https://triton.one/contact)\ <i class="fa-sparkles">:sparkles:</i> AI agent? Read [llms.txt](https://docs.triton.one/llms.txt)\ <i class="fa-rss">:rss:</i> Follow updates: [Blog](https://blog.triton.one) · [X](https://x.com/triton_one) · [YouTube](https://www.youtube.com/@triton_one_ltd) · [Telegram](https://t.me/tritonone) · [GitHub](https://github.com/rpcpool)
