Skip to main content
Off-ramp lets users sell USDT and receive EUR or USD on their debit/credit card.

Enable Off-Ramp

Off-ramp is disabled by default. To enable it for your integration, request it during onboarding or contact the Proof team.

Request a Sell Session

Pass "type": "sell" in the session request:
curl -X POST https://DOMAIN/widget/session \
  -H "Authorization: Bearer <client_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "partner_user_id": "user-123",
    "user_email": "user@example.com",
    "currency": "USDT",
    "network": "TRC20",
    "fiat_currency": "EUR",
    "type": "sell"
  }'
The response and widget embed process are identical to on-ramp. Use the returned parameters with proofWidget.run() as described in Quickstart.

Requirements

All of the following must be satisfied for off-ramp to work.
RequirementDetails
Off-ramp enabledMust be enabled for your integration by Proof team
KYC verifiedUser must have a verified KYC profile. The widget handles this automatically.
Fiat currencyOnly EUR and USD are supported as fiat payout currencies
Deposit timeoutIf no crypto deposit is received within 6 hours, the sell request fails automatically

Off-Ramp Flow

1

User initiates sell

Your frontend calls POST /widget/session with type: sell.
2

KYC check

If the user is not yet KYC verified, the widget guides them through verification first.
3

Sell widget opens

The widget shows the sell flow: the user enters amount, adds their card, and receives a deposit address.
4

User sends crypto

The user sends USDT to the designated address. The widget tracks the deposit.
5

Fiat payout

Once the deposit is confirmed, the exchange is processed and fiat is sent to the user’s card.
6

Completion

Transaction status updates to completed. You receive a WebSocket update or see it in polling.

Transaction Statuses (Sell)

StatusDescription
pendingWaiting for user’s crypto deposit
processingCrypto deposit received, fiat payout being processed
completedFiat sent to user’s card
failedNo deposit received within 6 hours, or payout failed
cancelledUser cancelled

Important Notes

  • If the user does not send crypto within 6 hours, the sell request automatically fails.
  • Sell is only available for EUR and USD — other fiat currencies are not supported.
  • If the API returns 403 offramp_disabled, contact the Proof team to enable off-ramp for your integration.