What is the Indexer?
The Umbra indexer is an off-chain service that continuously watches the Solana chain for Umbra program transactions, extracts UTXO commitments and encrypted ciphertexts, and stores them in a queryable database. It acts as the data layer that bridges on-chain Merkle tree state with the SDK and any other client that needs to interact with the mixer. It exposes two primary capabilities:- UTXO data - fetch encrypted UTXO ciphertexts by tree or absolute index. The SDK uses this to scan for UTXOs addressed to your X25519 key by trying to decrypt each ciphertext.
- Merkle proofs - generate a Merkle inclusion proof (authentication path) for any leaf. This is required to construct a valid claim transaction on-chain.
Base URLs
- Mainnet -
https://acqzie0a1h.execute-api.eu-central-1.amazonaws.com
Response Format
All endpoints return Protobuf (application/x-protobuf) regardless of the Accept header. Protobuf is used by design - binary data like 32-byte hash arrays and ciphertext payloads compress significantly better than JSON.
The health endpoints are the exception: they support both JSON (default) and Protobuf via Accept header negotiation.
Rate Limiting
All endpoints are subject to rate limiting. Exceeded limits return429 Too Many Requests. Contact the Umbra team if you need higher rate limit allowances for production workloads.
Tree Structure
UTXO commitments are organized into Indexed Merkle Trees, each holding up to 1,048,576 leaves (depth-20). When a tree is full, the indexer begins a new tree at the next sequential index.- Tree 0 holds leaves at absolute indices
0to1,048,575 - Tree 1 holds leaves at absolute indices
1,048,576to2,097,151 - And so on
SDK Integration
When you passindexerApiEndpoint to getUmbraClientFromSigner, the SDK automatically constructs two internal providers:
client.fetchUtxoData- callsGET /v1/utxosto retrieve ciphertext batches for decryptionclient.fetchMerkleProof- callsGET /v1/trees/{tree_index}/proof/{insertion_index}for each claimable UTXO
getFetchClaimableUtxosFunction. You do not need to call the indexer directly when using the SDK.
Planned Improvements
The SDK currently calls the indexer directly using the
indexerApiEndpoint you provide. We are planning to migrate this to an IP Obfuscation Service that will proxy indexer requests through an anonymizing relay, so that fetching your UTXOs does not leak your IP address to the indexer. This will be a transparent upgrade — the SDK interface will not change.API Reference
Stats
Aggregate statistics for the entire UTXO index.
Health
Basic, detailed, liveness, and readiness health checks.
Tree Metadata
Current root hash, leaf count, and UTXO count for a specific tree.
Tree UTXOs
Paginated UTXO records for a specific tree.
Merkle Proof
Generate an inclusion proof for a specific leaf.
Global UTXOs
Paginated UTXO queries spanning all trees.
Single UTXO
Fetch a single UTXO by absolute index.