From zero to anchored evidence in an afternoon.
The gateway is a single service you run in your own cloud. Licensed customers receive it during onboarding together with the operations guide; these are the steps your team follows.
Initialise keys and configuration
Creates the ML-DSA signing key, the X-Wing archive key (move it offline: the gateway never needs it), a policy template and an admin API key. Key files are passphrase-wrapped.
CANDOR_KEY_PASSPHRASE=… candor-ai init ./candor
Write your policy
Identity providers (Entra ID tenant, Okta…), roles, approved models and providers, data residency, DLP and compliance packs. The tool validates the packs and prints the hash you publish.
candor-ai policy-hash ./candor/policy.json
Create your stream from your Safe
Your owner multisig creates the stream on the Candor ledger with your signing key hash, the policy hash and the anchorer address. The stream ID is derived from your Safe, so nobody can squat it.
createStream(salt, pqKeyHash, policyHash, [anchorer])
Buy a plan
Online with USDC on the pricing page (browser wallet or Safe batch), from the CLI, or on invoice.
candor-ai license-buy <streamId> <plan> <periods> --calldata
Start the gateway and switch your base URL
Fund the anchorer wallet with a little MON, start the gateway behind TLS (post-quantum key exchange on by default) and point your SDKs at it.
OPENAI_BASE_URL=https://ai-gateway.internal.example/v1 ANTHROPIC_BASE_URL=https://ai-gateway.internal.example
Requirements
- Runtime
- Linux container or VM with Node.js 24; 2 vCPU and 4 GB RAM handle most teams
- Storage
- Durable disk for records; WORM bucket recommended for long retention
- Network
- Egress to your approved providers and a Monad RPC endpoint
- Wallets
- A Safe for the stream owner; one hot anchorer wallet with gas only
- Identity
- Optional: an Entra ID or other OIDC app registration