curl --request GET \
--url https://api.onswitch.xyz/coverage \
--header 'x-service-key: <api-key>'import requests
url = "https://api.onswitch.xyz/coverage"
headers = {"x-service-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-service-key': '<api-key>'}};
fetch('https://api.onswitch.xyz/coverage', 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/coverage",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.onswitch.xyz/coverage"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-service-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.onswitch.xyz/coverage")
.header("x-service-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.onswitch.xyz/coverage")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-service-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Coverage fetched successfully",
"timestamp": "2026-08-04T10:44:30.935Z",
"data": [
{
"country": "NG",
"currency": [
"NGN"
],
"continent": "AFRICA",
"default_channel": "BANK",
"channel": [
"BANK"
],
"direction": [
"ONRAMP",
"OFFRAMP"
],
"settlement_time": {
"BANK": "30-120 seconds",
"MOBILEMONEY": "5-10 minutes"
},
"payout_limit": {
"BANK": {
"min": "$1",
"max": "$100,000"
},
"note": "This represents the maximum USD value allowed per transaction."
}
},
{
"country": "GH",
"currency": [
"GHS"
],
"continent": "AFRICA",
"default_channel": "MOBILEMONEY",
"channel": [
"MOBILEMONEY"
],
"direction": [
"OFFRAMP",
"ONRAMP"
],
"settlement_time": {
"MOBILEMONEY": "5-10 minutes"
},
"payout_limit": {
"MOBILEMONEY": {
"min": "$10",
"max": "$100,000"
},
"note": "This represents the maximum USD value allowed per transaction."
}
},
{
"country": "KE",
"currency": [
"KES"
],
"continent": "AFRICA",
"default_channel": "MOBILEMONEY",
"channel": [
"MOBILEMONEY",
"BANK"
],
"direction": [
"OFFRAMP",
"ONRAMP"
],
"settlement_time": {
"BANK": "5-10 minutes",
"MOBILEMONEY": "5-10 minutes"
},
"payout_limit": {
"MOBILEMONEY": {
"min": "$10",
"max": "$100,000"
},
"BANK": {
"min": "$10",
"max": "$100,000"
},
"note": "This represents the maximum USD value allowed per transaction."
}
},
{
"country": "ZA",
"currency": [
"ZAR"
],
"continent": "AFRICA",
"default_channel": "BANK",
"channel": [
"BANK"
],
"direction": [
"OFFRAMP"
],
"settlement_time": {
"BANK": "5-10 minutes"
},
"payout_limit": {
"BANK": {
"min": "$100",
"max": "$100,000"
},
"note": "This represents the maximum USD value allowed per transaction."
}
},
{
"country": "CD",
"currency": [
"CDF"
],
"continent": "AFRICA",
"default_channel": "MOBILEMONEY",
"channel": [
"MOBILEMONEY"
],
"direction": [
"OFFRAMP",
"ONRAMP"
],
"settlement_time": {
"MOBILEMONEY": "5-10 minutes"
},
"payout_limit": {
"MOBILEMONEY": {
"min": "$10",
"max": "$100,000"
},
"note": "This represents the maximum USD value allowed per transaction."
}
}
]
}{
"success": false,
"message": "amount must be greater than 0 for the selected corridor",
"timestamp": "2026-04-18T14:22:08.631Z",
"data": null
}Get coverage
Retrieve information about supported countries, currencies, and payment rails.
curl --request GET \
--url https://api.onswitch.xyz/coverage \
--header 'x-service-key: <api-key>'import requests
url = "https://api.onswitch.xyz/coverage"
headers = {"x-service-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-service-key': '<api-key>'}};
fetch('https://api.onswitch.xyz/coverage', 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/coverage",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.onswitch.xyz/coverage"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-service-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.onswitch.xyz/coverage")
.header("x-service-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.onswitch.xyz/coverage")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-service-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Coverage fetched successfully",
"timestamp": "2026-08-04T10:44:30.935Z",
"data": [
{
"country": "NG",
"currency": [
"NGN"
],
"continent": "AFRICA",
"default_channel": "BANK",
"channel": [
"BANK"
],
"direction": [
"ONRAMP",
"OFFRAMP"
],
"settlement_time": {
"BANK": "30-120 seconds",
"MOBILEMONEY": "5-10 minutes"
},
"payout_limit": {
"BANK": {
"min": "$1",
"max": "$100,000"
},
"note": "This represents the maximum USD value allowed per transaction."
}
},
{
"country": "GH",
"currency": [
"GHS"
],
"continent": "AFRICA",
"default_channel": "MOBILEMONEY",
"channel": [
"MOBILEMONEY"
],
"direction": [
"OFFRAMP",
"ONRAMP"
],
"settlement_time": {
"MOBILEMONEY": "5-10 minutes"
},
"payout_limit": {
"MOBILEMONEY": {
"min": "$10",
"max": "$100,000"
},
"note": "This represents the maximum USD value allowed per transaction."
}
},
{
"country": "KE",
"currency": [
"KES"
],
"continent": "AFRICA",
"default_channel": "MOBILEMONEY",
"channel": [
"MOBILEMONEY",
"BANK"
],
"direction": [
"OFFRAMP",
"ONRAMP"
],
"settlement_time": {
"BANK": "5-10 minutes",
"MOBILEMONEY": "5-10 minutes"
},
"payout_limit": {
"MOBILEMONEY": {
"min": "$10",
"max": "$100,000"
},
"BANK": {
"min": "$10",
"max": "$100,000"
},
"note": "This represents the maximum USD value allowed per transaction."
}
},
{
"country": "ZA",
"currency": [
"ZAR"
],
"continent": "AFRICA",
"default_channel": "BANK",
"channel": [
"BANK"
],
"direction": [
"OFFRAMP"
],
"settlement_time": {
"BANK": "5-10 minutes"
},
"payout_limit": {
"BANK": {
"min": "$100",
"max": "$100,000"
},
"note": "This represents the maximum USD value allowed per transaction."
}
},
{
"country": "CD",
"currency": [
"CDF"
],
"continent": "AFRICA",
"default_channel": "MOBILEMONEY",
"channel": [
"MOBILEMONEY"
],
"direction": [
"OFFRAMP",
"ONRAMP"
],
"settlement_time": {
"MOBILEMONEY": "5-10 minutes"
},
"payout_limit": {
"MOBILEMONEY": {
"min": "$10",
"max": "$100,000"
},
"note": "This represents the maximum USD value allowed per transaction."
}
}
]
}{
"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
Query Parameters
Transaction direction
OFFRAMP, ONRAMP Filter by specific country (optional)
BJ, CD, CI, CM, ET, GA, GH, GM, GN, KE, LR, ML, MW, NG, RW, SL, SN, TZ, UG, ZA, ZM Filter by specific currency (optional). If not specified, defaults to the country's local currency.
CDF, ETB, GHS, GMD, GNF, KES, LRD, MWK, NGN, RWF, SLE, TZS, UGX, USD, XAF, XOF, ZAR, ZMW Response
Successfully retrieved coverage
Supported corridors: currencies, channels, directions, settlement times, and payout limits per country.
Hide child attributes
Hide child attributes
BJ, CD, CI, CM, ET, GA, GH, GM, GN, KE, LR, ML, MW, NG, RW, SL, SN, TZ, UG, ZA, ZM Supported fiat currency codes for this corridor.
1CDF, ETB, GHS, GMD, GNF, KES, LRD, MWK, NGN, RWF, SLE, TZS, UGX, USD, XAF, XOF, ZAR, ZMW Region label (e.g. AFRICA).
Default channel when the payment payload does not specify channel.
BANK, MOBILEMONEY "BANK"
Supported transfer channels for this corridor.
1BANK, MOBILEMONEY Whether onramp, offramp, or both apply for this row.
1OFFRAMP, ONRAMP Per-channel min/max strings plus optional note. Other keys match channel codes.
Hide child attributes
Hide child attributes
Explains how limits are interpreted (e.g. USD notional per transaction).