Skip to main content
The Quantum Chain Custody API is a non-custodial orchestration layer. It manages transaction lifecycle, policy enforcement, and event delivery — but never holds private keys.

Non-custodial signing model

Unlike traditional custodial solutions, the Custody API delegates all signing to your infrastructure. This means:
  • You control the keys — Dilithium3 private keys live in your HSM, secure enclave, or key management system
  • The API orchestrates — it creates transactions, enforces policies, and broadcasts signed transactions to the Quantum Chain network
  • Signing is a callback — when a transaction needs signing, you retrieve the payload, sign it externally, and submit the signature back

Transaction lifecycle

Every transaction moves through a deterministic state machine:
StateDescription
CREATEDJust created, policy evaluation imminent
PENDING_APPROVALAwaiting manual approval per policy
APPROVEDApproved, transitioning to signing
SIGNING_REQUESTEDReady for external Dilithium3 signature
SIGNEDSignature received and verified
BROADCASTINGSubmitted to Quantum Chain nodes
CONFIRMINGIncluded in a block, waiting for confirmation depth
COMPLETEDConfirmed with sufficient block depth
FAILEDTransaction reverted or could not be broadcast
REJECTEDDenied by policy or approver
CANCELLEDCancelled before signing or broadcasting
SIGN_FAILEDInvalid signature submitted

Request flow

A typical transfer follows this sequence:
1

Create transaction

Your application calls POST /v1/transactions with source, destination, and amount. The API validates the request and runs it through the policy engine.
2

Policy evaluation

Configured policies are evaluated — spending limits, whitelist/blacklist checks, approval requirements, and time windows. If a policy requires approval, the transaction moves to PENDING_APPROVAL.
3

Retrieve signing payload

Call GET /v1/transactions/{id}/signing_payload to get the unsigned transaction digest as a hex-encoded byte array.
4

Sign externally

Sign the digest with your Dilithium3 private key using your key management solution.
5

Submit signature

Call POST /v1/transactions/{id}/signature with the base64-encoded Dilithium3 signature and the signer’s public key. The API verifies the signature before accepting it.
6

Broadcast and confirm

The API broadcasts the signed transaction to the Quantum Chain network via the node pool and tracks confirmation depth.
7

Webhook notification

Status change events are delivered to your registered webhook endpoints with HMAC-SHA256 signatures.

System components

ComponentRole
API ServerHTTP handlers, authentication, rate limiting
Policy EnginePre-broadcast rule evaluation and enforcement
Node PoolManages multiple Quantum Chain RPC connections with failover
Deposit MonitorWatches for inbound transfers to registered wallets
Confirmation TrackerMonitors block depth for pending transactions
Webhook DispatcherDelivers events with HMAC signing, retry, and dead-letter
Recovery WorkerRe-processes stuck transactions after restarts
Idempotency CleanupPrunes expired idempotency keys

Multi-tenancy

The API supports multiple tenants with full isolation:
  • Each tenant has its own API credentials, vaults, wallets, policies, and webhook endpoints
  • Cross-tenant access is prevented at the middleware layer
  • Tenant context is extracted from the API key and propagated through all service calls

Dilithium3 signatures

Quantum Chain uses Dilithium3 / ML-DSA-65, the NIST post-quantum digital signature standard:
PropertyValue
Signature size3,293 bytes
Public key size1,952 bytes
Security levelNIST Level 3
Digest size32 bytes
The API verifies signatures server-side before broadcasting to ensure only valid transactions reach the network.