webhook_url at onboarding, Proof POSTs a normalized transaction event to that URL on every status change.
This channel is optional — many partners rely on WebSocket and polling only. The webhook is most useful when your backend needs to react server-side without keeping a persistent connection open.
Delivery model
Payload
The status enum matches
GET /widget/transactions/{id} and the WebSocket tx.update event.
Handler expectations
Respond with any
2xx status code as quickly as possible. Heavy work should happen asynchronously after acknowledgement.Be idempotent on
merchant_transaction_id + status. Treat duplicate deliveries as no-ops.Treat the webhook as advisory. If the webhook stops arriving for a transaction you care about, fall back to polling or WebSocket — do not block business logic on the webhook alone.
Example handler (Express)
Updating the webhook URL
Contact the Proof team to add, change, or remove yourwebhook_url. There is no self-service endpoint.