Available offramp flows

Learn about the Offramp process flows, including the differences between the QR code flow and the Wallet Initiation flow, key parameters, and system requirements for completing crypto transactions.

Offramp process flow support:

Offramp provider

Wallet Initiation Flow (recommended)

QR code flow

AlchemyPay

Banxa

MoonPay

Unlimit Crypto

Koywe

TransFi

Onramp Money

✅ (*)


[*] - Onramp Money Wallet Initiation flow is supported only for networks:

ethereum, bsc, tron, polygon, solana, arbitrum, base, optimism, vechain, ethereumclassic, theta, fantom, cortex, avaxc, ronin, celo, rsk, moonriver, moonbeam, zksync, worldchain

The token list can be filtered using Only Crypto Networks (offramp) parameter.


Wallet Initiation Flow


Recommended for: integrations on mobile wallets and wallet-connected web applications.

Facilitate users with seamless crypto transfers without relying on manual QR code scanning or wallet address copy-pasting.

If the offrampCashoutRedirectUrl is passed in the widget, the system will use the Wallet Initiation flow, allowing the partner system to programmatically handle the crypto transfer process.


🔄 Redirect to Partner System

At a certain point during the transaction wallet flow, the user will be redirected to the partner’s system.

This redirect happens to the URL defined in the offrampCashoutRedirectUrl parameter.

🛠 Partner System Requirements

To enable this, the partner must set up an application-level web handler at the specified URL.

This handler should:

  1. Extract the forwarded query parameters from the redirect URL (see below).
  2. Use these parameters to initiate the crypto transfer to the designated provider wallet on behalf of the user.

📩 Forwarded Query Parameters

When the redirect occurs, the following information will be forwarded as query parameters:

ParameterDescription
offrampProvider ID
partnerContextContext or metadata provided by the partner (if any)
providerWalletAddressTarget wallet address (where the crypto needs to be sent)
walletSource wallet address (where the crypto is expected to come from, if known)
transactionIdOnramper transaction ID
sourceCurrencySource currency ID for the transaction
targetCurrencyTarget currency ID for the transaction
inAmountSource crypto amount to be transferred
paymentMethodThe ID of the payment method used for the fiat payout
totalFeeCombined fees for the transaction (in sourceCurrency)
countryCodeISO-3166 alpha-2 code of the country where the transaction was placed
exchangeRateThe effective exchange rate applied to this transaction (inAmount / outAmount)

The partner system will use this information to initiate the crypto transfer programmatically.


🚀 Crypto Transfer Process

Once the user is redirected to the partner system:

  1. The partner system extracts the query parameters.
  2. Using the extracted parameters, the partner’s backend initiates the crypto transfer to the provider’s wallet on behalf of the user.
  3. The transfer is executed, and the provider processes the fiat payout to the user via the selected payment method.

✅ Transaction Confirmation

After the crypto transfer is completed, the partner system must call the following API endpoint to confirm the crypto transfer:

POST /transactions/confirm/{type}

QR-Code Flow

If the offrampCashoutRedirectUrl is not provided in the widget, and the selected offramp supports the QR-code process, the system will automatically switch to the QR-code flow.

In this flow, the user will be shown a screen where they can copy-paste the amount and wallet address where the user has to send crypto, as well as a QR code that can be scanned using a wallet to initiate the transaction.

📘

Key Points to Remember

• The offrampCashoutRedirectUrl is the key differentiator between the two flows. If it’s included, the system initiates the Wallet Initiation flow; otherwise, if the offramp supports it, the QR code flow will be used.
• For the Wallet Initiation flow, the partner will handle the crypto transfer after being redirected, and the system will confirm the transfer using the transactions/confirm/{type} endpoint.