Alchemy supports the Photon indexer, an open-source ZK Compression indexer maintained by Helius. These endpoints let you read ZK Compressed Solana state — accounts, token balances, and transaction signatures — through the same familiar JSON-RPC surface used for standard Solana calls.
ZK Compression stores most of an account's data offchain in a merkle tree while keeping a small commitment onchain, letting applications mint and manage thousands of accounts or tokens at a fraction of the normal rent cost. Photon indexes those compressed accounts and exposes them through the methods below, following the Photon API specification.
These endpoints are served through the standard Solana Alchemy endpoints (https://solana-mainnet.g.alchemy.com/v2/<API_KEY> and https://solana-devnet.g.alchemy.com/v2/<API_KEY>), so you can call them with the same client you already use for Solana Core RPC.
| Method | Function | CU cost | Throughput CUs (how many CUs this will count for towards your CUs per second capacity) |
|---|---|---|---|
| getCompressedAccount | Returns the compressed account with the given address or hash. | 120 | 100 |
| getCompressedAccountProof | Returns a merkle proof for the compressed account with the given hash. | 120 | 100 |
| getCompressedAccountsByOwner | Returns the owner's compressed accounts. | 120 | 100 |
| getCompressedBalance | Returns the balance for the compressed account with the given address or hash. | 120 | 100 |
| getCompressedBalanceByOwner | Returns the total balance of the owner's compressed accounts. | 120 | 100 |
| getCompressedMintTokenHolders | Returns the owner balances for a given mint in descending order, for compressed tokens. | 120 | 100 |
| getCompressedTokenAccountBalance | Returns the balance for a given compressed token account. | 120 | 100 |
| getCompressedTokenAccountsByDelegate | Returns the compressed token accounts that are partially or fully delegated to the given delegate. | 120 | 100 |
| getCompressedTokenAccountsByOwner | Returns the compressed token accounts owned by the given Pubkey. | 120 | 100 |
| getCompressedTokenBalancesByOwner | Returns the compressed token balances for the given Pubkey. | 120 | 100 |
| getCompressedTokenBalancesByOwnerV2 | Returns the compressed token balances for the given Pubkey, with pagination. | 120 | 100 |
| getCompressionSignaturesForAccount | Returns the signatures of transactions that closed or opened a compressed account with the given hash. | 120 | 100 |
| getCompressionSignaturesForAddress | Returns the signatures of transactions that have modified an address's compressed account. | 120 | 100 |
| getCompressionSignaturesForOwner | Returns the signatures of transactions that have modified the owner's compressed accounts. | 120 | 100 |
| getCompressionSignaturesForTokenOwner | Returns the signatures of transactions that have modified the owner's compressed token accounts. | 120 | 100 |
| getLatestCompressionSignatures | Returns the signatures of the latest transactions that used the compression program. | 120 | 100 |
| getLatestNonVotingSignatures | Returns the signatures of the latest non-voting transactions. | 120 | 100 |
| getMultipleCompressedAccountProofs | Returns multiple compressed account proofs. | 120 | 100 |
| getMultipleCompressedAccounts | Returns multiple compressed accounts, identified by address or hash. | 120 | 100 |
| getMultipleNewAddressProofs | Returns proofs that the new addresses are not taken and can be created. | 120 | 100 |
| getMultipleNewAddressProofsV2 | Returns proofs that the new addresses are not taken and can be created (v2). | 120 | 100 |
| getTransactionWithCompressionInfo | Returns the transaction data for the given signature along with parsed compression info. | 120 | 100 |
| getValidityProof | Returns a single ZK Validity proof for compressed accounts and new addresses. | 1200 † | 500 † |
| getValidityProofV2 | Returns a single ZK Validity proof for compressed accounts and new addresses (v2). | 1200 † | 500 † |
| getIndexerHealth | Returns an error if the indexer is stale by more than a configured number of blocks, otherwise returns ok. | 120 | 100 |
| getIndexerSlot | Returns the slot of the latest block the indexer has processed. | 120 | 100 |
† getValidityProof and getValidityProofV2 run against the prover service and use an extended 30,000 ms request timeout.