Skip to main content

Notifications

22 subscribable event types across Email, Slack, and Microsoft Teams. Per-event templates with Go variables, delivery via the job queue, and per-project routing.

Event catalog

Every notifiable event has a stable name. Subscribe channels to event names with optional severity filters.

EventFires when
cert.issuedA certificate is issued for the first time.
cert.renewedA renewal completes successfully.
cert.renewal_failedA renewal attempt fails.
cert.expiring_soonA certificate crosses the expiry warning window.
cert.expiredA certificate has expired.
cert.revokedA certificate is revoked from CertAutoPilot.
cert.revocation_detectedThe CA revoked a certificate out-of-band (detected by the revocation sweep).
distribution.successA distribution completes successfully (one event per distribution, including fan-out).
distribution.failedA distribution fails or completes partially.
distribution.rollback_successA distribution rollback succeeds.
distribution.rollback_failedA distribution rollback fails (or cannot be enqueued).
job.failedA background job exhausts its retries.
domain.expiring_soonA tracked domain registration is close to expiry.
domain.expiredA tracked domain registration has expired.
domain.dangling_dnsDNS for a tracked domain points at a resource that no longer exists (takeover risk).
domain.dnssec_missingA tracked domain has no DNSSEC at the registrar.
domain.no_dmarcA tracked domain has no DMARC policy.
approval.requestedAn operation requiring approval is requested.
approval.approvedAn approval request is approved.
approval.rejectedAn approval request is rejected.
approval.executedAn approved operation is executed.
approval.expiredAn approval request expires unanswered.
Discovery events

Discovery surfaces its results as findings rather than notification events. discovery.* event constants exist in the codebase but are not currently emitted and cannot be subscribed to in rules.

Channels

Configure under Settings → Notifications → Channels.

  • Email — SMTP host, port, STARTTLS / TLS, auth. Per-recipient lists.
  • Slack — incoming webhook URL or Bot OAuth token.
  • Microsoft Teams — Workflow URL (Power Automate) or legacy connector.

Toggling a channel off stops all delivery through it — rules pointing at a disabled channel are skipped (recorded in History as channel is disabled), even if the rules themselves stay enabled.

Templates

Each event has a built-in default template; org-level custom templates can override it per channel type. Variables are exposed via Go templating as flat, pre-formatted strings — for example:

Subject: Certificate Expiring Soon: {{.primary_domain}}

<p>Certificate <b>{{.primary_domain}}</b> is expiring soon.</p>
<p>Expires: {{.expires_at}}</p>
<p>Certificate: {{.certificate_id}}</p>

{{.event_type}}, {{.certificate_id}}, and {{.job_id}} are available on every event; the rest ({{.primary_domain}}, {{.error}}, {{.expires_at}}, {{.domain_name}}, …) vary per event. No template functions are registered, and missing variables render as empty strings. Custom templates are per channel type (email HTML vs Slack/Teams plain text). See Notification templates for the full per-event variable reference.

Routing

A rule binds one or more event types to a channel:

  • Severity at least (severity_min) — e.g. warning filters out info noise.
  • Project — rules are project-scoped; a rule only matches events from its project.
  • Recipients — per-rule recipient override for email channels.
  • Message Template (optional) — a specific template to render this rule's events. Leave empty to use the channel's default / built-in per-event message. Its channel type must match the rule's channel. Assigning different templates to different rules is how you get different messages for different events.

Multiple rules can match the same event; each fires independently (so avoid unintended overlap). A rule listing several events renders one template for all of them — split into separate rules, or guard event-specific variables with {{if}}, when the messages should differ.

Delivery & retries

Each matched rule enqueues a notification.send job. Delivery is retried by the job queue (up to 3 attempts with backoff); after the final failure the job is marked failed. Sent and failed deliveries surface under Settings → Notifications → History with their status and last error — there is no separate dead-letter buffer beyond the job queue itself.

Testing a channel

Each channel has a Send test button — fires a fixture event and reports the channel's response. Always click it after creating or editing a channel.

See also