Skip to Content

Transaction Lifecycle

Every withdrawal (a transfer) in The Vault passes through a well-defined set of statuses. These are the same statuses the dashboard shows, the Client API returns, and webhooks report — one vocabulary throughout.

Statuses

StatusMeaning
PENDINGSubmitted; policy evaluation in progress
PENDING_AML_VERIFICATIONHeld while AML screening runs — only a verdict releases it (optional module)
PENDING_APPROVALAwaiting the required mobile approvals
PENDING_SIGNATUREApprovals collected; MPC signing in progress
READY_TO_SENDSignature accepted; ready to broadcast
SENTBroadcast to the network; awaiting on-chain confirmation
CONFIRMEDConfirmed on chain — terminal success
REJECTEDRejected by an approver or signer, or cancelled by a user (sub-status carries the reason)
REJECTED_BY_POLICYBlocked by a policy rule
AML_VERIFICATION_FAILEDBlocked by AML screening, or no verdict within the screening window
NO_POLICY_FOUNDNo policy matched — default-deny
EXPIREDApproval window expired before enough approvals
FAILEDSigning or broadcast failed

A sub-status carries the detailed reason on terminal states — e.g. REJECTED_BY_APPROVER, REJECTED_BY_SIGNER, CANCELLED_BY_USER, SIGNING_FAILED, BROADCAST_FAILED, ADDRESS_BLACKLISTED. ADDRESS_BLACKLISTED means the destination is blocked by the token’s issuer: the Vault checks issuer blocklists for ERC-20 and TRC-20 tokens.

End-to-End Flow

Stage Details

PENDING — policy evaluation

A newly submitted transfer is PENDING while the policy engine finds the first matching policy (see Policy Engine). If no policy matches, it becomes NO_POLICY_FOUND; if a matching policy rejects it, it becomes REJECTED_BY_POLICY. If a policy allows it, it advances to PENDING_APPROVAL.

PENDING_AML_VERIFICATION — screening

When AML screening is enabled for the profile, a policy-approved transfer is held in PENDING_AML_VERIFICATION while the destination address is screened against the configured providers (see AML Screening). Only a verdict releases it: a pass sends it on to PENDING_APPROVAL (or straight to PENDING_SIGNATURE when the matching policy requires no approvals), a block makes it AML_VERIFICATION_FAILED. If no verdict is reached within the screening window, the transfer is rejected rather than released — screening is fail-closed.

PENDING_APPROVAL — approvals

The transfer waits for the number of approvals the matching policy requires (see Approval Flows). An approval is a user accepting on their paired device — separate from signing. If an approver rejects it becomes REJECTED; if a user cancels it becomes REJECTED (sub-status CANCELLED_BY_USER); if the window expires it becomes EXPIRED.

PENDING_SIGNATURE — MPC signing

Once approvals are collected, the MPC coordinator opens a signing session: the key-share-holding signers each contribute a partial signature, combined into a single valid on-chain signature. On success the transfer moves to READY_TO_SEND; a signing failure moves it to FAILED.

READY_TO_SEND → SENT → CONFIRMED

The signed transaction is broadcast to the network node; the Vault records the transaction hash and the transfer becomes SENT. A broadcast the network rejects moves it to FAILED.

SENT is not the end of the flow. The platform watches the chain for the transaction and, once it is confirmed, moves the transfer to CONFIRMED — the terminal success state. A transaction that the chain reports as failed becomes FAILED; on networks where a signed transaction can lapse before it is included, it becomes EXPIRED.

How much confirmation CONFIRMED stands for is a per-network decision — see the network pages for each network’s confirmation policy.

Every status transition is recorded in the audit log. Track transitions via TRANSFER_UPDATED / TRANSFER_DELIVERED / TRANSFER_FAILED webhooks rather than polling. TRANSFER_DELIVERED is sent twice for a successful transfer — once on SENT (broadcast) and once on CONFIRMED (confirmed on chain); read the status in the payload rather than treating the event itself as final.