TxReport
TheTxReport is the versioned JSON object returned by every successful /analyze call. It is a self-contained intelligence report for a single Ethereum transaction. The top-level sections are:
The
schema_version field at the top level is an integer that identifies the shape of the report. Always check this in your client before parsing. The current version is 1.
Intent Classification
ParaLens classifies every transaction into one of 25+intent_kind values by matching the transaction’s value-flow graph against named structural patterns. Each kind maps to a human-readable intent_label for display. The classification also carries a status and confidence to signal how certain the pipeline is.
Example Intent Kinds
Economic Actor Election
Thetx.signer — the wallet address that signed and submitted a transaction — is not always the entity that economically benefits from it. Aggregators, smart wallets, MEV bots, and protocol routers frequently act as intermediaries: the signer may be a keeper contract or a relayer, while the real beneficiary is a different address.
ParaLens elects a single actor address in the classification section. This is the address that the economics (token in/out, net USD, realized PnL) are computed relative to.
actor_matches_signer is false, treat it as a signal to examine the attribution section — the actor is likely a smart wallet, a protocol contract, or an MEV searcher’s bot. Interpreting economics against the signer address in these cases will be misleading.
Inventory Deltas
Inventory deltas are the per-subject, per-asset value changes that underpin the economic summary. Each delta represents a single asset moving into or out of a single subject’s balance during the transaction. Each delta object contains:
Inventory deltas give you the full picture of value movement — not just the actor’s net position, but every address that gained or lost tokens, including protocols, liquidity pools, and fee recipients.
Motifs
Motifs are named structural patterns that the pipeline discovers inside the transaction’s value-flow graph. They are the evidence layer beneath theintent_kind classification.
Common motifs include:
Each motif carries a
scope_id that groups related motifs belonging to the same logical sub-flow. When multiple motifs share a scope_id, they describe different facets of the same structural event.
DisplayMoney — always check `available` before reading `text`
DisplayMoney — always check `available` before reading `text`
Many USD-denominated fields in the TxReport use the DisplayMoney shape rather than a raw number:
Always gate on
available: true before parsing text. When available is false, the text field may be an empty string, a placeholder, or absent. Failing to check this is the most common source of display bugs in ParaLens integrations.Valuation
ParaLens prices all assets at the block height of the transaction — not at the current spot price. This ensures that USD values reflect what assets were worth at the moment the transaction executed. Thepipeline_stats.valuation field reports:
- How many distinct assets were involved in the transaction
- How many of those assets could be priced at the block
DisplayMoney fields will have available: false, and aggregate USD net values may also be unavailable.
Realized PnL — only available for atomic/self-closing flows
Realized PnL — only available for atomic/self-closing flows
The For ordinary swaps, deposits, withdrawals, and transfers,
economics.realized_pnl section reports profit and loss for transactions where value enters and exits in the same atomic context — most commonly on-chain arbitrage.realized_pnl.supported will be false — these transactions do not have a self-closing value loop, so there is no atomically realised gain or loss to report. Multi-transaction FIFO-based PnL is outside the current scope of ParaLens.schema_version
Theschema_version field is an integer at the top level of every TxReport:
schema_version in your client before parsing the rest of the response. When the TxReport shape changes in a backwards-incompatible way, schema_version will be incremented. The current version is 1.