POST /v1/webhooks; each endpoint carries its own signing
secret, returned once at creation.
Events
Subscribe to specific events or
["*"] for everything (including any events
added in the future). Unknown event names are rejected at creation time.
The dashboard’s Send test button delivers a ping event. It bypasses your
subscription filter — accept ping in your handler even if you validate the
event name against the list above.
Delivery format
Each delivery is aPOST with a JSON body:
Your endpoint must be https on a public host and should respond with a 2xx
within 10 seconds. Redirects are treated as failures — respond at the
subscribed URL directly.
Verifying signatures
The signature is an HMAC-SHA256 over"{timestamp}.{raw_body}" using your
endpoint’s secret, hex-encoded, sent as X-Affixo-Signature: sha256=<hex>.
Always verify against the raw request body (before any JSON parsing).
Node.js / Express
Retries
Failed deliveries (non-2xx, timeout, or redirect) are retried with exponential backoff —4^attempt seconds, capped at 8 hours — until the attempt limit is
reached, after which the delivery is marked failed. Because retries can arrive
minutes to hours later, make your handler idempotent on X-Affixo-Delivery.
Deliveries already queued keep their signing secret and URL resolution at send
time, so a rotated secret or edited URL applies to every future attempt.