Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.quantumapi.io/llms.txt

Use this file to discover all available pages before exploring further.

Every transaction submitted to Qustody flows through a deterministic state machine with 14 states. The machine is enforced server-side: only legal transitions are accepted, and every transition emits a webhook event you can subscribe to.

State diagram

All 14 states

SUBMITTED

Accepted by the API; awaiting policy and screening evaluation.

QUEUED

Held briefly because of an idempotency conflict or rate limit.

PENDING_AUTHORIZATION

A policy rule of type REQUIRE_APPROVAL matched. A human approver must decide.

PENDING_AML_SCREENING

Compliance screening is in flight; the transaction is paused.

APPROVED

Authorization granted; about to enter signing.

PENDING_SIGNATURE

Awaiting an external post-quantum signature over the signing payload.

SIGNED

Signature received and verified against the registered wallet’s public key.

BROADCASTING

Raw transaction assembled and being broadcast to Quantum Chain nodes.

CONFIRMING

Included on-chain; counting confirmations to the configured depth.

COMPLETED

Confirmed with sufficient depth. Terminal.

FAILED

Permanent failure during signing, broadcast, or confirmation. Terminal.

REJECTED

Denied by the policy engine or by an approver. Terminal.

CANCELLED

Cancelled by the caller before broadcast. Terminal.

BLOCKED

Compliance screening flagged or blocked the transaction. Terminal.

Active vs terminal

  • Active (9): SUBMITTED, QUEUED, PENDING_AUTHORIZATION, PENDING_AML_SCREENING, APPROVED, PENDING_SIGNATURE, SIGNED, BROADCASTING, CONFIRMING.
  • Terminal (5): COMPLETED, FAILED, REJECTED, CANCELLED, BLOCKED. Once a transaction reaches a terminal state it never changes again.

Transition table

FromToTriggerActor
SUBMITTEDPOST /v1/transactionsAPI caller
SUBMITTEDQUEUEDIdempotency conflict or rate limitSystem
QUEUEDSUBMITTEDSlot availableSystem
SUBMITTEDREJECTEDPolicy engine denies (e.g. BLACKLIST_ADDRESS, MAX_AMOUNT)System
SUBMITTEDPENDING_AUTHORIZATIONPolicy rule of type REQUIRE_APPROVAL matchedSystem
SUBMITTEDPENDING_AML_SCREENINGAML provider screening requiredSystem
SUBMITTEDPENDING_SIGNATUREPolicy auto-approved and no screening requiredSystem
PENDING_AUTHORIZATIONAPPROVEDPOST /v1/transactions/{id}/approveApprover
PENDING_AUTHORIZATIONREJECTEDPOST /v1/transactions/{id}/rejectApprover
PENDING_AUTHORIZATIONCANCELLEDPOST /v1/transactions/{id}/cancelAPI caller
APPROVEDPENDING_SIGNATUREAutomatic after authorizationSystem
APPROVEDCANCELLEDPOST /v1/transactions/{id}/cancelAPI caller
PENDING_AML_SCREENINGPENDING_SIGNATUREScreening clearedSystem
PENDING_AML_SCREENINGBLOCKEDScreening flagged or blockedSystem
PENDING_SIGNATURESIGNEDPOST /v1/transactions/{id}/signature with valid post-quantum signatureExternal signer
PENDING_SIGNATUREFAILEDSignature verification failedSystem
PENDING_SIGNATURECANCELLEDPOST /v1/transactions/{id}/cancelAPI caller
SIGNEDBROADCASTINGRaw transaction assembledSystem
SIGNEDFAILEDAssembly errorSystem
BROADCASTINGCONFIRMINGNode accepted the transactionSystem
BROADCASTINGFAILEDNode rejected (bad nonce, insufficient gas, etc.)System
CONFIRMINGCOMPLETEDConfirmation depth reachedSystem
CONFIRMINGFAILEDReverted or dropped from mempoolSystem
POST /v1/transactions/{id}/cancel is only valid from SUBMITTED, PENDING_AUTHORIZATION, APPROVED, or PENDING_SIGNATURE. Once a transaction is SIGNED, BROADCASTING, or CONFIRMING, it cannot be cancelled.

Webhook events per state

State enteredWebhook event
SUBMITTEDtransaction.created
QUEUEDtransaction.status_changed
PENDING_AUTHORIZATIONapproval.required + transaction.status_changed
PENDING_AML_SCREENINGscreening.submitted + transaction.status_changed
APPROVEDapproval.decision + transaction.status_changed
REJECTEDapproval.decision (if from approver) + transaction.status_changed
PENDING_SIGNATUREtransaction.status_changed
SIGNEDtransaction.status_changed
BROADCASTINGtransaction.status_changed
CONFIRMINGtransaction.status_changed
COMPLETEDtransaction.completed
FAILEDtransaction.failed
CANCELLEDtransaction.status_changed
BLOCKEDscreening.blocked + transaction.status_changed
The full list of 12 webhook event types is documented in Webhooks.

Integration pattern

Use transaction.status_changed to track all intermediate transitions, transaction.completed / transaction.failed for final outcomes, approval.required to drive approver UIs, and screening.* to surface compliance state in your dashboards.