Onboarding
Provided company name, registered origins, partner type, allowed crypto currencies, and (if applicable) initial wallet addresses to the Proof team
Received
partner_id, client_token, widget_id, and base URL from the Proof teamConfirmed whether off-ramp (
sell) is enabled for your partner recordAccess control
Every server-side caller uses
Authorization: Bearer <client_token>Every browser-side caller sends a registered
Origin headerYou understand that there is no partner-IP allowlist — any IP gating is your responsibility
Core integration
POST /widget/session is called with partner_user_id, user_email, network, currency, amount, and (if needed) typeWidget script (
https://widget.proof.community/widget.2.0.js) loadedproofWidget.run() called with every parameter from the session response, passed verbatimAt least one server-observable status channel implemented: polling, WebSocket, or webhook
Polling or WebSocket stops on terminal statuses (
completed, failed, cancelled)Currency and wallet coverage
Confirmed with Proof that every
(currency, network) pair your users will request is enabled for your integrationTested a session for each supported
(currency, network) and received an address in the responseError handling
Surface
wallet_not_supported and currency_not_allowed to your operator dashboard — these usually mean Proof needs to enable something for your integrationRetry
502 upstream_error with a small exponential backoffTreat
403 forbidden_origin as a configuration bug, not a runtime errorIdentity verification
Tested a first-time user flow (document upload + liveness check) end to end
Tested a returning verified user — confirmed the verification step is skipped
Payments
Tested on-ramp (buy) end to end and observed a
completed statusTested a failure path and observed a
failed statusTested off-ramp (sell) end to end, if enabled
Webhook (if webhook_url configured)
Your endpoint responds
2xx quickly and processes asynchronouslyYour handler is idempotent on
merchant_transaction_id — Proof may redeliverMobile
iOS:
NSCameraUsageDescription set in Info.plistiOS:
allowsInlineMediaPlayback enabled in WKWebView configiOS: verification camera tested
iOS: Apple Pay tested in Safari / WKWebView
Android: widget opened via Chrome Custom Tabs
Android: verification camera tested
Android: Google Pay tested in Chrome Custom Tabs
Go live
Confirmed go-live readiness with Proof team
Completed first live transaction with Proof team monitoring