Off-Ramps

Overview

The Cashless off-ramp API converts stablecoins (USDC/USDT) on supported EVM chains into fiat currency, paid out to a bank account or mobile money wallet.

Step 1: Get Supported Payout Methods

Before initiating, get the correct code for the user's payout method:

  • Bank Payouts: GET /banks — returns supported banks and codes
  • Mobile Money: GET /mobile-money-operators — returns providers and codes

Step 2: Initiate the Off-Ramp Transaction

POST /off-ramp

FieldTypeDescription
amountNumberAmount of fiat to be paid out
currencyStringFiat currency code (e.g. KES)
chainStringEVM blockchain (e.g. base, polygon)
destinationStringMoMo, Bank Account, Paybill, or Till
payoutMethodObjectRecipient payout details (accountName, accountNumber, code)
refundAddressStringOn-chain address for refunds if payout fails
externalReferenceStringYour unique ID for reconciliation
{
  "amount": 5000,
  "currency": "KES",
  "country": "KE",
  "chain": "base",
  "destination": "MoMo",
  "externalReference": "test1234",
  "payoutMethod": {
    "accountName": "John Doe",
    "accountNumber": "254712345678",
    "code": "mpesa"
  }
}

The API response includes a unique deposit address and the exact expectedAmount of USDC/USDT to send. The address is valid for 1 hour.

Step 3: Send Crypto to the Generated Address

Send the exact expectedAmount of USDC or USDT on the specified chain to the deposit address.

⚠️

Sending the wrong amount causes the transaction to fail and a refund to be initiated.

Step 4: Receive Payout and Confirmation

Once the crypto deposit is confirmed on-chain, Cashless automatically initiates the fiat payout. A webhook is sent on completion:

{
  "event": "transaction_updated",
  "data": {
    "transactionId": "zQQvoWnhYED3yXYEo7y7",
    "status": "successful",
    "type": "offramp",
    "externalReference": "cmb8fd4dfl4w004fd",
    "method": "momo",
    "depositAddress": "0x318aa0c46120bb214f7da0d53183d0b1c9be7047",
    "txId": "0xc3acfde7..."
  },
  "timestamp": "2025-08-18T10:40:38.922Z"
}