/health endpoint
and two environment variables.
Addons vs the commercial add-on products
Two different things are sometimes both called “add-ons”, and they integrate differently:-
Control-plane addons (this page) — any service that bridges into the control plane
with two environment variables (
S2_HUB_URL+S2_HUB_TOKEN): it self-registers, pulls the issuer trust set, and appears in the posture. The four bundled services are these, and so is any custom service you run. - AlgoVoi commercial add-on products — separately-licensed products such as Agent Passport, Settlement Verification, Payment Mandate, Spend Guardrail, Compliance Gate and Verifiable Audit Log. Each is bought as its own SKU, installed from its own download, and binds to Substrate 2 through the evidence model — a verified action becomes a signed, audit-ready receipt that folds into the Substrate 2 chain (see the application matrix). They are not control-plane addons by default, and they are not part of the Substrate 2 bundle.
The bundled services
After you install the bundle (python algovoi_unbundle.py --license @licence.key --install bundle.algv),
four console commands are on your PATH:
| Service | Command | Port |
|---|---|---|
| Control plane | algovoi-substrate2-controlplane | 8094 |
| Federation validator | algovoi-federation-validator | 8092 |
| ZK receipt | algovoi-zkp-receipt | 8093 |
| ATB credential verifier | algovoi-atb-credential-verifier | 8095 |
<S2CP_DATA_DIR>/admin_token (default /app/data), and persists to SQLite there (point
S2CP_DB at a postgresql://... DSN to use PostgreSQL instead).
Bridge a service into the control plane
Each bundled service is already an addon. Point it at the control plane with two env vars and on startup it self-registers and pulls its issuer trust set:S2_HUB_SELF_URL is the address the control plane uses to poll the service’s health (use the
service’s own reachable URL on your network). Confirm it joined:
Register an issuer
The services verify credentials against issuer public keys held by the control plane. Register one (admin token required); every bridged service then picks it up:Add a custom addon
Any service, in any language, joins the same way. It needs:- A
/healthendpoint returning HTTP 200. - Two HTTP calls to the control plane on startup:
GET /v1/issuer-pks→ pull the trust set ({did: pk_b64})POST /v1/services→ self-register (with the admin token)
hub_client (~50 lines) to make those two calls; a
non-Python addon makes the same two requests directly. The addon then appears in the
posture alongside the rest of the estate, with no shared library or SDK to adopt.
Control plane API
| Endpoint | Purpose |
|---|---|
GET /health | liveness + issuer/service counts |
GET /v1/issuer-pks | the {did: pk_b64} trust set the services consume |
GET /.well-known/atb-keys.json | canonical hub doc the ATB verifier resolves |
POST /v1/issuers | register an issuer (admin) |
DELETE /v1/issuers/{did} | revoke an issuer (admin) |
POST /v1/services | register a service / addon (admin) |
GET /v1/posture | health across all bridged services |
GET /v1/audit | the HMAC-chained trust-change log (admin) |