Webhooks are in beta. Event types and payload shapes may still
change. We’ll email orgs with active endpoints before any breaking
change.
webhook-id header.
Retry schedule
Standard Webhooks spec table. 10 attempts (initial + 9 retries), ~75 hours cumulative, ±15% jitter per slot.
After attempt 10, retries stop. The delivery shows up in the
dashboard’s deliveries panel as a failed attempt.
What triggers a retry
Auto-disable
If your endpoint fails too many deliveries in a row across roughly 100 failed attempts (no successful delivery between), Origami auto-disables it. Re-enable from the dashboard once the receiver is fixed.Idempotency: dedupe on webhook-id
Every retry of the same delivery reuses the same webhook-id. Keep
a short-retention set (5 minutes is plenty) of recently-seen ids:
webhook-ids. Idempotency is
per-delivery, not per-business-action.
Header webhook-timestamp vs envelope timestamp
webhook-timestamp(header) — dispatch time, recomputed every send. Use it for replay protection: reject signatures more than ±5 minutes off your wall clock. See signatures.data.timestamp(envelope) — event time, stable across retries. Use it when you want “when did the business action happen?”
Replay from the dashboard
If you missed events because of an outage on your side, open the deliveries panel and click Redeliver on the affected delivery. The retry comes through with the samewebhook-id, so your
idempotency layer correctly dedupes if you’ve already processed it.