Docs
Alerting

Alert channels

Alert channels are account-level destinations for every alert Nevision produces: monitor down/recovery, SSL expiry, usage thresholds, and server metrics. Configure them under Settings → Alerts. Monitors notify all channels by default; each monitor can narrow its selection in the monitor form. If no channels are configured, alerts fall back to email exactly as before.

Slack

Create an incoming webhook (Slack App → Incoming Webhooks → Add New Webhook to Workspace) and paste the https://hooks.slack.com/… URL.

Discord

Server Settings → Integrations → Webhooks → New Webhook, then paste the webhook URL.

Microsoft Teams (Pro and up)

Create a Workflows incoming webhook (Workflows → "Post to a channel when a webhook request is received") and paste its URL. Alerts arrive as Adaptive Cards.

PagerDuty (Pro and up)

Add an Events API v2 integration to a PagerDuty service and paste the routing key. Down alerts open an incident; recovery alerts resolve the same incident automatically.

Generic webhook

Nevision POSTs a JSON envelope to your HTTPS endpoint and signs the raw body with a per-channel secret (shown once at creation):

POST <your-url>
content-type: application/json
x-nevision-event: monitor.down
x-nevision-signature: sha256=<hmac>

{
  "id": "5f2a…",
  "type": "monitor.down",
  "timestamp": "2026-08-03T12:00:00.000Z",
  "data": {
    "title": "Checkout API is DOWN",
    "status": "critical",
    "summary": "https://shop.example.com is failing health checks.",
    "fields": [{ "label": "Status code", "value": "503" }],
    "url": "https://www.nevision.app/uptime/…"
  }
}

Verify the signature by recomputing it over the exact raw body:

import { createHmac, timingSafeEqual } from "crypto";

function verify(rawBody, signatureHeader, secret) {
  const expected =
    "sha256=" + createHmac("sha256", secret).update(rawBody).digest("hex");
  const expectedBuf = Buffer.from(expected);
  const actualBuf = Buffer.from(signatureHeader);
  if (expectedBuf.length !== actualBuf.length) return false;
  return timingSafeEqual(expectedBuf, actualBuf);
}

Event types: monitor.down, monitor.recovered, monitor.ssl_expiry, usage.alert, server.alert. Deliveries time out after 5 seconds with one retry on network errors and 5xx responses.

Testing

Every channel has a Test button in Settings → Alerts that sends a sample down alert so you can verify wiring before an incident does it for you.