Suspense and returns
Suspense is where money goes when the issuer receives it but can't attribute it. It is held, not credited. It is never counted as anyone's funds until an operator resolves it.
What goes to suspense
A fiat receipt or a token receipt goes to suspense when:
- it was paid to the plain distribution address with no muxed ID;
- its muxed ID is unknown or expired;
- its amount or asset doesn't match the open transfer it points at;
- it came from a wallet that isn't the redeem's source address;
- it is a wire with no matching reference.
A wire for the wrong amount or currency on a matching mint is also moved to suspense, once per rail reference, while the mint keeps waiting.
Suspense never moves pending_out or customer balances. It is a holding place, and the ledger shows it as its own account.
Resolving it
An operator has two moves, and both need a written reason, an audit row and an event:
- Attribute it. A wire or token item can go to a matching waiting transfer, which then continues from where it stopped. A wire item can instead be credited to an organization with no transfer. A token item always needs a redeem to attach to.
- Return it: a token payment goes back to the source address, and a wire is reversed.
Endpoints
Suspense items are driven by events rather than a dedicated route in Phase 1.
POST /v1/sandbox/fiat-depositssends a wire with a reference that matches nothing, so it lands in suspense.GET /v1/eventslists the domain events, includingsuspense.createdfor both rails.GET /v1/transfersshows the waiting transfers that a wire or payment can still be attributed to.