> ## 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.

# Integration Checklist

> Everything to verify before going live

Use this checklist to confirm your integration is complete and production-ready.

## Onboarding

<Check>
  Provided company name, registered origins, partner type, allowed crypto currencies, and (if applicable) initial wallet addresses to the Proof team
</Check>

<Check>
  Received `partner_id`, `client_token`, `widget_id`, and base URL from the Proof team
</Check>

<Check>
  Confirmed whether off-ramp (`sell`) is enabled for your partner record
</Check>

## Access control

<Check>
  Every server-side caller uses `Authorization: Bearer <client_token>`
</Check>

<Check>
  Every browser-side caller sends a registered `Origin` header
</Check>

<Check>
  You understand that there is no partner-IP allowlist — any IP gating is your responsibility
</Check>

## Core integration

<Check>
  `POST /widget/session` is called with `partner_user_id`, `user_email`, `network`, `currency`, `amount`, and (if needed) `type`
</Check>

<Check>
  Widget script (`https://widget.proof.community/widget.2.0.js`) loaded
</Check>

<Check>
  `proofWidget.run()` called with every parameter from the session response, passed verbatim
</Check>

<Check>
  At least one server-observable status channel implemented: polling, WebSocket, or webhook
</Check>

<Check>
  Polling or WebSocket stops on terminal statuses (`completed`, `failed`, `cancelled`)
</Check>

## Currency and wallet coverage

<Check>
  Confirmed with Proof that every `(currency, network)` pair your users will request is enabled for your integration
</Check>

<Check>
  Tested a session for each supported `(currency, network)` and received an `address` in the response
</Check>

## Error handling

<Check>
  Surface `wallet_not_supported` and `currency_not_allowed` to your operator dashboard — these usually mean Proof needs to enable something for your integration
</Check>

<Check>
  Retry `502 upstream_error` with a small exponential backoff
</Check>

<Check>
  Treat `403 forbidden_origin` as a configuration bug, not a runtime error
</Check>

## Identity verification

<Check>
  Tested a first-time user flow (document upload + liveness check) end to end
</Check>

<Check>
  Tested a returning verified user — confirmed the verification step is skipped
</Check>

## Payments

<Check>
  Tested on-ramp (buy) end to end and observed a `completed` status
</Check>

<Check>
  Tested a failure path and observed a `failed` status
</Check>

<Check>
  Tested off-ramp (sell) end to end, if enabled
</Check>

## Webhook (if `webhook_url` configured)

<Check>
  Your endpoint responds `2xx` quickly and processes asynchronously
</Check>

<Check>
  Your handler is idempotent on `merchant_transaction_id` — Proof may redeliver
</Check>

## Mobile

<Check>
  iOS: `NSCameraUsageDescription` set in `Info.plist`
</Check>

<Check>
  iOS: `allowsInlineMediaPlayback` enabled in WKWebView config
</Check>

<Check>
  iOS: verification camera tested
</Check>

<Check>
  iOS: Apple Pay tested in Safari / WKWebView
</Check>

<Check>
  Android: widget opened via Chrome Custom Tabs
</Check>

<Check>
  Android: verification camera tested
</Check>

<Check>
  Android: Google Pay tested in Chrome Custom Tabs
</Check>

## Go live

<Check>
  Confirmed go-live readiness with Proof team
</Check>

<Check>
  Completed first live transaction with Proof team monitoring
</Check>
