Skip to main content
Quick answers to common questions about ParaLens.
Yes, completely free. There is no signup, no billing, and no rate limits communicated at this time. You can start making requests to the API immediately without creating an account.
No authentication is required today. You can call any endpoint without providing credentials.Future-compatible clients should be prepared to send an x-api-key header as authentication may be introduced in future versions:
The server is already prepared to handle this header but does not currently enforce it. Adding it to your client now will make any future migration seamless.
Ethereum mainnet only. The chain field in the request body accepts the following equivalent values:Support for other EVM-compatible chains is not currently available.
ParaLens fetches live data on every request. There is no caching on the server side — each call to /analyze triggers a fresh RPC fetch and full analysis run.You can call /analyze for any confirmed Ethereum transaction regardless of how old it is, from the genesis block to the most recently confirmed block.
No. ParaLens requires a confirmed transaction with a complete execution trace. Pending transactions have not yet been executed, so no trace data exists to analyze.Once a transaction is confirmed and included in a block, it can be analyzed immediately.
Classification accuracy depends on the transaction type:
  • Common patterns — Swap, Transfer, LiquidityProvision, and similar well-defined operations are classified with high confidence using structural proof derived from execution traces.
  • Novel or obfuscated patterns — Transactions that do not match a known structural signature may be classified as UnknownComplexFlow.
For per-transaction certainty, check two fields in the response:When status is Suspected or confidence is Low, treat the classification as a best-effort signal rather than a definitive label.
The API processes one transaction per request. For batch use cases, call /analyze in parallel for each transaction hash. Because the API is fully stateless, all requests are independent and safe to parallelize.Since confirmed transactions are immutable, consider caching responses on your side to avoid redundant API calls for hashes you have already analyzed.
The API is stateless — requests are not cached or stored server-side. Each call is processed independently and no data is persisted between requests.
net_usd (and related USD fields) require pricing data for every asset involved in the transaction at the block height where it was confirmed. If any asset cannot be priced, the aggregate USD values will be unavailable.This commonly occurs for:
  • Obscure or low-liquidity tokens with no reliable on-chain price feed
  • Newly deployed contracts with no DEX liquidity at the time of the block
  • Very old transactions involving assets that no longer exist or trade
Check economics.valuation for a breakdown of which assets were priced and which were not. The unpriced_assets array lists every asset for which a price could not be resolved.USD fields use the DisplayMoney structure: { text, available, reason }. Always check available before rendering text — when available is false, text is a non-numeric placeholder and reason describes why the value could not be computed.
These two fields measure different things:
  • inflow_usd — the gross USD value of assets received by the economic actor, with no offset for outflows
  • net_usd_before_gas — the net USD change for the economic actor (inflows minus outflows), before gas costs are subtracted
Example: a swap of 10,000USDCinto10,000 USDC into 9,998 WETH:Use inflow_usd when you want to show the value of what was received. Use net_usd_before_gas when you want to show economic gain or loss.
realized_pnl is the profit extracted within a single atomic transaction. It is calculated only for self-closing flows — transactions where the full position opens and closes within the same execution, such as atomic arbitrage (e.g., flash-loan-backed arb that starts and ends in the same token).realized_pnl.supported will be false for:
  • Normal swaps (a position opens but does not close in the same transaction)
  • Liquidity deposits and withdrawals
  • Long-lived positions managed across multiple transactions
For these cases, use economics.net_usd_before_gas as a proxy for value captured.
pipeline_stats exposes the internal metrics from the analysis pipeline run for that transaction. It includes counts such as:
  • frames — number of execution trace frames processed
  • Log entries — number of on-chain events decoded
  • Graph nodes / edges — size of the internal call and flow graph
  • Structural scopes — number of distinct execution scopes identified
Higher numbers across these fields indicate a denser, more complex transaction. For most use cases you can ignore pipeline_stats, but it is useful for:
  • Debugging — understanding why a complex transaction took longer or produced an unexpected result
  • Advanced analysis — correlating transaction complexity with classification confidence or latency