Skip to main content

State diagram

Transition table

FromToTriggerActor
CREATEDPOST /v1/transactionsAPI caller
CREATEDSIGNING_REQUESTEDPolicy engine approves automaticallySystem
CREATEDPENDING_APPROVALPolicy engine requires approvalSystem
CREATEDREJECTEDPolicy engine deniesSystem
PENDING_APPROVALAPPROVEDPOST /v1/transactions/{id}/approveApprover
PENDING_APPROVALREJECTEDPOST /v1/transactions/{id}/rejectApprover
PENDING_APPROVALCANCELLEDApproval timeout or manual cancelSystem / API caller
APPROVEDSIGNING_REQUESTEDAutomatic after approvalSystem
SIGNING_REQUESTEDSIGNEDPOST /v1/transactions/{id}/sign with valid signatureExternal signer
SIGNING_REQUESTEDSIGN_FAILEDPOST /v1/transactions/{id}/sign with invalid signatureExternal signer
SIGNING_REQUESTEDCANCELLEDSigning timeout or manual cancelSystem / API caller
SIGNEDBROADCASTINGTransaction assembly completeSystem
BROADCASTINGCONFIRMINGNode accepted the transactionSystem
BROADCASTINGFAILEDNode rejected (bad nonce, insufficient gas, etc.)System
CONFIRMINGCOMPLETEDRequired confirmation depth reachedSystem
CONFIRMINGFAILEDTransaction reverted or dropped from mempoolSystem

State categories

Active states (in-progress)

These states indicate the transaction is still being processed:

CREATED

Just created, policy evaluation imminent

PENDING_APPROVAL

Waiting for human decision

APPROVED

Approved, transitioning to signing

SIGNING_REQUESTED

Awaiting external signature

SIGNED

Signature validated, assembling tx

BROADCASTING

Sending to the network

CONFIRMING

On-chain, counting confirmations

Terminal states (final)

These states are irreversible — the transaction will not change again:

COMPLETED

Successfully confirmed on-chain

FAILED

Failed during broadcast or confirmation

REJECTED

Denied by policy or approver

CANCELLED

Cancelled before reaching chain

SIGN_FAILED

Invalid signature submitted

Webhook events per state

State enteredWebhook event
CREATEDtransaction.created
PENDING_APPROVALapproval.required
APPROVEDapproval.decision
REJECTEDapproval.decision or transaction.status_changed
SIGNING_REQUESTEDtransaction.status_changed
SIGNEDtransaction.status_changed
BROADCASTINGtransaction.status_changed
CONFIRMINGtransaction.status_changed
COMPLETEDtransaction.completed
FAILEDtransaction.failed
CANCELLEDtransaction.status_changed
SIGN_FAILEDtransaction.status_changed

Integration pattern

Use the transaction.status_changed webhook to track all intermediate states, and the specific transaction.completed / transaction.failed events for final state handling.