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.
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)) < 300Timeout 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.