Skip to main content

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"
}

Format du payload reçu

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"
}
ChampTypeDescription
externalIdUUIDVotre identifiant externe
transactionIdStringIdentifiant interne Remita
statusStringSUCCESS ou FAILED
amountNumberMontant de la transaction
phoneNumberStringNuméro de téléphone concerné
transferMethodStringCode opérateur (ex : OMCM, MOMOCM)
messageStringMessage descriptif
timestampStringHorodatage 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

TentativeDélai
1èreImmédiate
2èmeAprès 30 s
3èmeAprès 2 min
4èmeAprè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

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"