APIs

REST operations

Operate a running tenant from the same routes the Monitor and Alerts pages call. Auth, tenancy, and errors are on the REST API contract page.

How-tos: Replay a message, Watch the runtime, Page on failure.

Messages and replay

MethodPathPurpose
GET/messagesLedger. Filter by tenant, integration, time, status. ?limit=
POST/messages/{queue_id}/{seq}/replayNew attempt. Original row stays.

Replay accepts request_id / idempotency_key. Reuse the key to retry the call. A new key is a second replay. Replay always creates new history.

curl -s "$SIRIUS/messages?tenant_id=default&limit=20"
curl -s -X POST "$SIRIUS/messages/<queue_id>/<seq>/replay" \
  -H 'content-type: application/json' \
  -d '{"request_id":"replay-001"}'

Dead-letter queue

MethodPathPurpose
GET/failuresOpen, retrying, and terminal items
POST/failures/{id}/retryNew attempt
POST/failures/{id}/resolveHuman handled it elsewhere
POST/failures/{id}/terminalIrreversible close

terminal is not a first response. Prefer retry after the destination is healthy, or resolve when the work happened outside Sirius.

Dashboard and instance metrics

MethodPathPurpose
GET/operations/overviewKPI tiles, charts, work queue
GET/operations/instance/metricsLive CPU, memory, disk, database, runtime
GET/operations/instance/metrics/historyRetained trend
GET / PUT/operations/monitoring/settingsWindow, capture, retention
POST/operations/monitoring/purgeExplicit purge

Overview is computed from the ledger and the failure registry. The window is the operator-configured dashboard window (clamped), not a hardcoded 24 hours. Latency tiles render n/a when latency_ms is not recorded — they do not invent a number.

curl -s "$SIRIUS/operations/overview?tenant_id=default" | jq '.kpis'
curl -s "$SIRIUS/operations/instance/metrics" | jq '{cpu:.cpu.used_pct, mem:.memory.used_pct}'

Runtime internals

PrefixPurpose
/runtime/supervisorsWorker supervisors
POST /runtime/outbox/replayRe-drive the output outbox
/txcoord/transactionsIn-flight multi-destination transactions (read-only)

High-blast-radius mutations accept an idempotency key. Use it.

Logs

MethodPathPurpose
GET/logsSearch. level, q, related_to, limit
GET / PUT/logs/policyRetention + legal hold
POST/logs/retention/purgePurge (blocked by legal hold)

related_to is queue_id:sequence. Lists page with X-Next-Cursor (default 200, ceiling 1000). Walk until the header is absent. A bad cursor is 400.

curl -s "$SIRIUS/logs?tenant_id=default&level=warn&q=timeout"
curl -s "$SIRIUS/logs?tenant_id=default&related_to=<queue_id>:<sequence>"

Alerts

MethodPathPurpose
GET / POST/alerts/rulesRules (one signal each)
GET / POST/alerts/channelsEmail, Slack, Teams, webhook
POST/alerts/channels/{id}/testSend a probe
GET/alerts/instancesFiring / acked / resolved
POST/alerts/instances/{id}/ackTake ownership
POST/alerts/instances/{id}/resolveClose

Rule body: name, signal, severity, optional selector, condition, channel_ids, throttle_seconds, resolve_notify. Channel credentials are write-only secret references. Outbound URLs are SSRF-guarded.

Signals: log, failure, integration_status, component, deploy, cluster. Conditions: match, threshold, status_transition. operations[] is valid only on deploy and cluster.

Diagnostics

POST /diagnostics/* covers connectivity probes, a health report, and a support bundle. Use these when you would otherwise ask someone to “send logs.” The bundle is the supported way to capture a tenant’s posture for a ticket.

Audit

GET /audit pages with X-Next-Cursor (default 100, ceiling 1000). Mutating calls are recorded. Attribute agents and services with X-Sirius-Agent-ID, X-Sirius-Actor-Type, and X-Sirius-Actor-ID.

GET /agent/tools?category=operate is the live index of every operations route.