All services / Slack, Discord & webhook alerts

Outage alerts in Slack, Discord or your webhook

Free. No account. Paste a webhook URL, pick services, and we'll post when they go down, when reports spike early, and when they recover.

Pre-filled with Kahoot. Use the slug from a status page URL (damnisitdown.com/status/github). Up to 50, or leave empty for every outage we detect.

Events

We send a test message right away. Every alert has a link to manage or stop it.

How to get a webhook URL

  • Slack: create an app at api.slack.com/apps → Incoming Webhooks → Add New Webhook to Workspace → pick a channel → copy the URL.
  • Discord: Channel settings → Integrations → Webhooks → New Webhook → Copy Webhook URL.
  • Anything else: any public HTTPS endpoint that accepts a JSON POST (Zapier, Make, n8n, PagerDuty, your own server).

Generic webhook format

We POST application/json with headers X-DIID-Event, X-DIID-Timestamp and X-DIID-Signature: sha256=<hex>, an HMAC-SHA256 of timestamp + "." + body using your subscription's secret (shown once when you save).

{
  "event": "down",              // down | early | recovered | test
  "kind": "down",               // down | early | normal | recovered | test
  "service": { "slug": "github", "name": "GitHub", "url": "https://damnisitdown.com/status/github" },
  "level": "outage",
  "title": "Outage",
  "summary": "Checks are failing and user reports are well above normal.",
  "message": "🔴 GitHub looks down",
  "subscription_id": "…",
  "sent_at": "2026-11-01T21:00:00.000Z"
}
// Node.js: verify a Damn Is It Down webhook
import crypto from 'node:crypto'
const ts = req.headers['x-diid-timestamp']
const sig = req.headers['x-diid-signature']        // "sha256=<hex>"
const expected = 'sha256=' + crypto.createHmac('sha256', process.env.DIID_SECRET)
  .update(`${ts}.${rawBody}`).digest('hex')
const ok = crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected))
  && Math.abs(Date.now() / 1000 - Number(ts)) < 300

Timeout 5 seconds, any 2xx counts. Failed sends retry after 1, 5 and 30 minutes. After 10 failures in a row the alert pauses itself; turn it back on from the manage link.