MarmunkDevelopers
Signed outcomes

Consume immutable delivery facts exactly once.

Marmunk normalizes provider events, signs the canonical request bytes, and retries webhook delivery with bounded backoff.

01

Verify before parsing

Marmunk-Webhook-Id: whd_...
Marmunk-Webhook-Timestamp: 1785369600
Marmunk-Webhook-Signature: v1=<hex-hmac>

Compute HMAC-SHA256 over timestamp + \".\" + raw_body. Use the raw request bytes, compare signatures in constant time, reject stale timestamps, then deduplicate by webhook ID.

02

Delivery event

{
  "id": "evt_01example",
  "type": "delivery.succeeded",
  "created_at": "2026-07-29T20:01:20.000Z",
  "data": {
    "email_id": "msg_01example",
    "recipient_id": "rcp_01example"
  }
}
03

Handler order

  1. Read the raw body and signature headers.
  2. Verify timestamp and HMAC.
  3. Claim the event ID in durable storage.
  4. Apply the normalized outcome transactionally.
  5. Return a 2xx response only after the durable claim succeeds.