curl --request POST \
--url https://api.onswitch.xyz/offramp/initiate \
--header 'Content-Type: application/json' \
--header 'x-service-key: <api-key>' \
--data '
{
"amount": 100,
"wallet": "68d4f2a91eb37c15b8e3a4f7",
"country": "NG",
"currency": "NGN",
"asset": "base:usdc",
"beneficiary": {
"holder_type": "INDIVIDUAL",
"holder_name": "Chinonso Adeyemi",
"account_number": "3048915627",
"bank_code": "058"
},
"narration": "Bank transfer to Chinonso Adeyemi",
"exact_output": false,
"callback_url": "https://your-app.com/webhook",
"reference": "a3f9c2e1-7b4d-4a8e-9c62-1d8f4e6b2a90",
"channel": "BANK",
"reason": "PERSONAL_TRANSFER",
"developer_fee": 0.5,
"developer_recipient": "0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a",
"refund_address": "0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a",
"static": false
}
'import requests
url = "https://api.onswitch.xyz/offramp/initiate"
payload = {
"amount": 100,
"wallet": "68d4f2a91eb37c15b8e3a4f7",
"country": "NG",
"currency": "NGN",
"asset": "base:usdc",
"beneficiary": {
"holder_type": "INDIVIDUAL",
"holder_name": "Chinonso Adeyemi",
"account_number": "3048915627",
"bank_code": "058"
},
"narration": "Bank transfer to Chinonso Adeyemi",
"exact_output": False,
"callback_url": "https://your-app.com/webhook",
"reference": "a3f9c2e1-7b4d-4a8e-9c62-1d8f4e6b2a90",
"channel": "BANK",
"reason": "PERSONAL_TRANSFER",
"developer_fee": 0.5,
"developer_recipient": "0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a",
"refund_address": "0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a",
"static": False
}
headers = {
"x-service-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-service-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
amount: 100,
wallet: '68d4f2a91eb37c15b8e3a4f7',
country: 'NG',
currency: 'NGN',
asset: 'base:usdc',
beneficiary: {
holder_type: 'INDIVIDUAL',
holder_name: 'Chinonso Adeyemi',
account_number: '3048915627',
bank_code: '058'
},
narration: 'Bank transfer to Chinonso Adeyemi',
exact_output: false,
callback_url: 'https://your-app.com/webhook',
reference: 'a3f9c2e1-7b4d-4a8e-9c62-1d8f4e6b2a90',
channel: 'BANK',
reason: 'PERSONAL_TRANSFER',
developer_fee: 0.5,
developer_recipient: '0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a',
refund_address: '0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a',
static: false
})
};
fetch('https://api.onswitch.xyz/offramp/initiate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.onswitch.xyz/offramp/initiate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => 100,
'wallet' => '68d4f2a91eb37c15b8e3a4f7',
'country' => 'NG',
'currency' => 'NGN',
'asset' => 'base:usdc',
'beneficiary' => [
'holder_type' => 'INDIVIDUAL',
'holder_name' => 'Chinonso Adeyemi',
'account_number' => '3048915627',
'bank_code' => '058'
],
'narration' => 'Bank transfer to Chinonso Adeyemi',
'exact_output' => false,
'callback_url' => 'https://your-app.com/webhook',
'reference' => 'a3f9c2e1-7b4d-4a8e-9c62-1d8f4e6b2a90',
'channel' => 'BANK',
'reason' => 'PERSONAL_TRANSFER',
'developer_fee' => 0.5,
'developer_recipient' => '0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a',
'refund_address' => '0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a',
'static' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-service-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.onswitch.xyz/offramp/initiate"
payload := strings.NewReader("{\n \"amount\": 100,\n \"wallet\": \"68d4f2a91eb37c15b8e3a4f7\",\n \"country\": \"NG\",\n \"currency\": \"NGN\",\n \"asset\": \"base:usdc\",\n \"beneficiary\": {\n \"holder_type\": \"INDIVIDUAL\",\n \"holder_name\": \"Chinonso Adeyemi\",\n \"account_number\": \"3048915627\",\n \"bank_code\": \"058\"\n },\n \"narration\": \"Bank transfer to Chinonso Adeyemi\",\n \"exact_output\": false,\n \"callback_url\": \"https://your-app.com/webhook\",\n \"reference\": \"a3f9c2e1-7b4d-4a8e-9c62-1d8f4e6b2a90\",\n \"channel\": \"BANK\",\n \"reason\": \"PERSONAL_TRANSFER\",\n \"developer_fee\": 0.5,\n \"developer_recipient\": \"0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a\",\n \"refund_address\": \"0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a\",\n \"static\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-service-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.onswitch.xyz/offramp/initiate")
.header("x-service-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 100,\n \"wallet\": \"68d4f2a91eb37c15b8e3a4f7\",\n \"country\": \"NG\",\n \"currency\": \"NGN\",\n \"asset\": \"base:usdc\",\n \"beneficiary\": {\n \"holder_type\": \"INDIVIDUAL\",\n \"holder_name\": \"Chinonso Adeyemi\",\n \"account_number\": \"3048915627\",\n \"bank_code\": \"058\"\n },\n \"narration\": \"Bank transfer to Chinonso Adeyemi\",\n \"exact_output\": false,\n \"callback_url\": \"https://your-app.com/webhook\",\n \"reference\": \"a3f9c2e1-7b4d-4a8e-9c62-1d8f4e6b2a90\",\n \"channel\": \"BANK\",\n \"reason\": \"PERSONAL_TRANSFER\",\n \"developer_fee\": 0.5,\n \"developer_recipient\": \"0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a\",\n \"refund_address\": \"0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a\",\n \"static\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.onswitch.xyz/offramp/initiate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-service-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 100,\n \"wallet\": \"68d4f2a91eb37c15b8e3a4f7\",\n \"country\": \"NG\",\n \"currency\": \"NGN\",\n \"asset\": \"base:usdc\",\n \"beneficiary\": {\n \"holder_type\": \"INDIVIDUAL\",\n \"holder_name\": \"Chinonso Adeyemi\",\n \"account_number\": \"3048915627\",\n \"bank_code\": \"058\"\n },\n \"narration\": \"Bank transfer to Chinonso Adeyemi\",\n \"exact_output\": false,\n \"callback_url\": \"https://your-app.com/webhook\",\n \"reference\": \"a3f9c2e1-7b4d-4a8e-9c62-1d8f4e6b2a90\",\n \"channel\": \"BANK\",\n \"reason\": \"PERSONAL_TRANSFER\",\n \"developer_fee\": 0.5,\n \"developer_recipient\": \"0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a\",\n \"refund_address\": \"0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a\",\n \"static\": false\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Offramp initiated successfully",
"timestamp": "2026-04-23T14:35:04.264Z",
"data": {
"status": "AWAITING_DEPOSIT",
"type": "OFFRAMP",
"reference": "61f9a35a-e535-4f04-ba50-3058b4c856c4",
"beneficiary": "69e8e664b9fea9f9e6dc3cbb",
"rate": 1380.845,
"developer_fee": {
"amount": 0,
"amount_usd": 0,
"currency": "USDC",
"network": "BASE"
},
"source": {
"amount": 10,
"amount_usd": 10,
"network": "BASE",
"currency": "USDC"
},
"destination": {
"amount": 13808.45,
"amount_usd": 10,
"network": "FIAT",
"currency": "NGN"
},
"deposit": {
"amount": 10,
"address": "0x3131b6f6a32751C9d99C1710e357A6C4297d17Bc",
"asset": "base:usdc",
"note": [
"Kindly send the exact amount to the wallet address to complete the transaction.",
"This wallet address is for one-time use only and has a 30 minutes expiry window."
]
},
"meta": {},
"created_at": "2026-04-23T14:35:02.448Z",
"updated_at": "2026-04-23T14:35:02.448Z"
}
}{
"success": false,
"message": "amount must be greater than 0 for the selected corridor",
"timestamp": "2026-04-18T14:22:08.631Z",
"data": null
}Initiate
Initiate a stablecoin to local currency transaction.
curl --request POST \
--url https://api.onswitch.xyz/offramp/initiate \
--header 'Content-Type: application/json' \
--header 'x-service-key: <api-key>' \
--data '
{
"amount": 100,
"wallet": "68d4f2a91eb37c15b8e3a4f7",
"country": "NG",
"currency": "NGN",
"asset": "base:usdc",
"beneficiary": {
"holder_type": "INDIVIDUAL",
"holder_name": "Chinonso Adeyemi",
"account_number": "3048915627",
"bank_code": "058"
},
"narration": "Bank transfer to Chinonso Adeyemi",
"exact_output": false,
"callback_url": "https://your-app.com/webhook",
"reference": "a3f9c2e1-7b4d-4a8e-9c62-1d8f4e6b2a90",
"channel": "BANK",
"reason": "PERSONAL_TRANSFER",
"developer_fee": 0.5,
"developer_recipient": "0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a",
"refund_address": "0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a",
"static": false
}
'import requests
url = "https://api.onswitch.xyz/offramp/initiate"
payload = {
"amount": 100,
"wallet": "68d4f2a91eb37c15b8e3a4f7",
"country": "NG",
"currency": "NGN",
"asset": "base:usdc",
"beneficiary": {
"holder_type": "INDIVIDUAL",
"holder_name": "Chinonso Adeyemi",
"account_number": "3048915627",
"bank_code": "058"
},
"narration": "Bank transfer to Chinonso Adeyemi",
"exact_output": False,
"callback_url": "https://your-app.com/webhook",
"reference": "a3f9c2e1-7b4d-4a8e-9c62-1d8f4e6b2a90",
"channel": "BANK",
"reason": "PERSONAL_TRANSFER",
"developer_fee": 0.5,
"developer_recipient": "0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a",
"refund_address": "0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a",
"static": False
}
headers = {
"x-service-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-service-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
amount: 100,
wallet: '68d4f2a91eb37c15b8e3a4f7',
country: 'NG',
currency: 'NGN',
asset: 'base:usdc',
beneficiary: {
holder_type: 'INDIVIDUAL',
holder_name: 'Chinonso Adeyemi',
account_number: '3048915627',
bank_code: '058'
},
narration: 'Bank transfer to Chinonso Adeyemi',
exact_output: false,
callback_url: 'https://your-app.com/webhook',
reference: 'a3f9c2e1-7b4d-4a8e-9c62-1d8f4e6b2a90',
channel: 'BANK',
reason: 'PERSONAL_TRANSFER',
developer_fee: 0.5,
developer_recipient: '0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a',
refund_address: '0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a',
static: false
})
};
fetch('https://api.onswitch.xyz/offramp/initiate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.onswitch.xyz/offramp/initiate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => 100,
'wallet' => '68d4f2a91eb37c15b8e3a4f7',
'country' => 'NG',
'currency' => 'NGN',
'asset' => 'base:usdc',
'beneficiary' => [
'holder_type' => 'INDIVIDUAL',
'holder_name' => 'Chinonso Adeyemi',
'account_number' => '3048915627',
'bank_code' => '058'
],
'narration' => 'Bank transfer to Chinonso Adeyemi',
'exact_output' => false,
'callback_url' => 'https://your-app.com/webhook',
'reference' => 'a3f9c2e1-7b4d-4a8e-9c62-1d8f4e6b2a90',
'channel' => 'BANK',
'reason' => 'PERSONAL_TRANSFER',
'developer_fee' => 0.5,
'developer_recipient' => '0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a',
'refund_address' => '0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a',
'static' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-service-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.onswitch.xyz/offramp/initiate"
payload := strings.NewReader("{\n \"amount\": 100,\n \"wallet\": \"68d4f2a91eb37c15b8e3a4f7\",\n \"country\": \"NG\",\n \"currency\": \"NGN\",\n \"asset\": \"base:usdc\",\n \"beneficiary\": {\n \"holder_type\": \"INDIVIDUAL\",\n \"holder_name\": \"Chinonso Adeyemi\",\n \"account_number\": \"3048915627\",\n \"bank_code\": \"058\"\n },\n \"narration\": \"Bank transfer to Chinonso Adeyemi\",\n \"exact_output\": false,\n \"callback_url\": \"https://your-app.com/webhook\",\n \"reference\": \"a3f9c2e1-7b4d-4a8e-9c62-1d8f4e6b2a90\",\n \"channel\": \"BANK\",\n \"reason\": \"PERSONAL_TRANSFER\",\n \"developer_fee\": 0.5,\n \"developer_recipient\": \"0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a\",\n \"refund_address\": \"0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a\",\n \"static\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-service-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.onswitch.xyz/offramp/initiate")
.header("x-service-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 100,\n \"wallet\": \"68d4f2a91eb37c15b8e3a4f7\",\n \"country\": \"NG\",\n \"currency\": \"NGN\",\n \"asset\": \"base:usdc\",\n \"beneficiary\": {\n \"holder_type\": \"INDIVIDUAL\",\n \"holder_name\": \"Chinonso Adeyemi\",\n \"account_number\": \"3048915627\",\n \"bank_code\": \"058\"\n },\n \"narration\": \"Bank transfer to Chinonso Adeyemi\",\n \"exact_output\": false,\n \"callback_url\": \"https://your-app.com/webhook\",\n \"reference\": \"a3f9c2e1-7b4d-4a8e-9c62-1d8f4e6b2a90\",\n \"channel\": \"BANK\",\n \"reason\": \"PERSONAL_TRANSFER\",\n \"developer_fee\": 0.5,\n \"developer_recipient\": \"0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a\",\n \"refund_address\": \"0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a\",\n \"static\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.onswitch.xyz/offramp/initiate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-service-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 100,\n \"wallet\": \"68d4f2a91eb37c15b8e3a4f7\",\n \"country\": \"NG\",\n \"currency\": \"NGN\",\n \"asset\": \"base:usdc\",\n \"beneficiary\": {\n \"holder_type\": \"INDIVIDUAL\",\n \"holder_name\": \"Chinonso Adeyemi\",\n \"account_number\": \"3048915627\",\n \"bank_code\": \"058\"\n },\n \"narration\": \"Bank transfer to Chinonso Adeyemi\",\n \"exact_output\": false,\n \"callback_url\": \"https://your-app.com/webhook\",\n \"reference\": \"a3f9c2e1-7b4d-4a8e-9c62-1d8f4e6b2a90\",\n \"channel\": \"BANK\",\n \"reason\": \"PERSONAL_TRANSFER\",\n \"developer_fee\": 0.5,\n \"developer_recipient\": \"0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a\",\n \"refund_address\": \"0x8F3aC91d2B741E59f064E9053a4d2E8F1c0b6D93a\",\n \"static\": false\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Offramp initiated successfully",
"timestamp": "2026-04-23T14:35:04.264Z",
"data": {
"status": "AWAITING_DEPOSIT",
"type": "OFFRAMP",
"reference": "61f9a35a-e535-4f04-ba50-3058b4c856c4",
"beneficiary": "69e8e664b9fea9f9e6dc3cbb",
"rate": 1380.845,
"developer_fee": {
"amount": 0,
"amount_usd": 0,
"currency": "USDC",
"network": "BASE"
},
"source": {
"amount": 10,
"amount_usd": 10,
"network": "BASE",
"currency": "USDC"
},
"destination": {
"amount": 13808.45,
"amount_usd": 10,
"network": "FIAT",
"currency": "NGN"
},
"deposit": {
"amount": 10,
"address": "0x3131b6f6a32751C9d99C1710e357A6C4297d17Bc",
"asset": "base:usdc",
"note": [
"Kindly send the exact amount to the wallet address to complete the transaction.",
"This wallet address is for one-time use only and has a 30 minutes expiry window."
]
},
"meta": {},
"created_at": "2026-04-23T14:35:02.448Z",
"updated_at": "2026-04-23T14:35:02.448Z"
}
}{
"success": false,
"message": "amount must be greater than 0 for the selected corridor",
"timestamp": "2026-04-18T14:22:08.631Z",
"data": null
}Authorizations
Service key for API authentication
Body
x >= 0BJ, CD, CI, CM, ET, GA, GH, GM, GN, KE, LR, ML, MW, NG, RW, SL, SN, TZ, UG, ZA, ZM base:usdc, solana:usdc, solana:usdt, ethereum:usdc, ethereum:usdt, polygon:usdc, polygon:usdt, bsc:usdc, bsc:usdt, arbitrum:usdc, optimism:usdc, gnosis:usdc, gnosis:usdt, arbitrum:usdt, avalanche:usdc, monad:usdc, optimism:usdt, monad:usdt, plasma:usdt, avalanche:usdt, tron:usdt, linea:usdt, mantle:usdt, hyperevm:usdt, berachain:usdt, linea:usdc, berachain:usdc, sonic:usdc, base:cngn, bsc:cngn The recipient of the offramp transaction.
- Receive to saved beneficiary
- Receive to NGN bank account
- Receive to GHS mobile money
- Receive to other destinations
Hide child attributes
Hide child attributes
Unique identifier for the beneficiary
^[a-f0-9]{24}$Wallet to send the offramp amount from
Currency code (optional).
CDF, ETB, GHS, GMD, GNF, KES, LRD, MWK, NGN, RWF, SLE, TZS, UGX, USD, XAF, XOF, ZAR, ZMW Bank transfer sender name. Only applicable for Nigeria bank transfers.
Transfer narration or memo; appears on the recipient's statement.
Webhook URL to receive transaction status updates.
Optional transfer channel. If not specified, defaults to the country's default channel.
BANK, MOBILEMONEY Purpose of the payment.
ADVERTISING_EXPENSES, ADVISORY_FEES, BUSINESS_INSURANCE, COMPUTER_SERVICES, CONSTRUCTION_EXPENSES, DELIVERY_FEES, EDUCATION, EXPORTED_GOODS, FAMILY_SUPPORT, FUND_INVESTMENT, GIFT_AND_DONATION, HOTEL_ACCOMMODATION, INFLUENCER_PAYMENT, INSURANCE_CLAIMS, LIBERALIZED_REMITTANCE, LOAN_PAYMENT, MAINTENANCE_EXPENSES, MEDICAL_TREATMENT, OFFICE_EXPENSES, OTHER, OTHER_FEES, PERSONAL_TRANSFER, PROPERTY_PURCHASE, PROPERTY_RENTAL, REWARD_PAYMENT, ROYALTY_FEES, SALARY_PAYMENT, SERVICE_CHARGES, SHARES_INVESTMENT, SMALL_VALUE_REMITTANCE, TAX_PAYMENT, TRAVEL, TRANSPORTATION_FEES, UTILITY_BILLS Optional developer fee percentage (0-100)
0 <= x <= 100Optional wallet address to receive developer fee.
Optional wallet address to receive refunds for failed/expired deposits.
Optional. When true, deposit address will always be the same for the same beneficiary.
Response
Successfully initiated offramp transaction
Hide child attributes
Hide child attributes
AWAITING_DEPOSIT, PROCESSING, COMPLETED, FAILED OFFRAMP, ONRAMP, SWAP, WALLET