Webhooks
Webhooks send in Test and Live mode, for every event type in the list.
The endpoint
- Save one HTTPS endpoint per mode in Dashboard → Developers. Reeds checks the URL when you save it and again on every send: it must use a host name (not an IP address,
localhostor an internal name) that resolves only to public addresses, and each send goes to the address Reeds checked. Redirects are never followed. - The signing secret (
whsec_test_...orwhsec_live_...) is shown in the dashboard. Rotating it keeps the old secret signing for 24 hours: each event then carries twov1values inReeds-Signature, so a receiver holding either secret verifies. Rotating again within the 24 hours drops the oldest secret.
Sending and retries
- Every event is a
POSTwithReeds-Event-Id,Reeds-Event-TypeandReeds-Signature, signed afresh on each attempt. Reply2xxwithin 10 seconds. - A failed attempt (an error status, a redirect, a timeout, a connection or TLS failure) is retried 1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours, 12 hours and 24 hours after the previous attempt, each with up to 15 seconds of jitter. After the 8th attempt the event is failed.
- An endpoint that keeps failing for 3 days is disabled: waiting events are marked failed, and the account's Owners, Admins and Developers are emailed. Save its URL again to turn it back on.
The event log and test events
- The dashboard's event log shows every event, its attempts and your server's answers for 30 days. Resend makes one more attempt at once, without changing the retry schedule, even while the endpoint is disabled.
POST /webhooks/testtakes an optionaltype(any event type;delivery.status_changedby default) and answers{ event_id, type, sent }. A test event is sent once and never retried. No endpoint for the mode, or an unknowntype, is422 INVALID_REQUEST.
Nothing is removed or renamed. Clients that ignore unknown fields and event types need no change.