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

# Overview

> How Proof On/Off Ramp works and what you need to integrate

## What is Proof On/Off Ramp?

Proof is a platform for crypto on-ramp (buy) and off-ramp (sell). You embed a single widget in your app, and your users get fiat ↔ crypto exchange — including identity verification, card payments, Apple Pay, and Google Pay — without leaving your product.

Proof handles:

* Per-partner widget configuration and currency policy
* Signature generation and wallet routing
* Identity verification orchestration
* Payment processing and provider callbacks
* Transaction status delivery (poll, WebSocket, and an outbound webhook back to your server)

You request a session and embed the widget. Everything behind that — payments, verification, settlement — is handled by Proof.

## Architecture

`client_token` must stay on your server — never ship it to the browser. All Proof API calls go from your backend to Proof.

```mermaid theme={null}
flowchart TB
    classDef browser fill:#eef2ff,stroke:#6366f1,stroke-width:2px,color:#1e1b4b
    classDef backend fill:#ecfdf5,stroke:#10b981,stroke-width:2px,color:#064e3b
    classDef proof fill:#fff7ed,stroke:#f97316,stroke-width:2px,color:#7c2d12
    classDef note fill:#f9fafb,stroke:#9ca3af,stroke-width:1px,color:#374151,font-style:italic

    Browser["<b>User's browser / app</b><br/><span style='font-size:11px'>Embeds the Proof widget</span>"]:::browser
    Backend["<b>Your backend</b><br/><span style='font-size:11px'>• Reads user's real IP<br/>• Holds client_token<br/>• Sets client_ip field</span>"]:::backend
    Proof["<b>Proof API</b><br/><span style='font-size:11px'>/widget · /ws</span>"]:::proof

    Browser  -- "1. POST /your-api/session<br/><i>(no client_token)</i>" --> Backend
    Backend  -- "2. POST /widget/session<br/><i>Bearer client_token<br/>{ …, client_ip }</i>" --> Proof
    Proof    -. "3. Outbound webhook<br/><i>partner.webhook_url<br/>status events</i>" .-> Backend
```

<Steps>
  <Step title="Onboard with Proof">
    Send us your company details, your backend server IP addresses, and optionally a webhook URL. We provision your partner record and return a `client_token`. See [Onboarding](/on-off-ramp/onboarding).
  </Step>

  <Step title="Request a session from your backend">
    Your frontend calls your own backend. Your backend calls `POST /widget/session` with the `client_token` and the user's real IP in `client_ip`. Proof returns every parameter the widget needs.
  </Step>

  <Step title="Embed the widget">
    Your backend passes the session parameters to the frontend. Load the Proof widget script and call `proofWidget.run()` with those parameters. The widget handles verification and payment inside an iframe.
  </Step>

  <Step title="Track the transaction">
    Your backend polls `GET /widget/transactions/{id}`, subscribes via WebSocket, or receives a server-to-server webhook on your `webhook_url`.
  </Step>
</Steps>

## Supported features

| Feature               | Details                                                                |
| --------------------- | ---------------------------------------------------------------------- |
| On-ramp (buy)         | Fiat → crypto via card, Apple Pay, Google Pay                          |
| Off-ramp (sell)       | Crypto → fiat payout to card                                           |
| Identity verification | Built-in document upload and liveness check, handled inside the widget |
| Mobile                | iOS WKWebView, Android Chrome Custom Tabs                              |
| Status delivery       | Polling API, WebSocket, server-to-server webhook                       |

## What's next

<CardGroup cols={2}>
  <Card title="Onboarding" icon="rocket" href="/on-off-ramp/onboarding">
    What you send us and what you get back.
  </Card>

  <Card title="Quickstart" icon="bolt" href="/on-off-ramp/quickstart">
    Get the widget running in three steps.
  </Card>

  <Card title="Transaction Status" icon="signal" href="/on-off-ramp/transaction-status">
    Polling, WebSocket, and outbound webhook delivery.
  </Card>

  <Card title="API Reference" icon="code" href="/on-off-ramp/api-session">
    Full endpoint reference.
  </Card>
</CardGroup>
