Cessio Docs
Guides

Tracking settlement

Following your trade from "won" to the on-ledger receipt

The event sequence after a win

quote.status {status: "won"}
  └► trade.step {step: "trade_dvp"}   main swap Dvp signed
  └► trade.step {step: "fee_dvp"}     fee Dvp signed
  └► trade.step {step: "allocated"}   every leg's funds locked
  └► trade.settled {TradeDto}         atomic settle executed
        — or —
     trade.failed {tradeId, rfqId, reason}

trade.step.refs carries the contract ids each phase created. These events are ephemeral — they exist only on the stream. The durable record is the TradeDto.

The proof

trade.settled (and later GET /maker/trades) carries:

{
  "tradeId": "…", "price": "97300.0", "fee": "121.625",
  "settledAt": "2026-07-19T10:00:02Z",
  "ledger": {
    "updateId": "1220ab…",
    "receiptCids": ["00c1…", "00d2…"]
  }
}

The ledger block is the on-ledger proof of the trade — what updateId and receiptCids are, and what they prove, is in Atomic settlement.

Reconciling after downtime

The stream does not replay missed trade events (the snapshot covers RFQs and quotes only). After downtime, reconcile via:

curl -H "X-API-Key: $API_KEY" "$API_URL/maker/trades?limit=100"

Newest first, limit 1–500 (default 100). A trade still settling has status: "settling" and an empty settledAt; the ledger block appears once it completes.

balances.updated fires on your stream after each settlement; GET /wallet/holdings returns the same shape on demand.

On this page