For AI agents: the documentation index is at /llms.txt. Markdown versions of pages are available by appending .md to the URL.
Skip to main content

Solana HyperSync

Solana HyperSync is a query API over Solana history. One endpoint, https://solana.hypersync.xyz, serves slots, transactions, instruction calls, logs, account activity (SOL + SPL token) and rewards - filtered server-side and returned as columns you choose, in JSON or Apache Arrow. Query it with the Solana client or any HTTP client.

First query: everything an address touched

Filters run server-side, so what costs an RPC node a getSignaturesForAddress call plus one getTransaction per signature is one request here, returning only the columns you ask for:

export TOKEN="your-api-token" # see https://envio.dev/app/api-tokens
HEAD=$(curl -sS https://solana.hypersync.xyz/height)
curl -sS "https://solana.hypersync.xyz/query" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"from_slot": '$((HEAD - 10000))',
"to_slot": '$HEAD',
"field_selection": {
"account_activity": ["slot", "transaction_id", "account", "pre_balance", "post_balance", "mint", "pre_token_balance", "post_token_balance"]
},
"account_activity": [
{ "account": ["MfDuWeqSHEqTFVYZ7LoexgAK9dxk7cy4DFJWjWMGVWa"] },
{ "owner": ["MfDuWeqSHEqTFVYZ7LoexgAK9dxk7cy4DFJWjWMGVWa"] }
]
}'

Each row is one account's before/after balance in one transaction, and transaction_id is the Solana signature. SOL and SPL token movements share the account_activity table; the two selections are OR-ed because account is the wallet on a SOL row but the token account on a token row, so owner catches the token side. next_slot tells you where to resume.

Swap the filter, keep the shape. The same request filters on a program and discriminator (instruction_calls), a fee payer or signature (transactions), a log kind (logs), or a mint or owner (account_activity) - AND-ed within one selection object, OR-ed across several.

See every available filter →, grab a ready-made query from curl Examples, or build one by clicking in the Query Builder.

How far back history goes

History starts at the earliest slot we have indexed rather than at genesis - mainnet is around slot 403,000,000 as of September 2026 - and we keep extending it backwards as we backfill deeper. A range that straddles that slot is served from it onward; one entirely below it comes back empty rather than erroring, with next_slot not advancing. Need history further back? Tell us on Discord.

You'll need an API token. Every endpoint requires a Bearer token except GET /height and GET /height/sse. Generate one at https://envio.dev/app/api-tokens — see API tokens for details.

Slots vs blocks: some slots have no block (skipped leader, etc.), so a query over [from_slot, to_slot) can return fewer block rows than the slot span implies.

Differences vs EVM HyperSync

ConceptEVMSolana
Unit of progressblockslot
Range boundsfrom_block / to_blockfrom_slot / to_slot
Primary filterlogs, transactions, tracesinstruction_calls, transactions, logs, account_activity
Match keyevent topic + addressprogram ID + discriminator + account positions
LogsContract events (topics + structured data)Program output lines (free-form strings; filter by emitter program_id and parsed kind)
Paginationnext_blocknext_slot

Endpoints

PathDescription
POST /queryJSON query, JSON response.
POST /query/arrowSame query; response is Apache Arrow IPC (smaller and faster to decode than JSON).
GET /heightCurrent synced slot.
GET /height/sseServer-sent events stream of the head slot (see curl Examples).
GET /healthHealth check.
POST /, POST /rpcSolana JSON-RPC-compatible facade for tooling that already speaks JSON-RPC. Method coverage is partial, so prefer POST /query for indexing.

What's coming next

  • Deeper history. The earliest indexed slot keeps moving earlier; backfill depth is prioritized by demand.
  • Decoded, higher-level data on top of the raw tables: IDL-aware decoding and shortcuts for common programs.
  • Wider JSON-RPC coverage on the compatibility facade (POST / / POST /rpc), for tooling that already speaks JSON-RPC.
  • More clients. Today there's the Rust client; Node bindings are next, Python after that.

Want one of these sooner, or hit a missing field or a filter you wish existed? Tell us on Discord or file it on GitHub. Share a sample transaction signature or program ID and we'll map it to a concrete query path - the roadmap here is driven by the use cases people bring us.