Notifications
Events
Section titled “Events”| Event | When |
|---|---|
job.success, job.failed, job.cancelled |
A job ended |
job.watchdog |
The watchdog stopped a job that ran far too long (reason, step, ranMs, limitMs) |
bmc.unreachable |
A BMC stopped answering |
disk.unhealthy |
A disk’s SMART status turned warning or failed |
server.maintenance |
A server was put into maintenance or back in service |
Webhooks
Section titled “Webhooks”Add webhooks under Settings → Webhooks with a URL, the events (or all of them) and an optional secret.
TrixOS sends a POST with a JSON body:
{ "event": "job.failed", "at": "2026-11-08T20:14:27.000Z", "data": { "...": "event details, for example the job and server" }}With a secret, the request carries X-TrixOS-Signature: sha256=<hex>, the HMAC-SHA256 of the raw body with your
secret. Check it before you trust the request, for example in Node.js:
import { createHmac, timingSafeEqual } from 'node:crypto';
function verify(secret, rawBody, header) { const expected = Buffer.from('sha256=' + createHmac('sha256', secret).update(rawBody).digest('hex')); const got = Buffer.from(header ?? ''); return got.length === expected.length && timingSafeEqual(got, expected);}Deliveries time out after 10 seconds and are not retried. Webhook URLs must point to public addresses unless
TRIXOS_ALLOW_PRIVATE_URLS=true is set, so a webhook can’t be used to reach services inside your network.
With SMTP_URL and NOTIFY_FROM set, the result of a job (job.success, job.failed, job.cancelled) is also
mailed to the user who started it, when that user has an e-mail address.