A subscriber was added
Posted to the subscriptions to subscriber.created when a subscriber is added: signup form (source: form), API or MCP (source: api), or by hand in the app (source: manual). Confirming a pending subscriber produces no event. Signed and retried like every event. The test event (POST /api/v1/webhooks/{id}/test) arrives under this type too, with data: { test: true, message } and none of the fields of the real event: check data.test first.
Headers
t=<unix timestamp>,v1=<hex>: v1 is the HMAC-SHA256 of "<t>.<raw body>" keyed with the subscription's secret. Reject a t more than 300 seconds away from your clock.
The same t, in seconds.
The event's id — the same on every attempt and every replay: the deduplication key.
The event's type.
This delivery. A manual replay gets a new one.
The attempt number, starting at 1.
Payload
Example payload
{
"id": "evt_Kq1wE2rT3yU4iO5p",
"type": "subscriber.unsubscribed",
"created_at": "2026-09-25T12:41:58.866Z",
"data": {
"subscriber_id": "cmu5x0p3r00041n7n8m2t6hij",
"email": "claire@example.com",
"status": "unsubscribed",
"reason": "unsubscribe",
"campaign_id": "cmu79z1ab00001n7nqk2d4efg",
"message_id": "cmu7a2k9q000b1n7n3v5c8xyz"
}
}Response
Any 2xx within 15 seconds acknowledges receipt. Anything else — another status, a redirect (not followed), no answer, a network error — is retried: 5 attempts in all, the next ones 30 s, 2 min, 10 min and 1 h after the previous failure.
Changes
Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.