Skip to content
PostMTA Hosted
StatusSign inOpen panelRequest access
Open menu

Docs

Open in panel → /app · nodes

Nodes

A nodes row represents a single kumod instance the workspace sends through. Two on-site paths:

Incus provision (M10 / M10b)

POST /v1/panel/nodes/provision calls the incus-client helper to createInstance + startInstance against the configured daemon (INCUS_URL, INCUS_BASE_URL).

Env Behaviour
Default CI Fake Incus client (async stub) — matrix M10 PASS
INCUS_LIVE_PROBE=1 with unix socket Live daemon — matrix M10b PASS

If no daemon is reachable, the route returns 200 with incus_error and the node row is marked status='down'. Operators see this honestly.

BYO register (smoke-nodes)

POST /v1/panel/nodes/register accepts { name, kumo_base_url, hostname? }, probes the URL with kumo.liveness(), and inserts a row. No Incus required. Use this when an existing second-node kumod is already on the network (customer VPC, lab, etc.).

Returns 200 if kumod is healthy, 502 if unreachable (the row is created either way so the operator can fix networking without losing context).

Health probe

GET /v1/nodes/:id/health (operator+ via requireOpsAccess) probes kumo_base_url against /api/check-liveness/v1 and updates last_seen_at and status.

Per-node send

POST /v1/panel/nodes/:id/send re-runs the same runSend pipeline against the node-specific Kumo client. Per-node send is for diagnostics + reduced blast-radius, not for load-balanced routing (see Release B multi-node).

Last verified: Sat Jul 11 2026 17:00:00 GMT-0700 (Pacific Daylight Time). Cross-link maintained byscripts/check-docs-drift.sh (M54).

← All docs