Skip to main content
This guide walks through pointing a Qustody deployment at a Quantum Chain RPC endpoint and sending a first transaction through the platform. It assumes you already have a running Qustody API and a synced Quantum Chain node.

Architecture

Three independent components must reach each other:
  1. Qustody API → Quantum Chain RPC (HTTP and optionally WebSocket)
  2. Qustody API → Post-quantum signing service (HTTPS or gRPC mTLS)
  3. Qustody API → Your webhook endpoint

Step 1. Configure the RPC connection

Set the node endpoints in Qustody’s environment:
WebSocket is required if you want Qustody to monitor incoming deposits in real time. Verify reachability from the Qustody host:

Step 2. Configure the signing service

Pick the signer mode that matches your operations model.

Option B — Callback (signer pushes signatures)

Your signer polls GET /v1/transactions?status=PENDING_SIGNATURE, fetches signing payloads, and POSTs back signatures. See External signing.

Option C — Remote HTTPS

Restart the API and check /readyz returns 200.

Step 3. Bootstrap a tenant and admin user

Step 4. Create a vault and wallet

If CUSTODY_SIGNER_KEYGEN_MODE=qey, omit public_key — Qustody asks the signer to mint one and registers it automatically.

Step 5. Subscribe to webhooks

Store the secret immediately — it is shown only once. See Webhooks for HMAC verification.

Step 6. Send your first transaction

The transaction transitions through SUBMITTED → PENDING_AUTHORIZATION → APPROVED → PENDING_SIGNATURE → BROADCASTING → BROADCAST → CONFIRMED. Each transition fires a webhook. See Transaction lifecycle for the full state diagram.

Step 7. Verify on chain

When you receive transaction.confirmed:
The receipt’s status should be 0x1 (success).

Operational checklist

Backup RPC

Configure CUSTODY_NODE_BACKUP_RPC_URLS with at least one alternate node. The circuit breaker fails over automatically.

mTLS to signer

For gRPC mode, mutual TLS prevents stolen client tokens from leaking signing access.

Confirmation depth

Default 12 blocks (~3 minutes) is good for most flows. Raise for very high-value transfers.

Monitor metrics

Watch signer_circuit_breaker_state, node_rpc_errors_total, txpool/queued. Alert on circuit breakers open longer than 1 minute.

Where to go next