Integrations · Alert channel

Webhooks

Every alert as signed JSON to a URL you choose.

Each request carries Pagerless-Signature: t=<unix time>,v1=<HMAC-SHA256>. Compute the HMAC of t + "." + body with your webhook secret and compare it in constant time; reject old timestamps.

import { createHmac, timingSafeEqual } from "node:crypto";

function verify(header, body, secret) {
  const { t, v1 } = Object.fromEntries(header.split(",").map((p) => p.split("=")));
  const mac = createHmac("sha256", secret).update(`${t}.${body}`).digest("hex");
  return Math.abs(Date.now() / 1000 - Number(t)) < 300 && timingSafeEqual(Buffer.from(mac), Buffer.from(v1));
}

Updated .

Free for you and one backup · 3 apps · no card

Sleep through the small stuff.

Run one command in your repo. Pagerless shows every change before it makes it.

npx pagerless connect