Every sandbox operation that touches the chain (faucet funding, mints,
transfers, redemptions) writes a transaction row before submission and updates
it as the chain confirms. Transactions are your audit trail and your polling
target.
The transaction object
Lifecycle
- Most types go
PENDING → CONFIRMED (terminal) or → FAILED.
- Redeems have a second leg:
PENDING → SETTLING → SETTLED, with the
payout hash in settlementTxHash. See
Redeem cAROUSD.
Synchronous-ish writes
Money-movement calls (/fund, /mint, /transfer, /redeem) block for up to
~90 seconds waiting for the on-chain receipt. If the receipt arrives in
time you get back a CONFIRMED (or SETTLING) transaction; otherwise the call
returns the transaction still PENDING, not an error.
Lazy reconciliation
There is no background cron. Transactions still in flight are reconciled
whenever they are read: fetching a PENDING transaction triggers a receipt
lookup, and reading a SETTLING redeem advances settlement if it can.
The practical rule:
Poll GET /transactions/{id} until the status is terminal (CONFIRMED,
SETTLED, or FAILED). Polling is not just how you observe progress; it’s
what drives it forward.
Listing and filtering
GET /transactions returns a paginated, filterable history:
Responses carry items, page, pageSize (default 20, max 100), and total.
See Track transactions for patterns.
Receipts
Once a transaction has reached the chain, GET /transactions/{id}/nota
produces a notarized Notareum receipt file; see
.nota files. Requesting a receipt for a transaction
that can’t yet be represented (for example, one that never got a hash) returns
400.