Home › Canonical Examples
Reference

Canonical classification examples

Seventeen verbatim request/response captures from the live CryptoTaxEdge engine: real transactions, independently sourced, saved exactly as the API returned them. Each file is stamped with its capture date and policy version, and the whole pack is replayed against the live engine nightly: if the engine's answer for any capture drifts, the site build fails rather than publishing a stale claim.

The composition: fourteen identified classifications spanning transfers, swaps, wrapping, liquid staking, reward claims, liquidity add/remove, lending collateral, and bridging (four of those carry a review flag on the treatment with the reason stated in the response), plus three annotated deferrals where the engine declines to guess.

Read the needs_review rows first. 7 of the 17 captures return treatment: needs_review with taxable: null: three where the evidence does not support even naming the category, and four where the category is identified confidently but the treatment is routed to a human. That is the engine declining to guess when the evidence does not support a confident treatment. Each one is annotated below with why it defers. A sample pack of nothing but high-confidence wins would be marketing; deferrals-with-reasons are the product.

The pack

Captured 2026-08-12, with three examples re-captured 2026-08-18, under policy version us-default-2026-08. Every row links to the raw JSON, which validates against the published cte-classification-v1 schema. Wire values are documented in the classification taxonomy and enumerated in the Classification Standard v1.1. Confidence is a corroboration signal, not an accuracy percentage: it reflects how well the available evidence agreed on the classification, and it gates one decision, whether the record is served as a treatment or routed to a human. Scores are not comparable across transactions and are not a probability that the treatment is correct.

CaptureChainCategoryTreatmenttaxableConfidenceProtocol
01-transfer.jsonethereumtransferneeds_reviewnull60ERC-20 Transfer
02-transfer.jsonethereumtransferneeds_reviewnull60Native ETH transfer (no protocol)
03-swap.jsonethereumswapdisposaltrue95(none)
04-swap.jsonsolanaswapdisposaltrue80Jupiter
05-swap.jsonsolanaswapdisposaltrue80Pump amm
06-wrap.jsonethereumwrapnon_taxablefalse95WETH Deposit
07-unwrap.jsonethereumunwrapnon_taxablefalse85WETH
08-collateral_supply.jsonethereumliquid_staking_mintnon_taxablefalse95Lido
09-reward.jsonethereumrewardneeds_reviewnull70(none)
10-liquidity_add.jsonethereumliquidity_adddisposaltrue95Curve Finance
11-liquidity_remove.jsonethereumliquidity_removeneeds_reviewnull95Curve Finance
12-collateral_supply.jsonethereumcollateral_supplynon_taxablefalse99Aave V3
13-collateral_withdraw.jsonethereumcollateral_withdrawnon_taxablefalse85Aave V3
14-bridge_transfer.jsonethereumbridge_transfernon_taxablefalse85Across Protocol
15-needs_review.jsonethereumneeds_reviewneeds_reviewnull0AlloXCheck (unidentified protocol)
16-needs_review.jsonethereumneeds_reviewneeds_reviewnull0Uniswap V4
17-needs_review.jsonethereumneeds_reviewneeds_reviewnull0ERC-4337 EntryPoint v0.7

Why the engine defers

The three captures whose category is needs_review are not failures to compute; they are cases where asserting a treatment would require information the transaction hash alone cannot provide.

Four further rows identify the category confidently but flag the treatment for review, with the reason stated in the response itself. 01-transfer.json and 02-transfer.json are one-way sends whose recipient could not be verified as the taxpayer's own wallet. From a hash alone the engine holds no evidence about who the recipient is, so booking either as a non-taxable self-transfer would silently drop a possible IRC §1001 disposal (a payment, a sale, or a gift) out of the books. The house non-taxable default still covers unverified incoming transfers, where a wrong call at least leaves an asset in the books carrying a basis question that a later disposal forces someone to answer; an unflagged outgoing send leaves no trace at all, so that direction goes to a human instead. Confirming that the recipient is the client's own wallet is what settles the treatment. 09-reward.json and 11-liquidity_remove.json flag for different reasons: a reward claim where the income amount needs confirming, and a liquidity withdrawal whose harvest component should be split from principal before booking. The remove defers because of that withdraw-and-harvest income-split check (a possible reward leg received alongside the pool principal), not because the exit policy differs: the principal's exit follows the same house disposal default as the add. Flagged, not guessed.

What to do with these

Use them as fixtures for an integration before you mint a key, as ground truth for what the classification API actually returns (including the shape of a deferral), or as a check against the OpenAPI 3.1 spec. To reproduce any row live, enter its transaction hash in the Classification Explorer.

Not tax advice. CryptoTaxEdge is software, not a licensed tax advisor. These captures are engine output for specific public transactions, informational only. Verify results and consult a qualified tax professional before filing.