Display name of the ledger account at walletAddress. Null when the
wallet has no ledger_account row.
Currency amount, including fees, that were eventually debited from/credited to the account
OptionalbankOptionalbankDisplay name of the bank at bankId, resolved in SQL via a LEFT JOIN to
the bank reference table on its external_id (the slug carried in
bankId). Null when the row has no bankId or the slug matches no bank
row.
OptionalbankOptionalcardCard for VIRTUAL_CARD, undefined otherwise.
Which of the twelve *_transaction_view arms produced this row. Most are
single-member (SWAP, REWARD), because the split follows the views
rather than any coarser idea of what a transaction is.
The coarse grouping of Transaction.method consumers keep rebuilding
by hand — isAsyncMoneyMovementMethod in the admin dashboard is a
startsWith("WITHDRAW_") plus ten method === comparisons, which is this
field spelled as string-sniffing. Branch on category; prefix tests on
method are not a contract.
The other account holder's display name relative to this row's audience.
Null when:
Consumers render the literal label (e.g. "Platform", "Fee", "Return {id}")
by branching on method / subType.
ISO currency code
Display name of the customer (CFX customer) at customerId. Resolved in
SQL from customer.name.
Fully-formatted English description for the to/from cell — already
incorporates counterpartyName where applicable. Examples:
"From John Doe", "To Platform", "{shortenedAddr} SOL",
"Currency exchange", "Return {id}", "Fee", "Card payment",
"Not available".
Consumers render the cell as description ?? "Not available". Use
counterpartyName (the bare name) when you need just the entity for
avatars, logos, or branching — description is the rendered string.
OptionaldeviceApproximate user device location (IP-derived) at the time the originating
quote was created. Populated for deposits and withdrawals that captured a
deviceLocation on the creating request; undefined for all other
transaction types.
Email of the entity if it's an IDENTITY. Null for organizations and for
unresolved entities.
Display name of the entity (identity or organization) that owns this row, resolved in SQL via the existing identity/organization JOINs.
Null only on orphaned-FK rows.
Discriminator for the entity at entityId — IDENTITY (a specific
person), ORGANIZATION, or null when the entity isn't directly resolvable.
Operator-entered reason recorded when a transaction was manually cancelled
or failed (the latest FAILED / RETURNED / CANCELLED status transition's
data.reason). Only deposit / withdrawal / ledger-transfer rails capture
one; null for every other rail and for transitions with no reason.
OptionalfeesTotal fees taken, in sourceCurrency. Sourced from
product_quote.total_fees. May be undefined for LEGACY product_quote rows
(older transactions where fee breakdowns weren't recoverable).
Not necessarily unique, e.g. transfers will appear as credit and debit transactions with the same ID.
Unique row identity: concat_ws('-', id, type, subType) — id-type for a
main leg (NULL subType) and id-type-FEE / id-type-CLEARING / etc. for a
sub-row. Unlike Transaction.id this uniquely identifies a single
read-model row — it matches the (id, type, subType) tuple get()
leg-pins on and the admin-dashboard's transactionRowKey. Deliberately
excludes createdAt: it is stable identity, not a cursor.
OptionalotherThe secondary wallet for transaction
OptionalpaymentSource payment instrument ID for DEPOSIT_* and target payment instrument ID for WITHDRAW_*.
Undefined otherwise.
OptionalpostMOVEUSD token balance after the on-chain transaction (from solana_account_transaction).
OptionalpreMOVEUSD token balance before the on-chain transaction (from solana_account_transaction).
OptionalproductExternal id (pq_...) of the product_quote audit row that priced this
transaction. Present for deposit/withdrawal/swap; undefined for
card/transfer/blockchainDeposit/redemption/feeTransfer/manualMint.
OptionalsourceGross amount the originator put in, in sourceCurrency. Sourced from
product_quote.source_amount. Undefined for non-quoted transaction kinds.
OptionalsourceOptionalsubOptionaltargetNet amount the recipient gets, in targetCurrency. Sourced from
product_quote.target_amount_after_fees. Undefined for non-quoted kinds.
OptionaltargetThe primary wallet for transaction
Null for off-chain transaction types that never touch a wallet (e.g.
REWARD, which moves balance on the reward ledger, not on-chain).
External ID (
acc_…) of the ledger account atwalletAddress. Null when the wallet has noledger_accountrow. Stable identifier for downstream integrations; consumers should prefer this overwalletAddresswhen exposing an account reference.