Skip to content

Webhooks

Supported events

  • notification.sent
  • notification.failed
  • notification.clicked

Example payload

json
{
  "id": "evt_53653fe925c63172b512f82f",
  "type": "notification.clicked",
  "createdAt": "2026-03-17T09:29:31.964Z",
  "projectId": "7f47f335dfbf022bdb985dd6",
  "data": {
    "notificationId": "679090d100fbb733db1321e9",
    "subscriptionId": "b84f64bb1ffa1c0687f5718a",
    "title": "Smoke Test Hello 2",
    "url": "https://example.com/welcome"
  }
}

Headers

text
x-nudgr-event-id: evt_123
x-nudgr-event-type: notification.clicked
x-nudgr-signature: sha256=<hex digest>

Verify signatures

ts
import crypto from "node:crypto";

export function verifyNudgrSignature(rawBody: string, secret: string, signature: string) {
  const expected = `sha256=${crypto.createHmac("sha256", secret).update(rawBody).digest("hex")}`;
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
}

Delivery behavior

  • Timeout: 5 seconds
  • Retries: 3 attempts
  • Retry schedule: immediate, +2s, +10s

Webhook delivery is best effort. A webhook failure does not change the push send result.

For the full end-to-end flow, see Architecture.

Nudgr documentation preview