Public Beta.
preprocessedSubscribe is available on all paid plans
and is metered at 0.1 credits per message (one message per delivered
transaction).What is preprocessedSubscribe?
preprocessedSubscribe is a Helius WebSocket method that streams preprocessed transactions — pre-execution Solana transactions delivered before they reach the processed commitment level. Helius aggregates multiple pre-execution sources — primarily shreds decoded directly as they arrive at the validator, supplemented by preconfirmation signals — and delivers them as a single deduplicated stream of compact binary messages, with no deshredding infrastructure on your side.
Transactions sourced from preconfirmation signals arrive later on this feed than on the dedicated Preconfirmations product, which remains the earliest access to them.
It is the successor to the earlier preprocessed LaserStream (gRPC) product. If you consume preprocessed transactions over gRPC today, switch to this method — it delivers the same class of data over a plain WebSocket connection at lower latency, and the gRPC delivery will be deprecated.
Endpoint
preprocessedSubscribe is served from wss://beta.helius-rpc.com — the Helius Gatekeeper endpoint — rather than mainnet.helius-rpc.com. Authenticate with your API key as a query parameter:
Subscribe
Send a JSON-RPC request with thepreprocessedSubscribe method. params carries the account filters and is required — accountInclude and accountRequired must specify at least one account between them (see Filtering):
Filtering
Every subscription is scoped by the account filters inparams. Filtering happens server-side, so you only receive the transactions you care about:
Filter rules:
- The three filters are combined with AND logic.
accountIncludeandaccountRequiredmust specify at least one account between them — there is no unfiltered full stream.- Accounts are base58-encoded pubkeys. Each list accepts up to 5,000 addresses.
Address lookup table (ALT) resolution
Account filters match more than the transaction’s static account keys — Helius resolves address lookup tables server-side, soaccountInclude, accountExclude, and accountRequired also match accounts a transaction loads through an ALT. Just pass the account’s pubkey; no need to maintain ALT mappings or resolve tables yourself.
Notification payload
Notifications are delivered as binary WebSocket frames (not JSON). Each frame carries a single transaction in a packed byte layout:
Read the fixed 73-byte prefix in order, then decode the remaining bytes to read instructions, accounts, and address-table lookups. The signature is included in the prefix so you can identify and deduplicate a transaction without decoding the full transaction body.
Always read and check the
version byte first. If Helius needs to update the payload format, the version will increment — branch on it so your decoder keeps working across schema changes.
Decoding the transaction
The transaction bytes are forwarded exactly as observed on the network, in the standard wire encoding for the transaction’s version. Legacy and v0 transactions use the signatures-first layout thatbincode produces. Transaction v1 (SIMD-0385) uses a message-first layout with signatures at the end, so bincode fails on v1 payloads. Use a decoder that handles every version:
- Rust:
agave-transaction-viewparses legacy, v0, and v1 transactions in place, without an intermediate copy. This is the recommended option.wincode, the bincode-compatible serializer used by current Solana SDKs, also decodes v1 intoVersionedTransaction. - JavaScript / TypeScript: make sure your library version supports transaction v1. Older
VersionedTransaction.deserializeimplementations only handle legacy and v0. Use@solana/kit8.0+ or@solana/web3.jsv3. See Transaction v1 support.
Example
What data is available?
Each notification carries the signed transaction, its first signature, and its slot. Because delivery happens before execution, the stream does not include:- Execution status or errors
- Pre/post balances or token balance changes
- Log messages or inner instructions
- Compute units consumed
processed commitment.
Backpressure
The stream does not buffer indefinitely for slow consumers. If your client reads too slowly and more than 4,000 messages back up server-side, Helius closes the connection — you receive a clean WebSocket close frame. Drain frames faster than they arrive: keep heavy work such as transaction decoding and strategy logic off the receive loop, and reconnect and resubscribe after a disconnect.Delivery guarantees
Delivery is best-effort, not guaranteed, and there is no historical replay. Clients should:- Reconnect and resubscribe after a connection closes.
- Deduplicate by transaction signature.
- Treat the slot as an observation, not finality.
- Reconcile against a processed or confirmed stream when execution results matter.
Pricing
preprocessedSubscribe is available on all paid plans and metered at 0.1 credits per message — one message per delivered transaction, billed from your plan. See Credits for details.
Related
Preconfirmations
Transactions streamed before they become shreds — the earliest transaction signal.
Raw Shreds (UDP)
Unprocessed shred packets over UDP. You implement the deshredding.
transactionSubscribe
Post-execution transactions with rich filtering and execution metadata.