Outbound Webhooks
Receive real-time HTTP delivery receipts, bounce notifications, and HMAC cryptographic signature verification.
Outbound Webhooks
Configure webhook endpoints in the Sendrin Console to receive immediate delivery receipts, delivery failures, and open tracking events.
1. Webhook Payload Structure
When an event occurs, GNS sends an HTTP POST to your configured webhook URL:
{
"event": "notification.delivered",
"id": "evt_01J7K3X9AB0C1D2E3F4G",
"timestamp": "2026-09-13T13:00:00Z",
"data": {
"notification_id": "notif_01J7K3X9AB0C1D2E3F4G5H6J7K",
"channel": "email",
"recipient": "[email protected]",
"status": "delivered",
"attempts": 1,
"smtp_response": "250 2.0.0 Ok: queued as 4N8Z9q"
}
}2. Signature Verification (X-Sendrin-Signature & X-Sendrin-Timestamp)
Every webhook request includes an X-Sendrin-Timestamp header (Unix epoch seconds) and an X-Sendrin-Signature header containing an HMAC-SHA256 signature (v1=<hex>) computed over <timestamp>.<body_json> using your webhook signing secret:
X-Sendrin-Timestamp: 1789314000
X-Sendrin-Signature: v1=9a8b7c6d5e4f3a2b1c0d...Verification Example (Node.js / TypeScript)
import crypto from 'crypto';
function verifySendrinWebhook(
payloadRaw: string,
timestampHeader: string,
signatureHeader: string,
secret: string
): boolean {
if (!timestampHeader || !signatureHeader.startsWith('v1=')) return false;
const signature = signatureHeader.slice(3);
const signedPayload = `${timestampHeader}.${payloadRaw}`;
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(signedPayload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expectedSignature)
);
}WhatsApp Messaging
Enterprise WhatsApp Business messaging via Meta Cloud API with template mapping and mandatory opt-in validation.
Events & Templates
Learn how to define versioned event contracts, design multi-channel templates in Template Studio, and dispatch notifications with variable interpolation.