http://127.0.0.1:7878. Every path also works under /api/, which is what the dashboard uses.
Authentication
Send the token from/etc/russel/env as a bearer token on every request:
Over the network, reach the API through HTTPS or an SSH tunnel (TLS reverse proxy).
Endpoints
{id} is the service’s service.name.
Request bodies
POST /deploy
Any other field is rejected with
422. Ports, env, and runtime come from the Russelfile only.
POST /vm/{id}/update: {"refresh": true} builds the latest commit; {} rebuilds the running one. repo_url and config_path switch to another source and imply refresh. All fields are optional.
POST /vm/{id}/rollback: {"version": 3} for a specific deployment, or {} for the previous one. Starts the deployment’s recorded build again; add "rebuild": true to build its commit from source instead. Returns 409 when that deployment has neither.
Progress stream
/deploy, /update, and /rollback respond with one JSON object per line (NDJSON) while they work:
Complete (with status deployed, unchanged, or rolled_back) or an error:
curl -N). A proxy in front must not buffer it.
If 4 deploys are already running, /deploy returns 503; retry later.
Status
GET /vm/{id}/status returns the service’s status (deployed, failed, stopped, …), runtime, host and app ports, uptime, the Traefik host name if it has one (route_host), and restarts since the last deploy (left out when zero).
Examples
russel secrets set is simpler for secrets and does the same thing.