curl --request POST \
--url https://api.kemypay.com/v1/mobile-money/services \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Afroyamo",
"category": "dating",
"description": "Dating app for the African diaspora. Premium subscriptions paid by mobile money.",
"url": "https://afroyamo.com",
"support_email": "support@afroyamo.com",
"support_phone": "+237670000000",
"webhook_url": "https://api.afroyamo.com/kemypay/webhooks",
"callback_url": "https://afroyamo.com/payment/done",
"fee_bearer": "merchant"
}
'import requests
url = "https://api.kemypay.com/v1/mobile-money/services"
payload = {
"name": "Afroyamo",
"category": "dating",
"description": "Dating app for the African diaspora. Premium subscriptions paid by mobile money.",
"url": "https://afroyamo.com",
"support_email": "support@afroyamo.com",
"support_phone": "+237670000000",
"webhook_url": "https://api.afroyamo.com/kemypay/webhooks",
"callback_url": "https://afroyamo.com/payment/done",
"fee_bearer": "merchant"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Afroyamo',
category: 'dating',
description: 'Dating app for the African diaspora. Premium subscriptions paid by mobile money.',
url: 'https://afroyamo.com',
support_email: 'support@afroyamo.com',
support_phone: '+237670000000',
webhook_url: 'https://api.afroyamo.com/kemypay/webhooks',
callback_url: 'https://afroyamo.com/payment/done',
fee_bearer: 'merchant'
})
};
fetch('https://api.kemypay.com/v1/mobile-money/services', 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/services",
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([
'name' => 'Afroyamo',
'category' => 'dating',
'description' => 'Dating app for the African diaspora. Premium subscriptions paid by mobile money.',
'url' => 'https://afroyamo.com',
'support_email' => 'support@afroyamo.com',
'support_phone' => '+237670000000',
'webhook_url' => 'https://api.afroyamo.com/kemypay/webhooks',
'callback_url' => 'https://afroyamo.com/payment/done',
'fee_bearer' => 'merchant'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.kemypay.com/v1/mobile-money/services"
payload := strings.NewReader("{\n \"name\": \"Afroyamo\",\n \"category\": \"dating\",\n \"description\": \"Dating app for the African diaspora. Premium subscriptions paid by mobile money.\",\n \"url\": \"https://afroyamo.com\",\n \"support_email\": \"support@afroyamo.com\",\n \"support_phone\": \"+237670000000\",\n \"webhook_url\": \"https://api.afroyamo.com/kemypay/webhooks\",\n \"callback_url\": \"https://afroyamo.com/payment/done\",\n \"fee_bearer\": \"merchant\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.kemypay.com/v1/mobile-money/services")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Afroyamo\",\n \"category\": \"dating\",\n \"description\": \"Dating app for the African diaspora. Premium subscriptions paid by mobile money.\",\n \"url\": \"https://afroyamo.com\",\n \"support_email\": \"support@afroyamo.com\",\n \"support_phone\": \"+237670000000\",\n \"webhook_url\": \"https://api.afroyamo.com/kemypay/webhooks\",\n \"callback_url\": \"https://afroyamo.com/payment/done\",\n \"fee_bearer\": \"merchant\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kemypay.com/v1/mobile-money/services")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Afroyamo\",\n \"category\": \"dating\",\n \"description\": \"Dating app for the African diaspora. Premium subscriptions paid by mobile money.\",\n \"url\": \"https://afroyamo.com\",\n \"support_email\": \"support@afroyamo.com\",\n \"support_phone\": \"+237670000000\",\n \"webhook_url\": \"https://api.afroyamo.com/kemypay/webhooks\",\n \"callback_url\": \"https://afroyamo.com/payment/done\",\n \"fee_bearer\": \"merchant\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"code": "019a8f2e-4c1b-7d3a-9e55-2b6f0c1d8a47",
"name": "Afroyamo",
"category": {
"code": "dating",
"name": "Dating & social apps"
},
"description": "Dating app for the African diaspora. Premium subscriptions paid by mobile money.",
"url": "https://afroyamo.com",
"support_email": "support@afroyamo.com",
"support_phone": "+237670000000",
"status": "pending_review",
"fee_bearer": "merchant",
"webhook_url": "https://api.afroyamo.com/kemypay/webhooks",
"callback_url": null,
"review_reason": null,
"created_at": "2026-10-29T10:00:00+00:00",
"reviewed_at": null,
"webhook_secret": "whsec_5f2c0a9e7b1d4c3a8e6f0b2d9c7a1e4f5b8d3c6a9e2f1b4d7c0a3e6f9b2d5c8a"
},
"meta": {
"request_id": "a4f8e2c1b3d97056",
"timestamp": "2026-10-29T10:00:00+00:00",
"mode": "live"
}
}{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Some fields of the payment are missing or invalid.",
"details": {
"phone_number": "Required: the mobile money number with the country code, digits only, for example 237670000000."
}
},
"meta": {
"request_id": "a4f8e2c1b3d97056",
"timestamp": "2026-10-29T10:00:00+00:00",
"mode": "live"
}
}Create a Service
Creates a service: one app, website or business activity that collects payments on its own, with its own
balances. The service starts in pending_review while our team checks it. In test mode (sk_test_) you can
collect right away; in live mode the service must be active.
The webhook_secret is returned only in this response. Store it: you need it to verify our webhooks.
curl --request POST \
--url https://api.kemypay.com/v1/mobile-money/services \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Afroyamo",
"category": "dating",
"description": "Dating app for the African diaspora. Premium subscriptions paid by mobile money.",
"url": "https://afroyamo.com",
"support_email": "support@afroyamo.com",
"support_phone": "+237670000000",
"webhook_url": "https://api.afroyamo.com/kemypay/webhooks",
"callback_url": "https://afroyamo.com/payment/done",
"fee_bearer": "merchant"
}
'import requests
url = "https://api.kemypay.com/v1/mobile-money/services"
payload = {
"name": "Afroyamo",
"category": "dating",
"description": "Dating app for the African diaspora. Premium subscriptions paid by mobile money.",
"url": "https://afroyamo.com",
"support_email": "support@afroyamo.com",
"support_phone": "+237670000000",
"webhook_url": "https://api.afroyamo.com/kemypay/webhooks",
"callback_url": "https://afroyamo.com/payment/done",
"fee_bearer": "merchant"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Afroyamo',
category: 'dating',
description: 'Dating app for the African diaspora. Premium subscriptions paid by mobile money.',
url: 'https://afroyamo.com',
support_email: 'support@afroyamo.com',
support_phone: '+237670000000',
webhook_url: 'https://api.afroyamo.com/kemypay/webhooks',
callback_url: 'https://afroyamo.com/payment/done',
fee_bearer: 'merchant'
})
};
fetch('https://api.kemypay.com/v1/mobile-money/services', 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/services",
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([
'name' => 'Afroyamo',
'category' => 'dating',
'description' => 'Dating app for the African diaspora. Premium subscriptions paid by mobile money.',
'url' => 'https://afroyamo.com',
'support_email' => 'support@afroyamo.com',
'support_phone' => '+237670000000',
'webhook_url' => 'https://api.afroyamo.com/kemypay/webhooks',
'callback_url' => 'https://afroyamo.com/payment/done',
'fee_bearer' => 'merchant'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.kemypay.com/v1/mobile-money/services"
payload := strings.NewReader("{\n \"name\": \"Afroyamo\",\n \"category\": \"dating\",\n \"description\": \"Dating app for the African diaspora. Premium subscriptions paid by mobile money.\",\n \"url\": \"https://afroyamo.com\",\n \"support_email\": \"support@afroyamo.com\",\n \"support_phone\": \"+237670000000\",\n \"webhook_url\": \"https://api.afroyamo.com/kemypay/webhooks\",\n \"callback_url\": \"https://afroyamo.com/payment/done\",\n \"fee_bearer\": \"merchant\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.kemypay.com/v1/mobile-money/services")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Afroyamo\",\n \"category\": \"dating\",\n \"description\": \"Dating app for the African diaspora. Premium subscriptions paid by mobile money.\",\n \"url\": \"https://afroyamo.com\",\n \"support_email\": \"support@afroyamo.com\",\n \"support_phone\": \"+237670000000\",\n \"webhook_url\": \"https://api.afroyamo.com/kemypay/webhooks\",\n \"callback_url\": \"https://afroyamo.com/payment/done\",\n \"fee_bearer\": \"merchant\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kemypay.com/v1/mobile-money/services")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Afroyamo\",\n \"category\": \"dating\",\n \"description\": \"Dating app for the African diaspora. Premium subscriptions paid by mobile money.\",\n \"url\": \"https://afroyamo.com\",\n \"support_email\": \"support@afroyamo.com\",\n \"support_phone\": \"+237670000000\",\n \"webhook_url\": \"https://api.afroyamo.com/kemypay/webhooks\",\n \"callback_url\": \"https://afroyamo.com/payment/done\",\n \"fee_bearer\": \"merchant\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"code": "019a8f2e-4c1b-7d3a-9e55-2b6f0c1d8a47",
"name": "Afroyamo",
"category": {
"code": "dating",
"name": "Dating & social apps"
},
"description": "Dating app for the African diaspora. Premium subscriptions paid by mobile money.",
"url": "https://afroyamo.com",
"support_email": "support@afroyamo.com",
"support_phone": "+237670000000",
"status": "pending_review",
"fee_bearer": "merchant",
"webhook_url": "https://api.afroyamo.com/kemypay/webhooks",
"callback_url": null,
"review_reason": null,
"created_at": "2026-10-29T10:00:00+00:00",
"reviewed_at": null,
"webhook_secret": "whsec_5f2c0a9e7b1d4c3a8e6f0b2d9c7a1e4f5b8d3c6a9e2f1b4d7c0a3e6f9b2d5c8a"
},
"meta": {
"request_id": "a4f8e2c1b3d97056",
"timestamp": "2026-10-29T10:00:00+00:00",
"mode": "live"
}
}{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Some fields of the payment are missing or invalid.",
"details": {
"phone_number": "Required: the mobile money number with the country code, digits only, for example 237670000000."
}
},
"meta": {
"request_id": "a4f8e2c1b3d97056",
"timestamp": "2026-10-29T10:00:00+00:00",
"mode": "live"
}
}Authorizations
Votre clé API secrète : sk_live_… (argent réel) ou sk_test_… (mode test).
Body
2 à 60 caractères, unique parmi vos services.
"Afroyamo"
Un code de GET /mobile-money/categories.
"dating"
20 à 1 000 caractères. Ce que vous vendez et à qui.
"Dating app for the African diaspora. Premium subscriptions paid by mobile money."
L'adresse publique de votre site ou de votre application.
"https://afroyamo.com"
L'adresse où vos clients peuvent vous joindre.
"support@afroyamo.com"
Format international avec l'indicatif du pays.
"+237670000000"
Adresse https de votre serveur qui reçoit les résultats des paiements.
"https://api.afroyamo.com/kemypay/webhooks"
Facultatif. L'adresse où votre client est renvoyé après avoir payé.
"https://afroyamo.com/payment/done"
Qui paie les frais : merchant (déduits de ce que vous recevez) ou customer (ajoutés au prix).
merchant, customer