Skip to main content
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 scheduled-transaction (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 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.
preprocessedSubscribe is a best-effort, pre-execution signal, not a commitment level. A streamed transaction can fail, be dropped, or land on a different fork. Reconcile against a processed or confirmed stream before treating it as final.

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:
Each API key is limited to 10 concurrent connections/subscriptions.

Subscribe

Send a JSON-RPC request with the preprocessedSubscribe method. params carries the account filters and is required — accountInclude and accountRequired must specify at least one account between them (see Filtering):
The server acknowledges the subscription with a JSON text frame containing the subscription ID:
After this acknowledgement, transaction updates arrive as binary WebSocket frames — see Notification payload.

Filtering

Every subscription is scoped by the account filters in params. Filtering happens server-side, so you only receive the transactions you care about:
Filter rules:
  • The three filters are combined with AND logic.
  • accountInclude and accountRequired must 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, so accountInclude, 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 bincode-deserialize the remaining bytes into a VersionedTransaction 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.

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
Think of it as receiving the “proposal” without the “result” — you see what the sender tried to do, but not what actually happened. Account and program state updates don’t exist yet at this stage either; if you need real-time account state, use LaserStream gRPC at 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:
  1. Reconnect and resubscribe after a connection closes.
  2. Deduplicate by transaction signature.
  3. Treat the slot as an observation, not finality.
  4. 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.

Preprocessed Transactions (gRPC)

The same pre-execution data over gRPC. Will be deprecated in favor of this method.

Preconfirmations

Scheduled 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.