Webhooks
Overview
Overview of the OpenPoly webhook delivery model.
Overview
OpenPoly webhooks notify operator backend after business state already committed.
Delivery model
- OpenPoly business flow commits DB state.
- OpenPoly writes outbox event.
- Dispatcher creates per-endpoint delivery records.
- Dispatcher signs raw JSON payload and sends
POSTrequest. - Operator receiver verifies signature, deduplicates
event_id, then processes event.
Webhook send is not part of wallet mutation or trade DB transaction.
Important guarantees
- business state does not roll back if webhook delivery fails
- same outbox event can produce multiple delivery attempts
- replay creates another delivery attempt for same event
- disabled endpoint receives no new deliveries
- dead-letter delivery stays visible for operator review and replay
What receiver must do
- read raw request body
- verify
X-Polynion-Signature - reject stale timestamp
- dedupe by
event_id - return
2xxonly after durable processing
State model
Outbox event statuses:
pendingdispatchingdispatchedfaileddead_letter
Delivery statuses:
pendingsentfaileddead_letter
Delivery boundaries
2xx-> delivery markedsent410-> delivery markeddead_letterimmediately- other non-
2xx-> retry until max attempts, thendead_letter - timeout/network/DNS/TLS failure -> retry until max attempts, then
dead_letter
Where operators configure webhooks
- create and update endpoints:
/docs/operator-api/webhook-endpoints - inspect deliveries and replay:
/docs/operator-api/webhook-deliveries - verify signatures:
/docs/webhooks/signatures
