curl --request POST \
--url https://api.jeko.africa/partner_api/payment_requests \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"amountCents": 10000,
"currency": "XOF",
"reference": "PAY-2024-001",
"storeId": "59ae202a-f583-4a15-970f-9e99bd1e0baa",
"paymentDetails": {
"type": "redirect",
"data": {
"paymentMethod": "wave",
"successUrl": "https://example.com/success",
"errorUrl": "https://example.com/error",
"deviceId": "DEVICE-123",
"forceProviderDirect": false,
"payerPhone": "+2250765432108"
}
}
}
'import requests
url = "https://api.jeko.africa/partner_api/payment_requests"
payload = {
"amountCents": 10000,
"currency": "XOF",
"reference": "PAY-2024-001",
"storeId": "59ae202a-f583-4a15-970f-9e99bd1e0baa",
"paymentDetails": {
"type": "redirect",
"data": {
"paymentMethod": "wave",
"successUrl": "https://example.com/success",
"errorUrl": "https://example.com/error",
"deviceId": "DEVICE-123",
"forceProviderDirect": False,
"payerPhone": "+2250765432108"
}
}
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
amountCents: 10000,
currency: 'XOF',
reference: 'PAY-2024-001',
storeId: '59ae202a-f583-4a15-970f-9e99bd1e0baa',
paymentDetails: {
type: 'redirect',
data: {
paymentMethod: 'wave',
successUrl: 'https://example.com/success',
errorUrl: 'https://example.com/error',
deviceId: 'DEVICE-123',
forceProviderDirect: false,
payerPhone: '+2250765432108'
}
}
})
};
fetch('https://api.jeko.africa/partner_api/payment_requests', 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.jeko.africa/partner_api/payment_requests",
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([
'amountCents' => 10000,
'currency' => 'XOF',
'reference' => 'PAY-2024-001',
'storeId' => '59ae202a-f583-4a15-970f-9e99bd1e0baa',
'paymentDetails' => [
'type' => 'redirect',
'data' => [
'paymentMethod' => 'wave',
'successUrl' => 'https://example.com/success',
'errorUrl' => 'https://example.com/error',
'deviceId' => 'DEVICE-123',
'forceProviderDirect' => false,
'payerPhone' => '+2250765432108'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-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.jeko.africa/partner_api/payment_requests"
payload := strings.NewReader("{\n \"amountCents\": 10000,\n \"currency\": \"XOF\",\n \"reference\": \"PAY-2024-001\",\n \"storeId\": \"59ae202a-f583-4a15-970f-9e99bd1e0baa\",\n \"paymentDetails\": {\n \"type\": \"redirect\",\n \"data\": {\n \"paymentMethod\": \"wave\",\n \"successUrl\": \"https://example.com/success\",\n \"errorUrl\": \"https://example.com/error\",\n \"deviceId\": \"DEVICE-123\",\n \"forceProviderDirect\": false,\n \"payerPhone\": \"+2250765432108\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-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.jeko.africa/partner_api/payment_requests")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amountCents\": 10000,\n \"currency\": \"XOF\",\n \"reference\": \"PAY-2024-001\",\n \"storeId\": \"59ae202a-f583-4a15-970f-9e99bd1e0baa\",\n \"paymentDetails\": {\n \"type\": \"redirect\",\n \"data\": {\n \"paymentMethod\": \"wave\",\n \"successUrl\": \"https://example.com/success\",\n \"errorUrl\": \"https://example.com/error\",\n \"deviceId\": \"DEVICE-123\",\n \"forceProviderDirect\": false,\n \"payerPhone\": \"+2250765432108\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jeko.africa/partner_api/payment_requests")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amountCents\": 10000,\n \"currency\": \"XOF\",\n \"reference\": \"PAY-2024-001\",\n \"storeId\": \"59ae202a-f583-4a15-970f-9e99bd1e0baa\",\n \"paymentDetails\": {\n \"type\": \"redirect\",\n \"data\": {\n \"paymentMethod\": \"wave\",\n \"successUrl\": \"https://example.com/success\",\n \"errorUrl\": \"https://example.com/error\",\n \"deviceId\": \"DEVICE-123\",\n \"forceProviderDirect\": false,\n \"payerPhone\": \"+2250765432108\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "d22c81f3-ee04-4ec5-8bd2-cd8af5dabcfc",
"storeId": "59ae202a-f583-4a15-970f-9e99bd1e0baa",
"reference": "PAY-2024-001",
"type": "redirect",
"paymentMethod": "wave",
"status": "success",
"redirectUrl": "https://pay.jeko.africa/payment/d22c81f3-ee04-4ec5-8bd2-cd8af5dabcfc",
"errorReason": "Payment failed",
"transaction": {
"id": "txn_1234567890",
"amount": {
"amount": 10000,
"currency": "XOF"
},
"fees": {
"amount": 10000,
"currency": "XOF"
},
"status": "success",
"counterpartLabel": "Customer Name",
"counterpartIdentifier": "+2250701234567",
"description": "Payment for order #12345",
"executedAt": "2024-01-15 14:30:25"
}
}{
"id": "internal_error",
"message": "Une erreur inattendue s'est produite",
"extras": "Détails supplémentaires de l'erreur"
}{
"id": "unauthorized",
"message": "Unauthorized",
"extras": "Détails supplémentaires de l'erreur"
}{
"id": "forbidden_action",
"message": "Action interdite",
"extras": "Détails supplémentaires de l'erreur"
}{
"id": "payment_request_exists_with_reference",
"message": "Une demande de paiement avec cette référence existe déjà",
"extras": "Une demande de paiement avec cette référence existe déjà"
}{
"id": "validation_error",
"message": "Échec de la validation",
"extras": {
"errors": [
{
"field": "paymentDetails.data.paymentMethod",
"rule": "in",
"message": "The paymentDetails.data.paymentMethod must be one of the following: orange, wave, mtn, moov, djamo"
},
{
"field": "paymentDetails.data.deviceId",
"rule": "required",
"message": "The paymentDetails.data.deviceId field is required when paymentDetails.type is soundbox"
}
]
}
}{
"id": "internal_error",
"message": "Une erreur inattendue s'est produite",
"extras": "Détails supplémentaires de l'erreur"
}Créer une demande de paiement
Crée une nouvelle demande de paiement pour l’entreprise authentifiée. Prend en charge les types de paiement redirect et soundbox.
Types de paiement :
- redirect : Retourne une URL de redirection pour les paiements basés sur le web
- soundbox : Envoie automatiquement la demande de paiement à l’appareil physique Jekobox et retourne le contenu du code QR. La communication avec le dispositif est entièrement gérée par JEKO.
curl --request POST \
--url https://api.jeko.africa/partner_api/payment_requests \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"amountCents": 10000,
"currency": "XOF",
"reference": "PAY-2024-001",
"storeId": "59ae202a-f583-4a15-970f-9e99bd1e0baa",
"paymentDetails": {
"type": "redirect",
"data": {
"paymentMethod": "wave",
"successUrl": "https://example.com/success",
"errorUrl": "https://example.com/error",
"deviceId": "DEVICE-123",
"forceProviderDirect": false,
"payerPhone": "+2250765432108"
}
}
}
'import requests
url = "https://api.jeko.africa/partner_api/payment_requests"
payload = {
"amountCents": 10000,
"currency": "XOF",
"reference": "PAY-2024-001",
"storeId": "59ae202a-f583-4a15-970f-9e99bd1e0baa",
"paymentDetails": {
"type": "redirect",
"data": {
"paymentMethod": "wave",
"successUrl": "https://example.com/success",
"errorUrl": "https://example.com/error",
"deviceId": "DEVICE-123",
"forceProviderDirect": False,
"payerPhone": "+2250765432108"
}
}
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
amountCents: 10000,
currency: 'XOF',
reference: 'PAY-2024-001',
storeId: '59ae202a-f583-4a15-970f-9e99bd1e0baa',
paymentDetails: {
type: 'redirect',
data: {
paymentMethod: 'wave',
successUrl: 'https://example.com/success',
errorUrl: 'https://example.com/error',
deviceId: 'DEVICE-123',
forceProviderDirect: false,
payerPhone: '+2250765432108'
}
}
})
};
fetch('https://api.jeko.africa/partner_api/payment_requests', 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.jeko.africa/partner_api/payment_requests",
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([
'amountCents' => 10000,
'currency' => 'XOF',
'reference' => 'PAY-2024-001',
'storeId' => '59ae202a-f583-4a15-970f-9e99bd1e0baa',
'paymentDetails' => [
'type' => 'redirect',
'data' => [
'paymentMethod' => 'wave',
'successUrl' => 'https://example.com/success',
'errorUrl' => 'https://example.com/error',
'deviceId' => 'DEVICE-123',
'forceProviderDirect' => false,
'payerPhone' => '+2250765432108'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-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.jeko.africa/partner_api/payment_requests"
payload := strings.NewReader("{\n \"amountCents\": 10000,\n \"currency\": \"XOF\",\n \"reference\": \"PAY-2024-001\",\n \"storeId\": \"59ae202a-f583-4a15-970f-9e99bd1e0baa\",\n \"paymentDetails\": {\n \"type\": \"redirect\",\n \"data\": {\n \"paymentMethod\": \"wave\",\n \"successUrl\": \"https://example.com/success\",\n \"errorUrl\": \"https://example.com/error\",\n \"deviceId\": \"DEVICE-123\",\n \"forceProviderDirect\": false,\n \"payerPhone\": \"+2250765432108\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-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.jeko.africa/partner_api/payment_requests")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amountCents\": 10000,\n \"currency\": \"XOF\",\n \"reference\": \"PAY-2024-001\",\n \"storeId\": \"59ae202a-f583-4a15-970f-9e99bd1e0baa\",\n \"paymentDetails\": {\n \"type\": \"redirect\",\n \"data\": {\n \"paymentMethod\": \"wave\",\n \"successUrl\": \"https://example.com/success\",\n \"errorUrl\": \"https://example.com/error\",\n \"deviceId\": \"DEVICE-123\",\n \"forceProviderDirect\": false,\n \"payerPhone\": \"+2250765432108\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jeko.africa/partner_api/payment_requests")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amountCents\": 10000,\n \"currency\": \"XOF\",\n \"reference\": \"PAY-2024-001\",\n \"storeId\": \"59ae202a-f583-4a15-970f-9e99bd1e0baa\",\n \"paymentDetails\": {\n \"type\": \"redirect\",\n \"data\": {\n \"paymentMethod\": \"wave\",\n \"successUrl\": \"https://example.com/success\",\n \"errorUrl\": \"https://example.com/error\",\n \"deviceId\": \"DEVICE-123\",\n \"forceProviderDirect\": false,\n \"payerPhone\": \"+2250765432108\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "d22c81f3-ee04-4ec5-8bd2-cd8af5dabcfc",
"storeId": "59ae202a-f583-4a15-970f-9e99bd1e0baa",
"reference": "PAY-2024-001",
"type": "redirect",
"paymentMethod": "wave",
"status": "success",
"redirectUrl": "https://pay.jeko.africa/payment/d22c81f3-ee04-4ec5-8bd2-cd8af5dabcfc",
"errorReason": "Payment failed",
"transaction": {
"id": "txn_1234567890",
"amount": {
"amount": 10000,
"currency": "XOF"
},
"fees": {
"amount": 10000,
"currency": "XOF"
},
"status": "success",
"counterpartLabel": "Customer Name",
"counterpartIdentifier": "+2250701234567",
"description": "Payment for order #12345",
"executedAt": "2024-01-15 14:30:25"
}
}{
"id": "internal_error",
"message": "Une erreur inattendue s'est produite",
"extras": "Détails supplémentaires de l'erreur"
}{
"id": "unauthorized",
"message": "Unauthorized",
"extras": "Détails supplémentaires de l'erreur"
}{
"id": "forbidden_action",
"message": "Action interdite",
"extras": "Détails supplémentaires de l'erreur"
}{
"id": "payment_request_exists_with_reference",
"message": "Une demande de paiement avec cette référence existe déjà",
"extras": "Une demande de paiement avec cette référence existe déjà"
}{
"id": "validation_error",
"message": "Échec de la validation",
"extras": {
"errors": [
{
"field": "paymentDetails.data.paymentMethod",
"rule": "in",
"message": "The paymentDetails.data.paymentMethod must be one of the following: orange, wave, mtn, moov, djamo"
},
{
"field": "paymentDetails.data.deviceId",
"rule": "required",
"message": "The paymentDetails.data.deviceId field is required when paymentDetails.type is soundbox"
}
]
}
}{
"id": "internal_error",
"message": "Une erreur inattendue s'est produite",
"extras": "Détails supplémentaires de l'erreur"
}Authorizations
Clé API pour les requêtes de l'API Partenaire
Body
Montant en centimes
x >= 10010000
Code devise (ISO 4217)
3"XOF"
Payment reference
1 - 100"PAY-2024-001"
Identifiant du magasin
"59ae202a-f583-4a15-970f-9e99bd1e0baa"
Show child attributes
Show child attributes
Response
Demande de paiement créée avec succès. Retourne les détails du paiement incluant l'URL de redirection pour les paiements web ou le contenu du code QR pour les paiements sur appareil.
Schéma de réponse pour récupérer une demande de paiement par ID
Payment request identifier
"d22c81f3-ee04-4ec5-8bd2-cd8af5dabcfc"
Identifiant du magasin
"59ae202a-f583-4a15-970f-9e99bd1e0baa"
Référence de paiement fournie dans la requête originale
"PAY-2024-001"
Payment type
redirect, soundbox "redirect"
Payment method used
orange, wave, mtn, moov, djamo "wave"
Statut actuel de la demande de paiement
pending, error, success "success"
URL de redirection pour les paiements web
"https://pay.jeko.africa/payment/d22c81f3-ee04-4ec5-8bd2-cd8af5dabcfc"
Raison de l'erreur
"Payment failed"
Détails de transaction lorsque le paiement est terminé
Show child attributes
Show child attributes