Endpoint
POST https://pay.sandbox.yabetoopay.com/v1/payment-intents/:id/confirm # Sandbox
POST https://pay.api.yabetoopay.com/v1/payment-intents/:id/confirm # Production
:id correspond à l’identifiant de l’intention de paiement.
Authentification
Utilisez votre clé secrète dans l’en-têteAuthorization :
Authorization: Bearer YOUR_SECRET_KEY
Corps de la requête
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
client_secret | string | Oui | Le secret client de l’intention de paiement |
first_name | string | Non | Prénom du client |
last_name | string | Non | Nom du client |
receipt_email | string | Non | Adresse email du client |
payment_method_data | object | Oui | Détails de la méthode de paiement |
Structure payment_method_data
{
"type": "momo",
"momo": {
"country": "cg",
"msisdn": "+242123456789",
"operator_name": "mtn"
}
}
| Champ | Description |
|---|---|
type | Type de méthode de paiement (momo pour Mobile Money) |
momo.country | Code pays (ex: cg, cm) |
momo.msisdn | Numéro de téléphone au format international |
momo.operator_name | Nom de l’opérateur (mtn, airtel) |
Exemple de requête
curl -X POST https://pay.sandbox.yabetoopay.com/v1/payment-intents/PAYMENT_INTENT_ID/confirm \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_SECRET_KEY" \
-d '{
"client_secret": "YOUR_CLIENT_SECRET",
"first_name": "Jean",
"last_name": "Dupont",
"receipt_email": "jean.dupont@example.com",
"payment_method_data": {
"type": "momo",
"momo": {
"country": "cg",
"msisdn": "+242123456789",
"operator_name": "mtn"
}
}
}'
import Yabetoo from "@yabetoo/sdk-js";
const yabetoo = new Yabetoo("YOUR_SECRET_KEY");
const confirmation = await yabetoo.payments.confirm("PAYMENT_INTENT_ID", {
clientSecret: "YOUR_CLIENT_SECRET",
firstName: "Jean",
lastName: "Dupont",
receiptEmail: "jean.dupont@example.com",
paymentMethodData: {
type: "momo",
momo: {
country: "cg",
msisdn: "+242123456789",
operatorName: "mtn",
},
},
});
from yabetoo import Yabetoo
from yabetoo.models.payment import ConfirmIntentRequest, PaymentMethodData, MomoData
yabetoo = Yabetoo("YOUR_SECRET_KEY")
confirmation = yabetoo.payments.confirm(
payment_id="PAYMENT_INTENT_ID",
data=ConfirmIntentRequest(
client_secret="YOUR_CLIENT_SECRET",
first_name="Jean",
last_name="Dupont",
receipt_email="jean.dupont@example.com",
payment_method_data=PaymentMethodData(
type="momo",
momo=MomoData(
country="cg",
msisdn="+242123456789",
operator_name="mtn"
)
)
)
)
<?php
require 'vendor/autoload.php';
use Yabetoo\Yabetoo;
$yabetoo = new Yabetoo("YOUR_SECRET_KEY");
$confirmation = $yabetoo->payments->confirm("PAYMENT_INTENT_ID", [
"client_secret" => "YOUR_CLIENT_SECRET",
"first_name" => "Jean",
"last_name" => "Dupont",
"receipt_email" => "jean.dupont@example.com",
"payment_method_data" => [
"type" => "momo",
"momo" => [
"country" => "cg",
"msisdn" => "+242123456789",
"operator_name" => "mtn",
],
],
]);
import com.yabetoo.Yabetoo;
import com.yabetoo.YabetooConfig;
import com.yabetoo.model.PaymentIntent;
import com.yabetoo.model.PaymentMethod;
import com.yabetoo.request.PaymentIntentConfirmRequest;
YabetooConfig config = new YabetooConfig()
.setApiKey("YOUR_SECRET_KEY");
Yabetoo yabetoo = new Yabetoo(config);
PaymentMethod.MomoDetails momoDetails = PaymentMethod.MomoDetails.builder()
.msisdn("+242123456789")
.country("cg")
.operatorName("mtn")
.build();
PaymentMethod paymentMethod = PaymentMethod.builder()
.type("momo")
.momoDetails(momoDetails)
.build();
PaymentIntent confirmation = yabetoo.paymentIntents().confirm(
"PAYMENT_INTENT_ID",
PaymentIntentConfirmRequest.builder()
.clientSecret("YOUR_CLIENT_SECRET")
.firstName("Jean")
.lastName("Dupont")
.email("jean.dupont@example.com")
.paymentMethod(paymentMethod)
.build()
);
Réponse
200 OK - Paiement réussi
{
"intentId": "pi_3r8utQTUlCY5hjV2pMtjtaNYsZ30FylO3PZk",
"financialTransactionId": "7331529368",
"transactionId": "pi_3r8utQTUlCY5hjV2pMtjtaNYsZ30FylO3PZk",
"amount": 2228,
"currency": "xaf",
"status": "succeeded",
"captured": true,
"externalId": "ext_7hp8lsjCFwTemoeL",
"id": "ch_ADdQhObdEDlz4L0kl7qNRniFjruNcrcY85xq",
"createdAt": "2026-02-16T06:51:43.103+00:00",
"updatedAt": "2026-02-16T06:51:43.177+00:00",
"paymentMethodId": "pm_evILNJIgAyJs7S4KYmy5n5Ect8itay2GeycL"
}
200 OK - Paiement échoué
Lorsque le paiement échoue (ex : délai dépassé, solde insuffisant), la réponse retourne toujours un code 200 mais avec un statut d’échec :{
"intentId": "pi_HUHh0kAg9H8QZvHtFf0taIspdWlUVftSOLhB",
"transactionId": "pi_HUHh0kAg9H8QZvHtFf0taIspdWlUVftSOLhB",
"amount": 10363,
"currency": "xaf",
"status": "expired",
"captured": false,
"externalId": "ext_mQliBh5ZbdQ9w15S",
"failureMessage": "Transaction timed out",
"failureCode": "Transaction timed out",
"id": "ch_nZBtA8euTJFnpFMTSO402WJOP1g2WwWSGiC7",
"createdAt": "2026-02-16T14:07:02.061+00:00",
"updatedAt": "2026-02-16T14:07:02.190+00:00",
"paymentMethodId": "pm_tU0HivHLBjozujmhwbVk3LO0B2ttcd0Rk1j3"
}
422 Mauvaise requête
{
"status": 422,
"path": "/v1/payment-intents/pi_2GlfKbBC6IMYBPDhOaFIRdn0nrXDDEAjBxyW/confirm",
"timestamp": "2026-02-16T15:54:49.730+00:00",
"code": "E_OPERATION_NOT_PERMITTED",
"message": "Operation not permitted",
"detail": "You are not permitted to perform this operation."
}
404 Non trouvé
{
"message": "Row not found"
}
401 Non autorisé
{
"error": {
"message": "Unauthorized",
"code": "Unauthorized"
}
}
La gestion des erreurs est importante, car la confirmation peut échouer pour diverses raisons
(fonds insuffisants, informations de paiement incorrectes, etc.).