Skip to main content
The control panel is the single operator console for a self-hosted AlgoVoi Payment Rails deployment. It runs over TLS on port 9443, separate from the customer payment rails (443) and the raw operator API (8443). One login fronts every surface below; there is nothing else to install.

1. Signing in

  1. Browse to https://<your-host>:9443/.
  2. Enter the admin token (PANEL_TOKEN, generated by the installer and printed once at the end of enterprise-setup.sh; it also lives in /etc/algovoi/rails.env).
  3. On first sign-in you are shown a QR code. Scan it with Google Authenticator, Authy, 1Password, or any TOTP app, then enter the 6-digit code to enrol.
  4. On every later sign-in you enter the token and the current 6-digit code.
Session lasts 24h. Sign out and Reset 2FA (re-enrol a new device) are at the bottom of the left rail. All actions that change data are CSRF-protected and every page is served no-store so an upgrade never shows you a stale screen.

2. The operator lifecycle: how the pages connect

The tabs are ordered to follow the life of a merchant, left to right:
Read it as a sentence: confirm the platform is healthy (Services) and the chains you accept are wired (Chains); onboard/inspect a merchant (Merchants), give them API keys (API keys), set how they get paid (Networks), and pull their store orders in (Integrations); then watch risk and sanctions (Compliance) and prove every action after the fact (Audit log). Keystone/Trust mesh/Applications/Entry Points describe what the deployment contains and how it governs trust.

3. Page reference

3.1 Services (platform health: start here)

Purpose. Live health of the eight rails services (control-plane, gateway, substrate-2, federation-validator, zkp-receipt, facilitator, control-panel, caddy) plus the Keystone bridge registration. How to use. Open the tab; each row shows the service, its port, and a green/red health dot. If anything is red, that subsystem is down: fix it before onboarding. Ties to. Everything. If control-plane or gateway is red, the Merchants / Compliance / Audit tabs will show errors because they proxy to it. By design (host-side). Starting, stopping and log-reading of services is done on the host with systemctl and journalctl, not from the web panel. Exposing service restart over the web would be a privileged remote-execution surface, so it is deliberately kept to the host shell where the operator already has root.

3.2 Chains (which blockchains you accept)

Purpose. One RPC URL per network (Algorand, VOI, Hedera, Stellar, Base, Solana, Tempo, ARC), and a quick per-merchant payout-address setter. How to use. For each network, paste the RPC URL and click save; test does a live reachability check. Configured networks show a green “yes”. The lower card sets a payout wallet for a chosen merchant + network. Ties to. These RPCs are what the gateway uses to verify settlements, so they must be set before a merchant can take live payments. Per-network payout, sponsor, stablecoin and HMAC are managed in depth on the Networks tab. Not in this version / notes. The payout card here is a convenience shortcut; the Networks tab is the fuller per-network editor. No “test all chains” button.

3.3 Merchants (the merchant cockpit)

Purpose. The list of all merchants (tenants) and, for a selected one, a full money view: settlement balance, payments/fee ledger, payment links, refunds, disputes, and statements. How to use. Filter/scan the merchant table; click a row to load its cockpit below. Cards then show: Settlement balance (gross/fees/VAT/refunds/net per asset), Payments · fee ledger, Payment links (with a Cancel action on active links), Refunds (set a status), Disputes (move open → under_review → resolved), and Statements. Ties to. A merchant selected here is the subject of the API keys, Networks, and Integrations tabs. Its risk and sanctions posture appears on Compliance; every action you take is written to Audit log. Refunds. A Payments (refundable ledger) card lists the merchant’s payments; click Refund on a payment to originate a refund (amount in microunits + reason), which creates it as pending. Once you have sent the compensating payment to the payer, use the refund’s status control to mark it completed and supply the on-chain refund_tx_id so it is verifiably closed (or rejected with a note). Invoices. Each payment on the Payments card has an Invoice button that assigns an invoice number; once assigned it shows as a pill. New merchant + Agent-to-agent Mesh. A New merchant button creates a merchant inline (name, settlement network, payout address, and its first API key). An Agent-to-agent Mesh card allocates that merchant a post-quantum Mesh licence bound to its own agent DID, with no per-agent fee, and returns the licence key plus a one-line offline install. The federation is provisioned automatically at install and is name-constrained, so you allocate only within your own DID namespace; the member then settles agent-to-agent with the quickstarts shipped under examples/mesh_a2a/. Not in this version. No CSV export of the merchant ledger.

3.4 API keys (credentials)

Purpose. Two sets of keys: operator admin keys (cross-tenant, platform-wide) and per-merchant API keys (what a merchant’s integration authenticates with). How to use. Operator admin keys: Issue (optionally scoped; blank = full), Rotate, Suspend/Unsuspend, Revoke. A newly issued/rotated secret is shown once, copy it immediately. Issuing runs a deliberate ~15s key-derivation, so the button shows “issuing…”. Merchant keys: pick a merchant, then Issue / Rotate / Deactivate / Revoke; the new key’s plaintext is shown once. Ties to. Merchant keys are what an Integrations store or a merchant’s own software uses to call the rails. The panel itself authenticates to the control-plane with a static admin key, so revoking DB admin keys here never locks you out of the panel. Admin keys also have Scopes (edit the scope list), Extend (push out the expiry by N days), and Audit (view that key’s own action history). Not in this version. Complete for its purpose.

3.5 Networks (how a merchant gets paid)

Purpose. Per-merchant, per-network settlement configuration: sponsor wallet (fee-pooled zero-fee transactions on Algorand/VOI), preferred stablecoin (asset id + decimals), and HMAC signing secret rotation. How to use. Pick a merchant; each of their network configs lists the payout address and current stablecoin. Per row: Set stablecoin (e.g. USDC asset id + 6 decimals), Set sponsor (address + 25-word mnemonic, stored encrypted; blank to disable), Rotate HMAC (new secret shown once, old signatures stop validating). Ties to. Consumes the merchant chosen in Merchants; the payout address here is the same one the Chains payout shortcut edits. The stablecoin/sponsor choices determine what actually settles on-chain for that merchant. You can also Set payout inline per network, Register network (pick a network, optional payout address) and Deregister a network from this tab. Not in this version. Complete for its purpose.

3.6 Integrations (store order feeds)

Purpose. Connect a merchant’s e-commerce store (WooCommerce, Shopify, Magento, BigCommerce, PrestaShop, OpenCart, etc.) so store orders auto-generate payment links. How to use. Pick a merchant; connected stores list platform, status, the webhook URL to paste into the store, last event time, and a Disconnect button. To connect: choose a platform, enter the preferred network, and paste the store’s API credentials as JSON (stored encrypted). Ties to. Uses the merchant from Merchants; the payment links it generates show up in that merchant’s Payment links card. Screening of incoming order URLs is governed by Compliance. View store orders lists the recent orders that came through a connected store. Not in this version. The Slack/Teams/Discord notification channels are merchant self-service, not operator-managed here.

3.7 Compliance (risk, sanctions, AML)

Purpose. The live compliance surface: screening posture toggles, sanctions/ threat feed health, a per-tenant risk dashboard, and screening hits, AML holds, compliance events, SAR filings and rules. How to use. Flip URL/IP threat screening and Tor exit hard-block on/off (takes effect immediately). Refresh sanctions feeds now pulls OFSI/OFAC/EU lists. The risk table shows each merchant’s mode, risk tier, kill-switch state and daily volume vs cap, with a Kill / Unkill button per row: Kill prompts for a reason and freezes all of that merchant’s payments; Unkill unfreezes. The lower panels list recent hits/holds/events/SARs and active rules. Ties to. Reads the same merchants as Merchants (risk rows are those tenants); screening decisions here gate the payments those merchants can take, and every compliance action is written to Audit log. Not in this version. No SAR-filing or rule-edit actions in the UI; risk rows do not yet deep-link into the Merchants cockpit.

3.8 Audit log (tamper-evident evidence)

Purpose. The hash-chained record of every privileged action, with an integrity check. This is your regulator/auditor evidence surface. How to use. Browse newest-first (paginated), filter by actor, action or a from/to date range, click Verify chain integrity to confirm the tamper-evident chain is unbroken (reports rows checked, or the exact position if broken), and Export CSV to download the filtered log for an auditor. Ties to. Captures the actions taken on every other tab: issuing keys, changing posture, cancelling links, resolving disputes, kill-switching a merchant. It is the proof layer under the whole console. Not in this version. Complete for its purpose.

3.9 Trust mesh (substrate-2 governance)

Purpose. Runtime posture of the substrate-2 governance mesh: issuers, policy, and bridged services. How to use. The top shows a plain-language posture summary (issuer count, policy bound yes/no, keystone active, bridged services, all-up), with the raw issuer/policy/ service records below. Empty until you bind issuers and a policy (POST to the substrate-2 API on :8094). Ties to. The governance layer beneath Keystone; most rails deployments run it idle unless they federate trust across issuers. Not in this version. Binding issuers/policy is done via the substrate-2 API, not from the panel (advanced federation, rarely needed for payment rails).

3.10 Keystone (trust-step estate + settings)

Purpose. The installed Keystone steps (passport → delegation → revocation → journey → cancellation → refund, etc.), each editable, plus any known steps not installed. How to use. Each installed step shows its ref/posture/package and an editable JSON settings box: edit and Save settings, or Reset to default. The lower card lists available (uninstalled) steps with their pip install command. Ties to. Defines the trust primitives the rails enforce on every payment lifecycle; the governance of these steps is what Trust mesh oversees. Not in this version. Complete for its purpose.

3.11 Agent Passport (federated issuer: issue, verify, revoke)

Purpose. Run the rails’ own federated agent-passport issuer from one tab. A passport is a Falcon-1024 signed credential that authorises an agent to act, bounded by scopes, a spend limit, a spend window, and an expiry. The issuer key is self-provisioned on install (secret held in a 0600 key file, never in the environment) and its identity did:key:passport-<kid> is published to the federation registry, so verifiers across the mesh check a passport against the issuer’s published key. How to use. Issue a passport: pick the tenant, enter the agent DID, scopes (comma-separated), spend limit, window, and expiry, then issue. The panel returns the signed credential. Issued passports lists every passport with its status and a Revoke control (revocation is scoped to the owning tenant and cannot touch another tenant’s passport). Verify checks a pasted credential offline and shows verified / not verified with the agent DID. CRL and verify portal exposes the per-issuer revocation list by kid and a shareable verify-portal link a counterparty can open. Ties to. The federation validator (3.9 Trust mesh governs the mesh the issuer publishes into) and the Keystone passport step (3.10). This is the operator surface for the passport primitive that used to be a separate product; it now ships in the rails bundle. Not in this version. Complete for its purpose. Revocation fails closed: if the revocation list cannot be read, verify returns unverifiable rather than a false verified.

3.12 Applications (what’s installed)

Purpose. Inventory of the AlgoVoi applications present in this deployment (name, category, version, summary). How to use. Read-only reference: useful for support and version audits. Ties to. A manifest view; confirms which optional apps (e.g. Command Center) are bundled. Not in this version. Read-only by design.

3.13 Entry Points (diagnostic)

Purpose. The Python entry points registered by the installed packages (console scripts, keystone steps), grouped by type. How to use. Read-only diagnostic: confirms the keystone steps and services the runtime discovered. Ties to. Low-level companion to Keystone/Applications for support. Not in this version. Read-only by design.

4. Validation summary (this build)

Every tab was checked against the live control-plane responses: All 12 tabs attach handlers and are clickable (JS executed via jsdom, 12/12).

5. Feature completeness

As of panel 0.1.8 every operator surface is built out. Delivered across the last builds: Compliance kill/unkill toggle; Merchant refund origination and verified completion with refund_tx_id; invoice assignment; per-network register / deregister / payout; admin-key scope edit / expiry extend / per-key audit; Audit CSV export + date-range filter; Integration store-order feed; Trust-mesh plain-language posture. The one deliberate exclusion is service start/stop/restart and log tailing, which stays on the host (systemctl / journalctl): exposing privileged service control over the web is a remote-execution surface we do not want in the panel. Everything else an operator needs day to day is in the console.

6. Zero to running in five minutes (validated path)

Every step below was executed end to end against a fresh install of the shipping bundle; the “Proven” column is the actual result observed. Result: the merchant can transact, and every action above is already written to the tamper-evident audit chain. What “running” needs at minimum: a healthy platform (Services green), one wired chain (Chains), and one merchant with a payout and a key. Signup auto-creates the merchant with its network and payout, so the operator’s own five minutes are really install, sign in, wire chains, confirm compliance and audit are live; merchants then self-serve. Validation note. Two setup blockers were found while validating this exact path, and both are fixed: (1) saving a chain RPC failed with a 500 because the RPC config wrote to a read-only /opt/algovoi path, now pointed at the writable data dir in the installer; (2) the Chains payout dropdown was empty because it read the wrong list key, fixed in the panel. Both ship in the next build; the running review instance is already patched.

Appendix A. Action reference: every control and what should happen

Each control below was cross-referenced against the actual system behaviour. The “What should happen” column is the intended, validated outcome; “Then” is the state you should see or the next step it enables.

Services

Chains

Merchants

Refund flow (complete in 0.1.7). Originate from the Payments card Refund button (creates pending), send the compensating payment to the payer off the panel, then set the refund to completed and supply the refund_tx_id so it is verified end to end. rejected closes it with a note. This closes the earlier caveat where the panel could set status but not complete a verified refund.

API keys

Networks

Integrations

Compliance

Audit log

Keystone

Trust mesh / Applications / Entry Points

Read-only. Trust mesh shows substrate-2 posture (empty until issuers and a policy are bound on :8094); Applications lists installed apps; Entry Points lists registered console scripts and keystone steps. No actions to perform.

Appendix B. End-to-end interaction chains (what should happen across pages)

Chain 1: platform to first live payment. Services all green (§3.1) then Chains: Save + Test the RPC for your network (§3.2) then a merchant self-signs-up on :443 and appears in Merchants with its network and payout already set (§3.3) then API keys: issue their merchant key (§3.4) then the merchant transacts and the payment appears in their Merchants ledger, with the settlement verified against the RPC you wired. Chain 2: store to auto-invoicing. Integrations: Connect store with credentials (§3.6) then paste the shown webhook URL into the store then a store order fires the webhook then a payment link auto-appears in that merchant’s Payment links card (§3.3) then the buyer pays and it settles. Chain 3: oversight and evidence. Compliance: screening Enforcing + feeds fresh (§3.7) screens every payment then any hit or hold surfaces in Compliance then if a merchant looks bad you Kill them from the risk row to freeze all their payments (Unkill to release) then every operator action (key issued, link cancelled, dispute resolved, kill switched) writes to Audit log then Verify chain integrity proves the record is unbroken for an auditor. Chain 4: refund a payment. Merchants: open the merchant, click Refund on the payment (§3.3) which creates a pending refund then send the compensating payment to the payer off the panel then set the refund to completed with the on-chain refund_tx_id then the facilitator verifies receiver, amount and network and the refund is closed and audited. Chain 5: key rotation. API keys: Rotate a merchant key (§3.4) then the new secret is shown once then update the merchant’s integration then the old key stops working then the rotation is on the Audit log.