Référence API
L'API DarePay est organisée autour de routes REST simples. Elle accepte des corps JSON, renvoie des réponses JSON et utilise les codes HTTP standards.
https://darepay.devetu.org/apiLes routes protégées exigent l'en-tête X-API-Key. Chaque paiement est identifié par
votre référence métier : elle sert à l'initier, à consulter son statut et à le
rapprocher du callback.
Simulateur intégréModifiez les paramètres des routes ci-dessous : la requête se met à jour en direct et le bouton Envoyer affiche la réponse correspondante. Tout est simulé dans votre navigateur, aucune requête n'est envoyée à DarePay.
X-API-Key: VOTRE_CLE_API Content-Type: application/json Accept: application/json
Erreurs
DarePay utilise les codes de réponse HTTP pour indiquer le résultat d'une requête. Les codes
2xx signalent un succès, les 4xx une erreur liée aux données envoyées,
et 500 une erreur interne.
| HTTP | Signification | Action recommandée |
|---|---|---|
| 200 | Requête traitée avec succès | Lire la réponse retournée par DarePay. |
| 400 | Requête invalide | Vérifier les données envoyées. |
| 401 | Clé API absente ou invalide | Vérifier l'en-tête X-API-Key. |
| 404 | Paiement introuvable | Vérifier la référence utilisée. |
| 409 | Un paiement existe déjà avec cette référence | Ne pas initier un nouveau paiement avec la même référence. |
| 422 | Erreur de validation métier | Corriger les données ou vérifier l'état de la transaction. |
| 500 | Erreur interne | Ne pas conclure automatiquement à un échec ; vérifier le statut avant de retenter. |
Routes d'envoi d'argent (e-commerce)Leurs réponses
d'erreur contiennent en plus un champ code (par exemple
INSUFFICIENT_BALANCE) que votre application peut tester. Voir la liste des codes.
Erreur 500 ou coupure réseau ?Le paiement a peut-être été créé. Consultez son statut avec la même référence avant toute nouvelle tentative. Procédure de reprise
Initialiser un paiement
/api/payments
Cette route permet à votre application d'initier une nouvelle transaction de paiement. DarePay valide la requête, initialise la transaction et renvoie son statut initial.
-
X-API-KeystringObligatoireClé d'authentification attribuée à votre application. Renseignez-la dans le panneau de requête.
-
Content-TypestringObligatoireUtiliser
application/json. -
AcceptstringRecommandéUtiliser
application/json.
-
successbooleanIndique que la requête a été traitée.
-
messagestringMessage lisible, par exemple « Paiement initié avec succès. »
-
paymentobjectLe paiement créé.
-
idintegerIdentifiant interne du paiement dans DarePay.
-
referencestringRéférence métier fournie par votre application.
-
transaction_idstringIdentifiant unique de la transaction. À conserver.
-
statusenumStatut initial, souvent
PENDING. -
amountstringMontant du paiement, au format décimal (
"10000.00"). -
currencystringDevise du paiement.
-
PENDING signifie que la demande est en cours de traitement. Votre application ne
doit pas considérer ce statut comme un paiement réussi.
Consulter le statut d'un paiement
/api/payments/{reference}/status
Cette route récupère le statut actuel d'un paiement à partir de la référence métier utilisée lors de l'initiation. Utilisez-la en cas de doute : après une erreur réseau, une erreur 500 ou un callback attendu qui tarde.
-
referencestringObligatoireLa référence métier transmise dans
POST /api/payments.Référence du paiement
-
successbooleanIndique que la requête a été traitée.
-
paymentobjectLe paiement, avec les mêmes champs que la réponse d'initiation :
id,reference,transaction_id,status,amount,currency.
| Statut | Signification |
|---|---|
| PENDING | Le paiement est encore en cours de traitement. |
| SUCCESS | Le paiement a été effectué avec succès. |
| FAILED | Le paiement a échoué. |
Callback de résultat
POST
https://votre-application.example.com/api/darepay/callbackVotre application fournit une URL de callback accessible en HTTPS. DarePay appelle cette URL lorsqu'un paiement atteint un état final. C'est la notification principale du résultat.
-
payment_idintegerIdentifiant interne du paiement dans DarePay.
-
referencestringRéférence métier fournie par votre application.
-
transaction_idstringIdentifiant unique de la transaction.
-
statusenumRésultat final :
SUCCESSouFAILED. -
amountstringMontant du paiement.
-
currencystringDevise du paiement.
-
failure_reasonstring | nullMotif de l'échec lorsqu'il est disponible.
nullen cas de succès.
-
HTTP200 OKRépondez rapidement après réception et traitement de la notification.
-
receivedbooleanDoit valoir
true. -
referencestringLa même référence métier que celle reçue dans le callback, à l'identique.
-
transaction_idstringLe même identifiant de transaction que celui reçu dans le callback.
Sans confirmation valide, DarePay renvoie le callback, jusqu'à trois envois au total. Règles de confirmation · Tester votre réponse
{
"payment_id": 15,
"reference": "CMD2026001",
"transaction_id": "PAY1009261274771",
"status": "SUCCESS",
"amount": "10000.00",
"currency": "XAF",
"failure_reason": null
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"received": true,
"reference": "CMD2026001",
"transaction_id": "PAY1009261274771"
}
Envoyer de l'argent e-commerce
/api/payments/{reference}/releases
Réservée aux applications en mode e-commerce. L'argent d'un paiement réussi est conservé sur le compte DarePay : cette route l'envoie, en une seule requête, sur le mobile money d'un ou plusieurs destinataires (vendeur, livreur, client…). Comprendre le principe et activer le mode
Le paiement doit être SUCCESS, les destinataires doivent avoir le même opérateur
que le paiement, et le total ne doit pas dépasser le montant disponible (montant payé moins
les frais de service DarePay). Toutes les conditions
-
referencestringObligatoireLa référence du paiement d'où vient l'argent, celle utilisée dans
POST /api/payments.
-
reference_lotstringObligatoireVotre référence unique pour cette demande. Lettres, chiffres,
-et_, 100 caractères maximum. Renvoyer la même requête avec la même référence ne renvoie jamais l'argent une deuxième fois. -
destinatairesarrayObligatoireDe 1 à 20 destinataires, chacun avec un numéro différent.
-
numerostringObligatoireNuméro mobile money, par exemple
074123456. Airtel Money en07…, Moov Money en06…. -
operateurenumObligatoireAIRTEL_MONEYouMOOV_MONEY, le même que celui du paiement. -
montantnumberObligatoireMontant en XAF entiers, ou un pourcentage du montant payé si
type_montantvautPOURCENTAGE. -
type_montantenumFacultatifMONTANT(par défaut) ouPOURCENTAGE. -
type_destinataireenumFacultatifVENDEUR,ACHETEURouAUTRE, pour votre suivi.
-
-
HTTP201Demande prise en charge. Le résultat est dans
data.statut. -
HTTP200Cette
reference_lota déjà été traitée : le résultat existant est renvoyé (deja_traite: true). -
dataobjectLe résultat de la demande.
-
statutenumSUCCESS(tout est envoyé),PARTIEL,FAILED(rien n'est envoyé) ouPROCESSING(en vérification, ne pas renvoyer). -
montant_totalintegerTotal demandé, en XAF.
-
montant_restantintegerMontant encore disponible sur ce paiement.
-
destinatairesarrayPour chacun :
reference_sortie,numero,montant,statut,code_erreuretmessage.
-
Pas de callback pour les envois : le résultat arrive directement dans la réponse. Statuts · Erreurs · Que faire en cas de doute
{
"success": true,
"message": "Toutes les sorties ont été effectuées.",
"data": {
"reference_paiement": "CMD2026001",
"reference_lot": "LIV-CMD2026001",
"statut": "SUCCESS",
"deja_traite": false,
"montant_total": 9000,
"montant_restant": 500,
"devise": "XAF",
"date_demande": "2026-10-02T10:15:04+01:00",
"date_traitement": "2026-10-02T10:15:07+01:00",
"destinataires": [
{
"position": 1,
"reference_sortie": "S7KQ2M9XA",
"numero": "074123456",
"operateur": "AIRTEL_MONEY",
"type_destinataire": "VENDEUR",
"montant": 8000,
"statut": "SUCCESS",
"code_erreur": null,
"message": "Sortie effectuée."
},
{
"position": 2,
"reference_sortie": "SP3TZ81BD",
"numero": "077987654",
"operateur": "AIRTEL_MONEY",
"type_destinataire": "AUTRE",
"montant": 1000,
"statut": "SUCCESS",
"code_erreur": null,
"message": "Sortie effectuée."
}
]
}
}
Consulter un envoi e-commerce
/api/payments/{reference}/releases/{reference_lot}
Renvoie l'état actuel d'une demande d'envoi, au même format que la réponse de POST
…/releases. Cette route n'envoie rien : utilisez-la pour suivre une demande
PROCESSING ou pour vérifier après une coupure réseau.
-
referencestringObligatoireLa référence du paiement.
-
reference_lotstringObligatoireLa référence de la demande d'envoi.
| HTTP | Signification |
|---|---|
| 200 | Demande trouvée : lire data.statut. |
| 404 | BATCH_NOT_FOUND : aucune demande avec cette référence. Rien n'a été
envoyé. |
{
"success": false,
"code": "INSUFFICIENT_BALANCE",
"message": "Le total demandé (12000 XAF) dépasse le montant disponible (9500 XAF).",
"details": {
"montant_demande": 12000,
"montant_disponible": 9500
}
}
Résumé des interfaces
| Interface | Méthode | Utilité | Authentification |
|---|---|---|---|
/api/payments |
POST | Initialiser un paiement | X-API-Key |
/api/payments/{reference}/status |
GET | Consulter le statut d'un paiement | X-API-Key |
| URL callback de votre application | POST | Recevoir le résultat final | Endpoint exposé par votre application |
/api/payments/{reference}/releases |
POST | Envoyer de l'argent (e-commerce) | X-API-Key |
/api/payments/{reference}/releases/{reference_lot} |
GET | Consulter un envoi (e-commerce) | X-API-Key |