Register an HTTPS endpoint and Originalis POSTs a signed event when an
action reaches a terminal state — no polling, no open connection.
Register
The response carries the signing secret (whsec_...) once — store it
immediately. Endpoints must be HTTPS on a public address.
Payloads are thin — fetch the resource for truth
Verify signatures
Deliveries follow the Standard Webhooks
scheme — off-the-shelf verifier libraries work. Each delivery carries
webhook-id, webhook-timestamp, and webhook-signature
(v1,base64(HMAC-SHA256(secret, "{id}.{timestamp}.{body}"))):
Delivery semantics
At-least-once. Failed deliveries retry with exponential backoff — up to
11 attempts over roughly 30 minutes. A 4xx from your receiver stops
retries immediately (except 408 and 429, which retry like a 5xx).
- Deduplicate on
webhook-id — it is stable across retries.
- Answer with a
2xx within 10 seconds; do slow work after
acknowledging.
- Inspect recent deliveries at
GET /api/v1/webhooks/{webhook_id}/deliveries — status, attempts,
and your receiver’s last response code.
Known gap (documented, not silent): a run failed by the background
stale-timeout sweep may not produce a webhook — the poll endpoints remain
the source of truth.