Skip to main content

Why migrate?

The Enhanced Transactions API is a legacy product in maintenance mode: it still works, but it is not receiving new parser types or feature work. Its successor is Parsed Events, which decodes instructions through the IDL catalog that also powers Parsed Streams. The difference is in how transactions are decoded. Enhanced Transactions classifies a transaction into one of a fixed list of event types (TRANSFER, SWAP, NFT_SALE, …) and returns a pre-built summary for the types it knows. Parsed Events decodes every instruction against the program’s own IDL — 3,600+ programs — into named arguments and named accounts, and builds the summary on top: Parsed Events is in open beta on paid plans. The API may still change before general availability; Enhanced Transactions keeps working in the meantime, so you can migrate at your own pace.

Endpoint mapping

Both Parsed Events methods are POST requests to https://mainnet.helius-rpc.com, authenticated with the same api-key query parameter you already use: The history endpoint moves all inputs from query-string parameters into a JSON body. Request bodies reject unknown fields, so typos fail loudly instead of being silently ignored.

Before and after

The same task — fetch parsed history for a wallet — in both APIs:

Parameter mapping

Parse Transactions

POST /v0/transactionsPOST /v1/parsed-events/transactions New options with no old equivalent: includeRawTransaction returns the original Solana transaction payload alongside the parsed result.

Transaction History

GET /v0/addresses/{address}/transactionsPOST /v1/parsed-events/transaction-history. Every query parameter becomes a JSON body field: Three defaults change along the way:
  • limit defaults to 100 instead of 10.
  • commitment defaults to confirmed instead of finalized; processed is not supported.
  • sortOrder keeps the same asc/desc values with desc as the default.
For paging, prefer paginationToken from the previous response over beforeSignature — see Simplify pagination below. The old type parameter has no Parsed Events equivalent — there is no server-side transaction-type filter. Filter client-side on parsed.summary.type (swap, transfer, add_liquidity, …), or on the decoded instructions themselves, which is more precise than the old fixed types. For real-time type-specific feeds, Parsed Streams filters server-side at the instruction level.

Response field mapping

Enhanced Transactions returns a flat array of enriched transactions. Parsed Events wraps each result in an envelope — { signature, parserStatus, parsed } — and history responses wrap the array in a page object with paginationToken. The parsed fields map as follows: And the biggest change is a new field with no old equivalent: parsed.instructions[] contains every top-level and inner instruction in execution order, with decoded.args and decoded.accounts named from the program’s IDL. Where Enhanced Transactions gave you one event summary per transaction, Parsed Events gives you the summary and the full decoded instruction list. See Parsed Response for every field.

Migration steps

1

Swap the endpoints

Point Parse Transactions calls at POST /v1/parsed-events/transactions and history calls at POST /v1/parsed-events/transaction-history. Same host, same api-key query parameter. History requests change from GET with query parameters to POST with a JSON body — move each parameter per the mapping above.
2

Update the response handling

Unwrap the new envelope: check parserStatus === "OK", then read fields from parsed instead of the top level. Rename timestamp to blockTime, read description and type from summary (guarding for null), and divide rawTokenAmount by 10^decimals where the old code read tokenAmount.
3

Replace type filtering

Where the old code passed type=..., filter the returned items client-side on parsed.summary.type or on parsed.instructions[] — for example, “instructions where programId is Jupiter and instructionName is route” replaces type=SWAP with something you can actually verify. If the type filter existed to drive a real-time feed, move that consumer to Parsed Streams, which filters at the instruction level server-side.
4

Simplify pagination

Replace the before-signature cursor loop with paginationToken:
The loop ends when paginationToken is missing. The old runtime-search errors (“Failed to find events within the search period”) and their continuation-signature handling disappear entirely — delete that code.
5

Verify against the old output

For a sample address, fetch the same page from both APIs and compare the signature sets, fees, and transfer amounts. Then deploy and remove the old code path. Enhanced Transactions keeps working while you migrate — there is no forced cutoff.

Behavior differences to review

  • Commitment defaults. History defaults to confirmed where the old endpoint defaulted to finalized. Pass commitment: "finalized" explicitly if your pipeline depends on finality. processed is not supported.
  • Per-item errors. A signature that cannot be parsed no longer fails the request — it comes back as an item with parserStatus: "ERROR" and a parserError. Handle it per item instead of per request.
  • Summary coverage. summary is null for transactions with no recognized transaction-level action. The old API returned type: "UNKNOWN" in that case; the new API still gives you every decoded instruction to work with.
  • Access. Parsed Events is in open beta on paid plans, and the API may still change before general availability.

Let an AI agent do the migration

If you use Claude Code, Cursor, or another coding agent, paste the prompt below into your repository’s agent session. It finds Enhanced Transactions call sites and rewrites them.
The prompt is self-contained — the agent doesn’t need access to this page. For agent-ready docs, MCP search, and skills, see Helius for AI agents.

Next steps

Parsed Events Quickstart

Parse your first transaction, fetch address history, and page through results.

Parsed Response

Field reference for parsed transactions, transfers, and instructions.

Parsed Streams

The same decoding in real time over WebSocket, filtered server-side.

getTransactionsForAddress

Raw transaction history with token-account support and server-side filters.