Signed webhooks, outbound delivery events, zero-downtime secret rotation
Webhooks just got a real security model and a real outbound surface.
- Signing secrets per endpoint. Every new webhook gets a fresh
whsec_…secret, shown once at create. Existing endpoints can generate one with a single click in Webhooks → Generate Secret. - Timestamped signatures.
X-Postscale-Signatureis nowt=<unix>,v1=<hmac>— the timestamp lets receivers reject replays outside a tolerance window (5 minutes is the recommended default). - Zero-downtime rotation. Rotating a secret keeps the previous
one valid for a configurable grace window (default 24 hours, max
7 days). During the window each delivery carries two
v1=signatures so receivers can update without dropping events. - Outbound delivery events. Subscribe an endpoint to
email.delivered,email.bounced,email.deferred,email.complained, oremail.sent— one webhook can subscribe to any combination includingemail.received. Events fire from a durable queue inside the API, so customer endpoint slowness can't back up our delivery pipeline.
Verification details, the full event taxonomy, payload shapes, and
runnable Node + Python verifiers are in the updated Webhooks
guide. Existing webhooks continue working unchanged
— their event_types defaults to ["email.received"] and they keep
delivering unsigned until you opt in to a secret.