DOCS

Notifications

Understand notification channels, alert sensitivity, webhook payloads, and recovery alerts.

What is a notification channel?

A notification channel is a destination where alert messages are delivered when an incident opens or resolves. Each channel type has its own setup — from a simple email address to a webhook endpoint with HMAC signature verification.

When a monitor goes down, every channel attached to the escalation policy receives the alert simultaneously — they don't queue.

DOWN
Production API
Alert
Slack
Email
Telegram

Available channels

ChannelPlansNotes
EmailAllDefault channel; always available
SlackAllIncoming Webhook from your Slack workspace
DiscordAllIncoming Webhook from your Discord server
TelegramAllLink via @HowlOpsAlertsBot
Custom WebhookStandard+HTTPS endpoint, JSON payload, optional HMAC signing
PushoverStandard+Push notifications to mobile devices
MattermostStandard+Incoming Webhook from Mattermost
Microsoft TeamsStandard+Incoming Webhook from Teams channel
PagerDutyPremium+Events API v2 integration key
OpsgeniePremium+REST API integration key
JiraPremium+Creates issues for new incidents
ZendeskPremium+Opens tickets for new incidents
AWS SNSPremium+Publishes to an SNS topic
SMS / TwilioEnterpriseRequires admin-level configuration

Alert sensitivity

The alert threshold on each monitor controls how sensitive the alerting is:

  • 1 (default) — alert fires on the first consecutive failure. Use for critical production services.
  • 2–3 — alert fires after N consecutive failures. Use for less-critical services to absorb transient errors.

Recovery alerts fire automatically when a monitor returns to a healthy state. Recovery alerts use the same channels as the original alert and cannot be disabled.


Webhook payload

When an alert fires on a custom webhook channel, the platform sends a JSON payload:

{
  "version":      "1",
  "event":        "monitor.down",
  "monitor_name": "Production API",
  "url":          "https://api.example.com/health",
  "details":      "HTTP 503 - Service Unavailable",
  "timestamp":    "2026-05-13T10:00:00Z",
  "tenant_id":    "00000000-0000-0000-0000-000000000000",
  "monitor_id":   "00000000-0000-0000-0000-000000000001",
  "heartbeat_id": ""
}

Event types

EventWhen it fires
monitor.downMonitor or heartbeat failed
monitor.upMonitor or heartbeat recovered
monitor.ssl_expirySSL certificate is nearing expiry
testSent when you click "Send Test Alert"

For heartbeat events, heartbeat_id is populated and monitor_id is empty. For ping monitors, the url field contains ping://HOST.


Webhook signature verification

Each webhook request includes an X-HOWLOPS-Signature header — an HMAC-SHA256 hex digest of the raw request body, signed with your webhook secret. Verify it server-side to reject forged requests:

// Node.js
const crypto = require("crypto");

function verifySignature(body, secret, signature) {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(body, "utf8")
    .digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signature)
  );
}

Testing channels

Always test a channel before relying on it for production alerts. After adding a channel, click Send Test Alert in the channel settings. Verify the message arrives at the destination.


Assigning channels to monitors

A channel must be explicitly assigned to a monitor before it can receive alerts from that monitor. One channel can be assigned to many monitors. Removing a channel from a monitor does not delete the channel.

  1. Open a monitor and click Edit.
  2. In the Notifications section, select channels from the dropdown.
  3. Click Save.

Was this page helpful?