Fonctionnement
Lorsque vous initiez une transaction (collect ou deposit), vous fournissez une webhookUrl. Dès que la transaction atteint un état final (SUCCESS ou FAILED), Remita envoie une requête HTTP POST vers votre URL.
[Remita] ──POST──▶ [Votre serveur] ──▶ Traitement du résultat
Configuration
Fournissez le champ webhookUrl dans le corps de votre requête de transaction :
{
"transferMethod" : "OMCM" ,
"customerName" : "Jean Dupont" ,
"externalId" : "550e8400-e29b-41d4-a716-446655440000" ,
"phoneNumber" : "237690000000" ,
"amount" : 5000 ,
"webhookUrl" : "https://votre-serveur.com/remita/callback"
}
Remita envoie un POST avec Content-Type: application/json :
{
"externalId" : "550e8400-e29b-41d4-a716-446655440000" ,
"transactionId" : "3fa85f64-5717-4562-b3fc-2c963f66afa6" ,
"status" : "SUCCESS" ,
"amount" : 5000 ,
"phoneNumber" : "237690000000" ,
"transferMethod" : "OMCM" ,
"message" : "Transaction réussie" ,
"timestamp" : "2026-03-19T10:02:30Z"
}
Champ Type Description externalIdUUID Votre identifiant externe transactionIdString Identifiant interne Remita statusString SUCCESS ou FAILEDamountNumber Montant de la transaction phoneNumberString Numéro de téléphone concerné transferMethodString Code opérateur (ex : OMCM, MOMOCM) messageString Message descriptif timestampString Horodatage ISO 8601
Réponse attendue
Votre endpoint doit répondre avec un code HTTP 200 dans un délai de 5 secondes . Toute autre réponse ou timeout entraîne une nouvelle tentative. Déléguez tout traitement lourd à une file de tâches et répondez immédiatement.
Politique de retry
Tentative Délai 1ère Immédiate 2ème Après 30 s 3ème Après 2 min 4ème Après 10 min
Après 4 tentatives sans succès, utilisez POST /api/v1/transaction/chekTransactionStatus?transactionId=<id> pour forcer la synchronisation avec l’opérateur.
Implémentation de l’endpoint
Java (Spring Boot)
Python (FastAPI)
Python (Flask)
PHP
Node.js (Express)
import org.springframework.web.bind.annotation. * ;
import java.util.Map;
@ RestController
@ RequestMapping ( "/remita" )
public class RemitaWebhookController {
@ PostMapping ( "/callback" )
public ResponseEntity < String > handleCallback (@ RequestBody Map < String , Object > payload ) {
String externalId = (String) payload . get ( "externalId" );
String status = (String) payload . get ( "status" );
Number amount = (Number) payload . get ( "amount" );
if ( "SUCCESS" . equals (status)) {
// Créditer le compte client, envoyer une notification...
System . out . println ( "Transaction " + externalId + " réussie : " + amount + " XAF" );
} else {
// Logger l'erreur, notifier l'équipe...
System . err . println ( "Transaction " + externalId + " échouée" );
}
// Toujours répondre 200 rapidement
return ResponseEntity . ok ( "OK" );
}
}
Sécurité — Vérifier avant de traiter
Vérifiez toujours le statut réel via l’API avant d’agir sur un webhook, pour éviter les faux callbacks.
curl -X POST "https://api.remita.cm/api/v1/transaction/transaction-status?id=3fa85f64-5717-4562-b3fc-2c963f66afa6" \
-H "apiKey: YOUR_API_KEY" \
-H "apiId: YOUR_API_ID" \
-H "Authorization: Bearer YOUR_TOKEN"