Offramps
Our off-ramp API allows you to programmatically convert stablecoins (USDC/USDT) on supported EVM chains into fiat currency, which can be paid out to a bank account or a mobile money wallet. The process involves creating an off-ramp transaction, sending the specified crypto amount to a unique address, and waiting for the fiat payout.
Step 1: Get Supported Payout Methods
Before initiating a transaction, you need the correct code for the user's desired payout method.
For Bank Payouts: Use the GET /banks endpoint to fetch a list of supported banks and their corresponding codes.
For Mobile Money Payouts: Use the GET /mobile-money-operators endpoint to retrieve a list of supported mobile money providers and their codes.
You'll use the code
from the response in the next step.
Step 2: Initiate the Off-Ramp Transaction
To start the process, make a POST request to the /offramp
endpoint. This will generate a unique deposit address for the user.
Endpoint: POST /off-ramp
Request Body:
You need to provide the following details in the request body:
- amount: The amount of fiat currency to be paid out (e.g., 10000).
- currency: The fiat currency code (e.g., "KES").
- chain: The EVM blockchain you're sending funds from (e.g., "Polygon").
- payoutMethod: An object containing the recipient's payout details.
- accountName: The name of the account holder.
- accountNumber: The bank account or mobile money number.
- code: The unique code for the bank or mobile money operator obtained in Step 1.
- destination: The destination of the payout (e.g MoMo, Bank Account, Paybill & Till)
Example Request:
JSON
{
"amount": 5000,
"currency": "KES",
"country": "KE",
"chain": "base",
"destination": "MoMo",
"externalReference": "test1234",
"payoutMethod": {
"accountName": "John Doe",
"accountNumber": "254712345678",
"code": "mpesa"
}
}
The API response will include a unique address and the exact expectedAmount of crypto (USDC/USDT) to be sent. The address is valid for one hour.
Step 3: Send Crypto to the Generated Address
Next, your user must send the exact expectedAmount of USDC or USDT on the specified chain to the deposit address provided in the previous step's response.
Important Notes:
Send the Exact Amount: Sending an amount different from the expectedAmount will cause the transaction to fail and a refund to be initiated back to the address funds were received from.
Time Limit: The transfer must be confirmed on the blockchain within the 1-hour window.
Supported Tokens: Only USDC and USDT are supported.
Step 4: Receive Payout and Confirmation
Our system monitors the generated address for the incoming transaction.
Transaction Confirmation: Once the crypto deposit is confirmed on the blockchain, we automatically initiate the fiat payout to the payoutMethod details you provided.
Webhook Notification: When the payout is successfully processed, we will send a POST request with the final transaction status to your specified webhookUrl.
Your system should be configured to listen for this webhook to confirm that the off-ramp process is complete.
{
"event": "transaction_updated",
"data": {
"transactionId": "zQQvoWnhYED3yXYEo7y7",
"status": "successful",
"type": "offramp",
"externalReference": "cmb8fd4dfl4w004fd",
"method": "momo",
"depositAddress": "0x318aa0c46120bb214f7da0d53183d0b1c9be7047",
"txId": "0xc3acfde7f212fcb902045119ee41299249ca153fc5c2730b0e8adba749846b53"
},
"timestamp": "2025-08-18T10:40:38.922Z"
}
Updated about 5 hours ago