Skip to main content
Crossmint Offramp lets your users convert USDC or EURC into fiat and withdraw it to their own bank account without leaving your app. You integrate once, and Crossmint handles compliance, conversion, and the bank payout. This page explains how the flow works end to end before you build it. Offramp flow diagram showing the end-to-end process from user verification through bank payout

The Offramp Flow

1

Verify the user

Each user completes identity verification once. Verification runs asynchronously, so you trigger it and then poll until the user is verified. If your users are already KYC’d, you can bring them over by passing their identity data, so they skip the in-flow verification. See KYC & Compliance.
2

Save the user's bank account

The user’s bank details are saved as a reusable payment method. Bank details are tokenized at vault.crossmint.com. Crossmint keeps the token and the last digits, not the account number.
3

Create an offramp order

Your backend creates an order specifying the amount of USDC to cash out and the bank account to pay. The order comes back with a prepared deposit transaction that already carries a memo tying the deposit to this order.
4

Send the deposit

Your app broadcasts the prepared transaction from the user’s wallet. Crossmint matches the on-chain deposit to the order by its memo, so no extra confirmation call is needed.
5

Conversion and payout

The USDC is converted to fiat, and the payout goes to the user’s bank account over local rails.
6

Completion

The order completes and the funds settle in the user’s bank. You can track status by polling the order or via webhooks.

Key Concepts

Exact-In Amounts

You specify the amount of USDC the user sends (exact-in). The user sends exactly that amount of crypto, and the equivalent fiat, minus any applicable fees, is deposited into their bank account.

First-Party Payouts

The destination bank account must belong to the same user who owns the wallet and completed verification. The wallet the user pays from is linked to that verified identity, and the order resolves KYC through it. Offramp pays users out to their own bank accounts, never to third parties.

Settlement Timing

Once the USDC deposit is confirmed, fiat arrival depends on the payout rail, ranging from minutes to a few business days. Crossmint uses the account’s default rail unless you pin one with recipient.rail when creating the order. See Countries and Rails for the current rail catalog and settlement times. In the staging environment, payouts are simulated, so you can run the full flow end to end without funds moving. Funds only move in production.

SEPA in the Embedded Component

SEPA bank accounts appear in the component only when the payer wallet’s chain has EURC and your project has euro payouts set up. In a consumer (B2C) project, the user’s verified country of residence must also be in SEPA. Otherwise Add a bank account does not offer SEPA, and a SEPA account the user already saved is shown greyed out as unavailable.

Saved Bank Accounts in the Embedded Component

Users can rename and remove their saved bank accounts in the component. Removing one deletes it from the user’s saved payment methods, so it also disappears from the bank accounts API. The component refuses a removal once the session’s withdrawal was sent, and while another withdrawal from the same wallet is still being confirmed.

What Crossmint Handles vs. What You Build

Next Steps

Quickstart

Build your first offramp end to end

KYC & Compliance

How verification works for offramp