Webhooks
Supported events
notification.sentnotification.failednotification.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.