How it works
1
An address is monitored
WaaS: derive an address with
enable_monitoring: true. CaaS: every provisioned wallet
is monitored automatically.2
Funds arrive on-chain
Rach’s monitor watches the relevant chains continuously and picks up the incoming
transfer.
3
Deposit detected (pending)
Rach records a pending deposit and POSTs
wallet.deposit.detected. Nothing is
credited yet — dedupe on deposit_id.4
Deposit confirmed → you credit
Once it reaches the confirmation threshold, Rach POSTs
wallet.deposit.confirmed with
safe_to_credit: true — that’s your signal to credit the customer.5
Real hash backfilled
A later
wallet.deposit.hash_resolved (same deposit_id) replaces the provisional
pending_… tx_hash with the real on-chain hash.WaaS monitoring
Turn monitoring on when you derive an address:"monitored": true. Supported assets include native coins and
USDT/USDC on the EVM chains. When a deposit confirms, Rach fires a wallet deposit webhook
and the funds show up in GET /wallet/{id}/balances.
CaaS monitoring
CaaS smart-contract wallets are monitored from the moment they’re provisioned. An inbound transfer to a wallet you operate fires atransfer.received webhook — including transfers
sent to a phone number that was never provisioned (Rach creates the wallet on the fly and
notifies the recipient by SMS).
Reconciliation
If your endpoint was down, you won’t miss anything:- Rach retries failed deliveries.
- Every delivery is recorded in a delivery ledger you can review.
- You can always re-read balances —
GET /wallet/{id}/balances(WaaS) orGET /v1/users/balance(CaaS) — and reconcile bydeposit_id.
For WaaS reconciliation, add
?live=true to read the chain directly rather than Rach’s
stored figure. The stored figure is kept in step with the chain by the monitor and is right
for everyday use, but when you are specifically auditing for drift you want the chain read.
