Alerting

Threshold and absence rules authored from the dashboard, fired only on state transitions, delivered to your own webhook.

Threshold and absence rules are defined from the dashboard itself (Alerts page) — no code required to create one. A background evaluator polls every 30 seconds and fires only on state transitions (an incident opens when a rule first goes out of bounds, and resolves when it recovers) so a rule that stays broken for an hour doesn't re-notify every cycle.

Webhook delivery

Nafas does not send email, SMS, or Slack messages itself. When AlertWebhookUrl is set, every open or resolve event is POSTed there as JSON, and your own system takes it from there:

json
{
  "ruleId": 12,
  "ruleName": "High error rate",
  "ruleType": "threshold",
  "status": "open",
  "detail": "error_rate is 8.4, threshold is 5",
  "triggeredAtUtc": "2026-01-15T09:32:00Z",
  "resolvedAtUtc": null
}

A failed webhook delivery is logged and retried on the next transition — it never fails the request pipeline, and the incident still exists in the dashboard's own incident list regardless of whether delivery succeeded.