Event Catalog
All events share the envelope {id, type, created, data}. Per-account transaction.* events include accountId, your externalId, vaultId, the on-chain digest, and the intentId when the transaction was built through the API. Fields not listed as guaranteed may be absent — parse leniently.
Transaction events (per account)
transaction.deposit.confirmed
Deposit transaction observed on-chain. Funds are in the current settlement cycle.
{
"id": "evt_01h…", "type": "transaction.deposit.confirmed", "created": "…",
"data": {
"intentId": "txi_01h…", "accountId": "acct_7f3a…", "externalId": "user-8492",
"vaultId": "rcusdp-sui", "recordId": "42",
"amount": "100.000000", "digest": "8vJk…"
}
}
Keep recordId — it is what tx/cancel-deposit takes on the Sui rail. On XAUa subscriptions, amount is the net (post-fee) USDC and a fee field reports the subscription fee withheld. A settlementCycle number is included on rails that expose cycle numbering.
Suggested UI: "Processing — settles T+1."
transaction.deposit.settled
Shares credited.
{
"type": "transaction.deposit.settled",
"data": {
"intentId": "txi_01h…", "accountId": "acct_7f3a…", "externalId": "user-8492",
"vaultId": "rcusdp-sui", "recordId": "42",
"shares": "97.310000", "digest": "9mQr…"
}
}
Suggested UI: "Your deposit is now earning." Omnibus: this is your booking trigger — allocate shares in your sub-ledger. For the cycle's share price, read GET /v1/vaults/:vaultId/price at settlement time.
transaction.deposit.cancelled
Cancel transaction confirmed or cycle rollback (reason: "cancelled" | "rollback"). Data includes the returned amount and, on a user cancel, the fee withheld. On rollback the amount is back in the wallet (direct rail) or claimable (legacy gateway rail). Omnibus: reverse the pending allocation in your ledger.
transaction.redeem.confirmed / transaction.redeem.settled
Redemption queued / proceeds final. confirmed data includes the locked shares (plus estimatedProceeds on rcusdp-sui). settled data carries one of two shapes depending on how the vault settles:
amount(USDC) — the settlement paid the wallet directly; nothing further to do. This is howrcusdp-suisettles today.claimable(USDC) — the vault allocates a claimable balance; calltx/claimto receive it.
When several redemptions from the same wallet settle in one cycle (typical for omnibus accounts), the chain pays one aggregated transfer per wallet: each intent still gets its own settled event, with amount split proportionally by locked shares and walletTotal carrying the full delivered figure. Reconcile your ledger against walletTotal / the on-chain transfer — that is the authoritative number; the per-intent splits are exact under one cycle's single price and fee.
Suggested UI on settled: with amount — "Withdrawal complete"; with claimable — "Withdrawal ready" with a claim action.
transaction.claim.confirmed
USDC paid to the account's own wallet. Data: amount, digest.
Vault events (platform-wide)
vault.cycle.closed / vault.cycle.settled / vault.cycle.rolled_back
A settlement cycle changed state. Data: vaultId, cycleKind ("deposit" or "redeem" — deposit and redeem cycles progress independently), a settlementCycle number where the rail exposes one, and cycle totals: totalAmount/mintedShares on deposit cycles, totalShares/netProceeds (and any fee) on redeem cycles.
{
"type": "vault.cycle.settled",
"data": {
"vaultId": "rcusdp-sui",
"cycleKind": "deposit",
"totalAmount": "12500.000000",
"mintedShares": "12180.450000"
}
}
Per-account transaction.*.settled events accompany vault.cycle.settled for every affected account — most apps only need the per-account events; the cycle events are useful for ops dashboards and omnibus reconciliation.
vault.price.updated
NAV changed. Data: vaultId plus the raw on-chain price-sync fields. Treat it as a trigger: read the normalized price/apy from GET /v1/vaults/:vaultId/price.
vault.paused / vault.unpaused
Disable/enable deposit & redeem actions in your UI. Claims and cancel-deposits keep working while paused.
Account & treasury events
| Type | Fires when | Key data fields |
|---|---|---|
account.created | account registered | accountId, externalId, type |
treasury.allowlist.activated | 24 h timelock elapsed | id, accountId, address |
treasury.withdrawal.pending_approval | withdrawal awaits a second key | id, accountId, amount, address |
treasury.withdrawal.approved | approved; unsigned tx available | id, accountId, amount, address |
treasury.withdrawal.confirmed | reserved for the confirmed-withdrawal lifecycle (subscribable, not yet emitted) | — |
Wildcards
Subscriptions accept exact event names, namespace wildcards (transaction.*, account.*, treasury.*, vault.*), or * for everything. New event types may be added under existing prefixes at any time — handle unknown types gracefully.