YENGAPAY est un agrégateur de moyens de paiements développé par la société KREEZUS permettant aux entreprises partenaires de percevoir des paiements clients depuis leurs plateformes.
NB : Le montant minimum pour un paiement est fixé a 100 F
ETAPES D’INTEGRATION
INTEGRATION YENGAPAY
PRODUCTION
CREATION DU PROJET
Avant toutes chose vous devez créer un compte marchand sur YENGAPAY.
Rendez-vous sur :
<https://app.yengapay.com>
Allez dans la section projet et créez votre projet
<aside> 💡 Vous avez la possibilité de désactiver les moyens de paiements que vous ne voulez pas présenter a l’utilisateur.
</aside>

<aside> 💡
Vous pouvez définir un Webhook sur lequel YENGAPAY va notifier de chaque paiement entrant.
</aside>

<aside> 💡 Vous pouvez définir une URL de redirection a la fin du paiement.
</aside>

INTEGRATION A L’APPLICATION MARCHANDE
Paramètres ⇒ Organisation


Paramètres ⇒ Clés Api, pour créer une API qui vous authentifiera lors des requêtes de paiements entrant. Nom de la clé (Créer un paiement entrant)

Paiement indirect
URL : [<https://api.yengapay.com/api/v1/groups/{organization_id}/payment-intent/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>){project_id}
METHODE: POST
PAYLOAD : {
"paymentAmount": 200, // Montant du paiement, frais applicable
"reference": "6646846426259895", // Votre identifiant pour ce paiement
"articles": [
{
"title": "Moto venu des USA", // Titre de l'article
"description": "Une moto neuve sans probleme", //Description de l'article
"pictures": [ //(optionnel) Images d'illustration de l'article
"<https://www.bmw-motorrad.fr/content/dam/bmwmotorradnsc/common/images/models/modeloverview/2022/nsc-master-modeloverview-s1000rr-P0N3H_600x360.jpg.asset.1663142269837.jpg>"
],
"price": 200 // Montant Illustratif
}
]
}
HEADERS: {
"x-api-key" : {api_key}
}
CURL
curl -X POST -H 'x-api-key: z3BbBpeBMeegH8MWBNCUSGgukbV5cBqt' -H 'Content-Type: application/json' -d '{"paymentAmount":200,"reference":"6646846426259895","articles":[{"title":"Moto venu des USA","description":"Une moto neuve sans probleme","pictures":["<https://www.bmw-motorrad.fr/content/dam/bmwmotorradnsc/common/images/models/modeloverview/2022/nsc-master-modeloverview-s1000rr-P0N3H_600x360.jpg.asset.1663142269837.jp"],"price>":100}]}' https://[api.yengapay.com](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)/api/v1/groups/{organization_id}/payment-intent/{project_id}
{
"id": "clx36jfpl0001vx7l7u3p32x3",
"createdAt": "2024-06-06T11:34:06.153Z",
"updatedAt": "2024-06-06T11:34:06.177Z",
"contryOrigin": "BF",
"reference": "6646846426259895",
"articleId": null,
"isPaylink": false,
"paymentIntentIsUsed": false,
"apiEnv": "prod",
"paymentSource": null,
"articles": [
{
"price": 200,
"title": "Moto venu des USA",
"pictures": [
"<https://www.bmw-motorrad.fr/content/dam/bmwmotorradnsc/common/images/models/modeloverview/2022/nsc-master-modeloverview-s1000rr-P0N3H_600x360.jpg.asset.1663142269837.jpg>"
],
"description": "Une moto neuve sans probleme"
}
],
"token": "6ByXm8zPfxarHaYf8gJLsJCuUJUjClGol2HdnJarCG2CpY25PgImwzDBHgeaApm3P%2FE65CDKPdK0CulG%2BFnpRQUufT7Mqi9wtvH0AWzmhZytInsVeGbi5e7x7KWh1zht",
"projectId": "67629",
"checkoutPageUrlWithPaymentToken": "https://[api.yengapay.com](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)/checkout/6ByXm8zPfxarHaYf8gJLsJCuUJUjClGol2HdnJarCG2CpY25PgImwzDBHgeaApm3P%2FE65CDKPdK0CulG%2BFnpRQUufT7Mqi9wtvH0AWzmhZytInsVeGbi5e7x7KWh1zht",
"customerNumber": "+22660101825",
"paymentAmount": 195,
"paymentFees": 5,
"currency": "XOF",
"transactionStatus": "PENDING",
"transactionType": "PAYMENT"
}
Dans la réponse de la requête de création du paiement entrant vous devez récupérer la valeur de {checkoutPageUrlWithPaymentToken} qui est une URL et l’ouvrir sur un navigateur pour que l’utilisateur puisse choisir le moyen de paiement et terminer le processus.

Paiement direct
Le paiement direct peut se faire de 2 manière différentes,
en initiant d’abord le paiement pour obtenir la liste des opérateurs disponibles, ou en passant directement au paiement avec un opérateur deja connu, nous allons présenter les 2 manières.
URL : [<https://api.yengapay.com/api/v1/groups/{organization_id}/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)projects/{project_id}/direct-payment/init
METHODE: POST
PAYLOAD : {
"amount": 200, // Montant net réçu par le destinataire
"articles":[
{
"title":"Belle Moto",
"description":"Sans description",
"price":2000
}
],
"reference": "6646846426259895", // Votre identifiant pour ce paiement
"customerEmailToNotify":"[email protected]" // Adresse a notifier après le paiement
}
HEADERS: {
"x-api-key" : {api_key}
}
CURL
curl -X POST [<https://api.yengapay.com/api/v1/groups/{organization_id}/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)projects/{project_id}/direct-payment/init
-H 'Content-Type: application/json'
-H 'x-api-key: pn7PnmrghXArBHcMWG3ozStzG7XQzQ1s'
-d '{"articles":[{"title":"Produit de test","description":"Sans description","price":200}], "customerEmailToNotify":"[email protected]", "amount":200}'
{
"paymentIntentId": "cmlgq6djo0007s601ksazqeh5",
"expiresAt": "2026-02-10T15:12:45.550Z",
"availableOperators": [
{
"code": "ORANGE",
"name": "Orange Money",
"countryCode": "BF",
"countryName": "Burkina Faso",
"flagUrl": "<https://flagcdn.com/w40/bf.png>",
"flow": "ONE_STEP",
"amount": 200,
"fees": 0,
"totalAmount": 200,
"minAmount": 200,
"maxAmount": 1000000
},
{
"code": "MOOV",
"name": "Moov Money",
"countryCode": "BF",
"countryName": "Burkina Faso",
"flagUrl": "<https://flagcdn.com/w40/bf.png>",
"flow": "TWO_STEP",
"amount": 200,
"fees": 0,
"totalAmount": 200,
"minAmount": 200,
"maxAmount": 1000000
},
{
"code": "SANKM",
"name": "Sank Money",
"countryCode": "BF",
"countryName": "Burkina Faso",
"flagUrl": "<https://flagcdn.com/w40/bf.png>",
"flow": "TWO_STEP",
"amount": 200,
"fees": 0,
"totalAmount": 200,
"minAmount": 200,
"maxAmount": 1000000
},
{
"code": "CORISM",
"name": "Coris Money",
"countryCode": "BF",
"countryName": "Burkina Faso",
"flagUrl": "<https://flagcdn.com/w40/bf.png>",
"flow": "TWO_STEP",
"amount": 200,
"fees": 0,
"totalAmount": 200,
"minAmount": 200,
"maxAmount": 1000000
},
{
"code": "TELECEL",
"name": "Telecel Money",
"countryCode": "BF",
"countryName": "Burkina Faso",
"flagUrl": "<https://flagcdn.com/w40/bf.png>",
"flow": "ONE_STEP",
"amount": 200,
"fees": 0,
"totalAmount": 200,
"minAmount": 200,
"maxAmount": 1000000
}
]
}
URL : [<https://api.yengapay.com/api/v1/groups/{organization_id}/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)projects/{project_id}/direct-payment/send-otp
METHODE: POST
PAYLOAD : {
"paymentIntentId": "cmig46tu300013tfbj64ls2ky", // La valeur de "paymentIntentId" obtenue dans l'étape précédente
"operatorCode":"MOOV", //CORIS, MOOV, SANK
"countryCode": "BF", // identifiant pays (BF)
"customerMSISDN":"22670707700" // Numéro de téléphone pour le paiement
}
HEADERS: {
"x-api-key" : {api_key}
}
CURL
curl -X POST <https://api.yengapay.com/api/v1/groups/{organization_id}/projects/{project_id}/direct-payment/send-otp>
-H "Content-Type: application/json"
-H "x-api-key: {api_key}"
-d '{
"paymentIntentId": "cmig46tu300013tfbj64ls2ky",
"operatorCode": "MOOV",
"countryCode": "BF",
"customerMSISDN": "22670707700" // Numéro de téléphone pour le paiement
}'
{
"status": "OTP_SENT",
"message": "Moov Money vous a envoyé un code OTP par SMS"
}
URL: <https://api.yengapay.com/api/v1/groups/{organization_id}/projects/{project_id}/direct-payment/pay>
METHODE: POST
PAYLOAD : {
"customerMSISDN": "22670707700", // Numéro de téléphone pour le paiement
"countryCode": "BF",
"operatorCode": "ORANGE", // Operateur de paiement
"paymentIntentId": "cmig46tu300013tfbj64ls2ky", // La valeur de "paymentIntentId" obtenue dans l'étape précédente
"operatorCode":"MOOV", // ORANGE, MOOV, TELECEL, CORISM, SANKM
"otp": "656494"
}
HEADERS :
{
"Content-Type": "application/json",
"x-api-key": {api_key}
}
CURL
curl -X POST <https://api.yengapay.com/api/v1/groups/{organization_id}/projects/{project_id}/direct-payment/pay>
-H 'Content-Type: application/json'
-H 'x-api-key: pn7PnmrghXArBHcMWG3ozStzG7XQzQ1s'
-d '{"customerMSISDN":"22665656565","countryCode":"BF", "operatorCode":"ORANGE","paymentIntentId":"cmig46tu300013tfbj64ls2ky","otp":"65649494"}'
{
"status": "DONE",
"transactionId": "YP20260210.1512.91155279",
"paymentIntentId": "cmlgqokbh000ls601xszwptsn",
"amount": 200,
"fees": 5,
"totalAmount": 205
}
Code USSD pour la génération de code OTP
ORANGE : “14446{montant}#” TELECEL : “80844{montant}#”
URL : [<https://api.yengapay.com/api/v1/groups/{organization_id}/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)projects/{project_id}/direct-payment/init-and-pay
METHODE: POST
PAYLOAD : {
"amount": 500, // Montant net réçu par le destinataire
"articles":[
{
"title":"Ticket d'entrée",
"description":"Ticket d'entrée a l'événement",
"price":500
}
],
"reference": "6646846426259895", // Votre identifiant pour ce paiement
"operatorCode":"ORANGE", // "ORANGE", "MOOV", "SANKM", "CORISM", "TELECEL", "MTN"
"countryCode":"BF", // "BF", "CI"
"customerMSISDN":"22665000000", // Numéro de payeur
"otp":"123456" // Code OTP généré par le client (Requis pour ORANGE,TELECEL)
"customerEmailToNotify":"[email protected]" // Adresse a notifier après le paiement
}
HEADERS: {
"x-api-key" : {api_key}
}
{
"status": "DONE",
"transactionId": "YP2026035.852.96420861",
"paymentIntentId": "cmmd89dm7000fs6019tazrroz",
"amount": 475,
"fees": 25,
"totalAmount": 500,
"operator": {
"code": "ORANGE",
"name": "Orange Money",
"countryCode": "BF"
},
"customerMSISDN": "22665000000",
"flow": "ONE_STEP"
}
{
"status": "OTP_SENT",
"message": "Moov Money vous a envoyé un code OTP par SMS",
"flow": "TWO_STEP",
"paymentIntentId": "cmmd8bpm0000rs60187p2x2k0",
"operator": {
"code": "MOOV",
"name": "Moov Money",
"countryCode": "BF"
},
"nextStep": {
"endpoint": "POST /direct-payment/pay",
"description": "Appelez cet endpoint avec le paymentIntentId et le code OTP reçu par SMS",
"requiredFields": {
"paymentIntentId": "cmmd8bpm0000rs60187p2x2k0",
"operatorCode": "MOOV",
"countryCode": "BF",
"customerMSISDN": "22660000000",
"otp": "<code OTP reçu par SMS>"
}
}
}
URL : [<https://api.yengapay.com/api/v1/groups/{organization_id}/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)projects/{project_id}/direct-payment/pay
METHODE: POST
PAYLOAD : {
"paymentIntentId": "cmmd8bpm0000rs60187p2x2k0", // Le paymentIntent obtenu lors de l'étape précédente
"operatorCode":"MOOV", // "MOOV", "SANKM", "CORISM"
"countryCode":"BF", // "BF", "CI"
"customerMSISDN":"22660000000", // Numéro de payeur
"otp":"123456" // Code OTP recu par le client
}
HEADERS: {
"x-api-key" : {api_key}
}
{
"status": "DONE",
"transactionId": "YP2026035.856.68546302",
"paymentIntentId": "cmmd8bpm0000rs60187p2x2k0",
"amount": 487,
"fees": 13,
"totalAmount": 500
}
URL : [<https://api.yengapay.com/api/v1/groups/{organization_id}/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)project/{project_id}/payout
METHODE: POST
PAYLOAD : {
"paymentMethod": "ORANGE_MONEY", // "ORANGE_MONEY" | "MOOV_MONEY" | "SANK_MONEY" | "TELECEL_MONEY"
"description": "Description du paiement sortant", // optionnel
"amount": 200, // Montant net réçu par le destinataire
"destNumber": "+22670123456", // numéro de téléphone valide du destinataire
"destName": "Jean KABORE", // optionnel
"destEmail": "[email protected]", // optionnel
}
HEADERS: {
"x-api-key" : {api_key}
}
CURL
curl -X POST [<https://api.yengapay.com/api/v1/groups/{organization_id}/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)project/{project_id}/payout \\
-H "Content-Type: application/json" \\
-H 'x-api-key: LSzaUTjm3O8vNAlkEkhUP0M5SiBlOu8e'
-d '{
"amount": 5000,
"paymentMethod": "ORANGE_MONEY",
"destNumber": "+22674123456",
"destName": "Jean KABORE",
"destEmail": "[email protected]",
"description": "Paiement salaire novembre 2024"
}'
{
"id": "YPPO20250113.1538.38055.7265",
"amount": 5000,
"fees": 75,
"totalDebited": 5075,
"status": "PENDING",
"createdAt": "2024-01-15T10:30:00Z",
"destNumber": "+22670123456",
"paymentMethod": "ORANGE_MONEY"
}
URL : <https://api.yengapay.com/api/v1/groups/{organization_id}/cash-out>
METHODE: POST
PAYLOAD : {
"cashoutMethod": "ORANGE_MONEY",
"description": "Description du paiement sortant",
"amount": 200,
"destNumber": "+226xxxxxxxx",
"groupId": [YENGAPAY_ORGANISATION_IDI,
"projectId" : [YENGAPAY_PROJECT_ID]
}
HEADERS:{
"x-api-key" : {api_key}
}
CURL
curl -X POST -H 'x-api-key: 8SlmrY5Wwuy5IgEVR0ubAuUMhEygzd0PDJ' -H 'Content-Type: application/json' -d '{"cashoutMethod":"ORANGE_MONEY","description":"Description du paiement sortant","amount":200,"destNumber":"+22606633031","groupId":"10268498","projectId":"40407"}' [<https://api.yengapay.com/api/v1/groups/10268498/cash-out>](<https://api.yengapay.com/api/v1/groups/10268496/cash-out>)
{
"id": "YPCO20250924.1546.40403.2921",
"projectId": "40407",
"groupId": "10268498",
"amount": 200,
"fees": 5,
"destNumber": "+22606633031",
"cashoutMethod": "ORANGE_MONEY",
"apiEnv": "test",
"currency": "XOF",
"status": "PENDING",
"description": "Description du paiement sortant",
"errorMessage": null,
"technicalError": null,
"operatorTransId": null,
"processedAt": null,
"createdAt": "2025-09-24T15:46:34.502Z",
"updatedAt": "2025-09-24T15:46:34.502Z"
}
TEST
NOTIFICATION WEBHOOK
VERIFICATION DU STATUT DE PAIEMENT
ECHEC
403 : Pas d’autorisation
401 : Non Authentifié
400 : Mauvaise requête
SUCCES
200, 201 : Succès