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
| Field | Type | Description |
|---|---|---|
| amount | Number | Amount of fiat to be paid out |
| currency | String | Fiat currency code (e.g. KES) |
| chain | String | EVM blockchain (e.g. base, polygon) |
| destination | String | MoMo, Bank Account, Paybill, or Till |
| payoutMethod | Object | Recipient payout details (accountName, accountNumber, code) |
| refundAddress | String | On-chain address for refunds if payout fails |
| externalReference | String | Your 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"
}Updated about 2 months ago
