Lister les pays et opérateurs
curl --request GET \
--url https://api.kemypay.com/v1/mobile-money/countries \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.kemypay.com/v1/mobile-money/countries"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.kemypay.com/v1/mobile-money/countries', 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.kemypay.com/v1/mobile-money/countries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.kemypay.com/v1/mobile-money/countries"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.kemypay.com/v1/mobile-money/countries")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kemypay.com/v1/mobile-money/countries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": [
{
"country": "CMR",
"name": "Cameroon",
"currencies": [
"XAF"
],
"operators": [
{
"operator": "MTN_CMR",
"name": "MTN",
"currency": "XAF",
"decimals": 0,
"collection": {
"status": "operational",
"available": true,
"min_amount": "1.00",
"max_amount": "1000000.00",
"fee": {
"percent": "3.25",
"fixed_tiers": [],
"fixed_currency": null
}
},
"payout": {
"status": "operational",
"available": true,
"min_amount": "1.00",
"max_amount": "1000000.00",
"fee": {
"percent": "2.3",
"fixed_tiers": [],
"fixed_currency": null
}
},
"refund": {
"status": "operational",
"available": false,
"min_amount": "1.00",
"max_amount": "1000000.00",
"fee": null
}
},
{
"operator": "ORANGE_CMR",
"name": "Orange",
"currency": "XAF",
"decimals": 0,
"collection": {
"status": "closed",
"available": false,
"min_amount": "1.00",
"max_amount": "1000000.00",
"fee": {
"percent": "3.27",
"fixed_tiers": [],
"fixed_currency": null
}
},
"payout": {
"status": "operational",
"available": true,
"min_amount": "1.00",
"max_amount": "1000000.00",
"fee": {
"percent": "2",
"fixed_tiers": [],
"fixed_currency": null
}
},
"refund": {
"status": "operational",
"available": false,
"min_amount": "1.00",
"max_amount": "1000000.00",
"fee": null
}
}
]
}
],
"meta": {
"request_id": "a4f8e2c1b3d97056",
"timestamp": "2026-10-29T10:00:00+00:00",
"mode": "live"
}
}{
"success": false,
"error": {
"code": "COUNTRY_NOT_SUPPORTED",
"message": "Mobile money is not available in GHA for your account."
},
"meta": {
"request_id": "a4f8e2c1b3d97056",
"timestamp": "2026-10-29T10:00:00+00:00",
"mode": "live"
}
}Catalog
Lister les pays et opérateurs
Les pays disponibles pour votre compte, avec leurs opérateurs. Pour chaque opérateur et devise, collection,
payout et refund donnent l’état en direct, si l’opération est disponible maintenant (available), les montants
minimum et maximum par transaction, et votre prix tout compris (fee).
- Les données des opérateurs sont rafraîchies toutes les 10 minutes. Mettez-les en cache quelques minutes de votre côté.
- N’affichez un opérateur à votre client que si
collection.availablevauttrue. - Arrondissez les montants aux
decimalsde l’opérateur : elles peuvent différer entre opérateurs d’une même devise. - Les payouts et remboursements ne sont pas encore ouverts : leur état est donné pour information.
GET
/
mobile-money
/
countries
Lister les pays et opérateurs
curl --request GET \
--url https://api.kemypay.com/v1/mobile-money/countries \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.kemypay.com/v1/mobile-money/countries"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.kemypay.com/v1/mobile-money/countries', 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.kemypay.com/v1/mobile-money/countries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.kemypay.com/v1/mobile-money/countries"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.kemypay.com/v1/mobile-money/countries")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kemypay.com/v1/mobile-money/countries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": [
{
"country": "CMR",
"name": "Cameroon",
"currencies": [
"XAF"
],
"operators": [
{
"operator": "MTN_CMR",
"name": "MTN",
"currency": "XAF",
"decimals": 0,
"collection": {
"status": "operational",
"available": true,
"min_amount": "1.00",
"max_amount": "1000000.00",
"fee": {
"percent": "3.25",
"fixed_tiers": [],
"fixed_currency": null
}
},
"payout": {
"status": "operational",
"available": true,
"min_amount": "1.00",
"max_amount": "1000000.00",
"fee": {
"percent": "2.3",
"fixed_tiers": [],
"fixed_currency": null
}
},
"refund": {
"status": "operational",
"available": false,
"min_amount": "1.00",
"max_amount": "1000000.00",
"fee": null
}
},
{
"operator": "ORANGE_CMR",
"name": "Orange",
"currency": "XAF",
"decimals": 0,
"collection": {
"status": "closed",
"available": false,
"min_amount": "1.00",
"max_amount": "1000000.00",
"fee": {
"percent": "3.27",
"fixed_tiers": [],
"fixed_currency": null
}
},
"payout": {
"status": "operational",
"available": true,
"min_amount": "1.00",
"max_amount": "1000000.00",
"fee": {
"percent": "2",
"fixed_tiers": [],
"fixed_currency": null
}
},
"refund": {
"status": "operational",
"available": false,
"min_amount": "1.00",
"max_amount": "1000000.00",
"fee": null
}
}
]
}
],
"meta": {
"request_id": "a4f8e2c1b3d97056",
"timestamp": "2026-10-29T10:00:00+00:00",
"mode": "live"
}
}{
"success": false,
"error": {
"code": "COUNTRY_NOT_SUPPORTED",
"message": "Mobile money is not available in GHA for your account."
},
"meta": {
"request_id": "a4f8e2c1b3d97056",
"timestamp": "2026-10-29T10:00:00+00:00",
"mode": "live"
}
}Autorisations
Votre clé API secrète : sk_live_… (argent réel) ou sk_test_… (mode test).
Paramètres de requête
Seulement ce pays (ISO 3166-1 alpha-3, par exemple CMR).
Pattern:
^[A-Za-z]{3}$Exemple:
"CMR"