Proof exposes three independent channels for delivering transaction status. All three carry the same normalized status enum.Documentation Index
Fetch the complete documentation index at: https://docs.proof.community/llms.txt
Use this file to discover all available pages before exploring further.
Status enum
| Status | Terminal | Description |
|---|---|---|
pending | No | Session created; payment not yet captured |
processing | No | Payment captured; crypto leg in flight |
completed | Yes | Transaction finalized successfully |
failed | Yes | Payment, deposit, or payout failed |
cancelled | Yes | User cancelled inside the widget |
Channel 1 — Polling
GET /widget/transactions/{id}.
Recommended cadence: every 5–10 seconds while status is pending or processing. Stop on terminal states.
Channel 2 — WebSocket
merchant_transaction_id via the tx_id query parameter. See WebSocket for reconnection patterns and payload reference.
Channel 3 — Outbound webhook
If you provided awebhook_url at onboarding, Proof POSTs the normalized transaction event to that URL on every status change. Delivery is best-effort — always pair the webhook with polling or WebSocket for authoritative state. See Partner Webhook.
Widget callbacks
The widget fires browser-side callbacks (onStatusChange, onLoad, onReady, onPaymentFinished, onSellTransferEnabled) as the user progresses. These are informational only — never use them as the authoritative source for business logic, as they can be lost if the user closes the tab.
See Widget Callbacks for the full reference and payload shapes.
Retry behavior
If a payment fails inside the widget, the user can retry without requesting a new session, as long as theinit_token is still valid. The merchant_transaction_id stays the same across retries.