Skip to main content
A transaction is the source of truth for “money moved”. Every successful charge — MPP, CUA, or simulated — writes a transactions row tied to its agent and intent. Transactions are immutable post-completion; refunds and disputes write new rows that reference the original.

The transaction model

Lifecycle

For MPP, the rail emits mpp.transaction.completed on success. For CUA and card auths, you’ll see transaction.authorization followed by transaction.settlement, then transaction.completed.

List transactions

Cursor-paginated. Supports filters by agent, card, intent, merchant, status, date range.

Refunds

The card issuer’s webhook drives the actual reversal — when settled, the original transaction’s status flips to reversed and transaction.refunded fires.

Disputes

See Disputes. One transaction can have at most one open dispute. Disputes carry evidence (receipt, shipping, communication, etc.) and a status FSM.

Memos and comments

Webhooks

Plan-tier history retention

Older transactions are pruned automatically; export via /audit/export for long-term retention.

Surfaces

Next

Disputes

Challenge a transaction.

Intelligence

Analytics, anomaly detection, audit on top of transactions.

Webhooks

React to transaction events in real time.