CLI reference

strowger-cli — the local admin tool.

strowger-cli is a thin client: every command talks to the running strowgerd daemon over its own HTTP API. It ships alongside the daemon binary and is installed to /usr/local/bin/strowger-cli by deploy/install.sh.

Global flags
FlagMeaning
-u, --url <URL>Daemon URL. Default http://127.0.0.1:7060, or read from [daemon] http_host/http_port in the resolved config file.
-t, --token <KEY>API key, sent as X-API-Key.
-c, --config <PATH>Path to the daemon's config file.
--jsonPrint the raw JSON response instead of a formatted table.

Connection resolution: --config, or else the first of /etc/strowger/config.toml / ./config.toml that exists. The URL is --url if given, else built from that config's [daemon] section, falling back to 127.0.0.1:7060. The token is --token, else the STROWGER_API_KEY environment variable, else an api-token file inside the config's data_dir (or ./data/api-token with no config found).

Commands

statusDaemon overview

Health, licence state, active/max calls, trunk registration summary — one screen.

licenseLicence detail

Enforcement mode, licence state and id, expiry, and the exact capacities the current licence grants.

registerActivate a licence

Demo (light identification, keyless) or commercial (--key) — one-time activation against the licence server.

callsActive calls

List every call currently in progress, with direction, peer, trunk and duration.

hangupTerminate a call

Cancel a ringing call or send BYE to an answered one, by call id.

trunksTrunk status

Every configured trunk with its registrar, registration state and active flag.

trunk enable/disableHot trunk control

Activate or gracefully drain a trunk without touching the config file.

configInspect the config

Print the resolved config with secrets masked, or validate it without starting the daemon.

status

Fetches /health and /stats and renders the daemon's liveness, licence state, active/max call counts, rejection counters, and a registration table by trunk.

strowger-cli status
strowger-cli status --json

--json returns a combined object:

{
  "health": {
    "version": "1.0.0-rc1",
    "license": { "state": "ok", "license_id": "…", "customer": "…",
                 "days_remaining": 27, "deadline": null, "reason": null },
    "trunks": [ { "name": "ovh-prod", "state": "registered" } ]
  },
  "stats": {
    "calls": { "active": 0, "max_concurrent": 1, "concurrency_rejections": 0 },
    "license": { "rejections": 0 },
    "registrations": { "registered": 1, "rejected": 0, "connecting": 0, "none": 0 },
    "endpoints": [ { "name": "ovh-prod", "host": "sip-domain.io", "active": true } ]
  }
}
license

Reads the license block from /stats and prints enforcement mode, licence id, customer, perpetual vs. temporary, expiry, days remaining, and the granted capacities (max_concurrent_calls, max_trunks, max_call_seconds0 means unlimited). If the licence is in a degraded state, the reason and deadline are shown too.

strowger-cli license --json
{
  "enforced": true,
  "state": "ok",
  "license_id": "…",
  "customer": "Acme SARL",
  "perpetual": false,
  "expires_at": 1783000000,
  "days_remaining": 27,
  "max_concurrent_calls": 1,
  "max_trunks": 1,
  "max_call_seconds": 60
}
register

Calls POST /license/register on the daemon. Two forms:

# Demo — light identification, keyless
strowger-cli register --company "Acme SARL" --contact "Jane Doe" \
  --email [email protected] --phone +33612345678

# Commercial licence issued in advance
strowger-cli register --key <activation-key>

If --company/--contact/--email/ --phone are omitted and the terminal is interactive, the CLI prompts for each one (with basic email validation); in a non-interactive shell, a missing flag is a hard error. On success it prints the licence id, customer, state, expiry and granted capacities — the same shape as license above.

calls

Lists active calls (GET /calls?state=active): call id, direction (inbound/outbound), the peer (caller for inbound, destination for outbound), trunk, duration, and state (ringing or answered).

strowger-cli calls
hangup

Sends DELETE /calls/<id>. Result is one of: the call was cancelled (still ringing/queued), a BYE was sent (answered call), or it had already finished. A 409 means the call is still being established and there is no signalling driver yet to hang up.

strowger-cli hangup 6f2c1e9a-...
trunks

Lists every trunk (GET /trunks) with its name, registrar, registration state, and whether it is currently active.

strowger-cli trunks
trunk enable / disable

Activates or gracefully deactivates a trunk hot, without editing the config file — under the hood this calls POST /endpoints/<name>/activate or /deactivate.

strowger-cli trunk disable ovh-prod
strowger-cli trunk enable ovh-prod
config

Reads the resolved config file (--config, or /etc/strowger/config.toml, or ./config.toml). Plain config prints the TOML with every ${VAR} interpolated from the environment — except known secret fields (password, activation_key, api_key), which are always masked as *** regardless of interpolation, so the output is always safe to paste into a chat or a ticket. --validate instead loads the config through the daemon's own parser and exits 0 (valid) or 1 (with the parse/validation error), without starting anything.

strowger-cli config
strowger-cli config --validate