Skip to main content
Offramp lets your customers convert cryptocurrency into fiat currency deposited directly to their bank account. This guide covers the full implementation from crypto deposit to fiat settlement.

What is Offramp?

Offramp lets your customers convert cryptocurrency (USDT, USDC,etc) into fiat currency deposited to their bank account. The flow works like this:
  1. Customer sends crypto to a deposit address
  2. Coinut detects the deposit
  3. Coinut executes the trade
  4. Fiat arrives in the customer’s bank account

Architecture

Prerequisites

Before starting an offramp flow, ensure:
  • Customer has APPROVED KYC status
  • Customer’s bank account has been added and verified
  • You have the bank account ID from the POST /bank-account/add response

Step-by-Step Implementation

1

Create Customer

Same as onramp. Call POST /customer/create with name, email, type="DEPOSITOR", isIndividual=true. Wait for CUSTOMER_APPROVED webhook.
2

Add Bank Account

Call POST /bank-account/add with the customer’s banking details.
Store the returned bankAccountId. Required fields vary by currency — see the Bank Account Requirements table below.
3

Create Offramp Flow

Call POST /autoramp-flow/offramp with the crypto source and fiat destination:
This creates a deposit address and links incoming crypto to automatic fiat conversion.
4

Display Deposit Address

Retrieve the deposit address from the flow creation response or call GET /deposit-address/detail:
Display this address to the customer with a clear warning to send only on the specified network.
5

Customer Sends Crypto

Customer sends USDT to the displayed address on the specified network (ETH or TRX). Provide clear instructions:
  • Minimum deposit amount
  • Correct network only (wrong network = lost funds)
  • Include memo/tag if required
6

Monitor Deposits

Listen for webhook events:
  • DEPOSIT_RECEIVED — crypto detected on-chain
  • DEPOSIT_APPROVED — confirmations reached, deposit cleared
7

Track Trade

After deposit approval:
  • TRADE_CREATED — fiat trade initiated
  • TRADE_SETTLED — trade executed, fiat queued for bank transfer
8

Fiat Arrives

After TRADE_SETTLED, fiat is sent to the bank account via banking rails. Settlement time depends on currency:

Bank Account Requirements

Complete Code Example

Go-Live Checklist

  • Bank account validation working for all target currencies
  • Deposit address generation tested in sandbox
  • End-to-end flow verified with test transfers
  • Webhook handlers for all deposit and trade events
  • Error handling for insufficient funds and invalid addresses
  • Banking cutoff times documented for customer communication
  • Retry logic for failed bank transfers
Banking cutoff times vary by currency and institution. EUR SEPA transfers typically process until 3:00 PM CET. USD ACH transfers have a 5:00 PM ET cutoff. Communicate these timelines to your customers.