01
Frontend path
- 01Collect amount, payment platform, fiat currency, and payout identifier.
- 02Show the provider's current policy boundary and require the user to confirm account, region, and transaction eligibility.
- 03Pass the connected viem WalletClient to useOfframp() or createOfframp({ walletClient }).
- 04Surface progress states: approving, registering, depositing, confirming, delegating, restricting, resuming, done.
- 05For an eligible extension-gated route, catch EXTENSION_REGISTRATION_REQUIRED and drive usePeerExtensionRegistration(platform).
- 06Call deposits(address) on page load so a refresh does not strand an in-flight seller.
02
State you should store
| Field | Reason |
|---|---|
| depositId | Primary handle for close(), OTC links, and support |
| txHash | Proof that the user signed and broadcast the deposit transaction |
| platform + currency | Route display, support, and analytics segmentation |
| identifier label | Human-readable payout reference; do not store secrets |
| integratorId | Stable attribution for product telemetry and support |
03
UX constraints
- The SDK targets Base mainnet; there is no public sandbox. Test with the 1 USDC minimum.
- Every SDK-created deposit delegates pricing to the Delegate vault. Do not present manual rate controls for this path.
- Fiat stays outside the SDK. The buyer and seller settle directly inside the selected payment app.
- Reconcile narrow owner state with deposits(); use Peerlytics API for broader market data, deposits, intents, and analytics.