Skip to main content
If you provide a 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 your webhook_url. There is no self-service endpoint.