Skip to main content
Authentification requise : tous ces endpoints nécessitent les headers apiKey, apiId et Authorization: Bearer <token>.

Opérateurs disponibles

CodeOpérateurPaysIndicatif
OMCMOrange MoneyCameroun+237
MOMOCMMTN Mobile MoneyCameroun+237
CIWAVEWaveCôte d’Ivoire+225
CIOMOrange MoneyCôte d’Ivoire+225
SNWAVEWaveSénégal+221
SNOMOrange MoneySénégal+221
SNFREEFreeSénégal+221
BFOMOrange MoneyBurkina Faso+226
MLMOOVMoovMali+223
BJMTNMTNBénin+229
BJMOOVMoovBénin+229
UGMTNMTNOuganda+256
UGAIRTELAirtelOuganda+256

Corps de requête commun

Les endpoints collect et deposit utilisent le même corps :
{
  "transferMethod": "OMCM",
  "customerName": "Jean Dupont",
  "externalId": "550e8400-e29b-41d4-a716-446655440000",
  "phoneNumber": "237690000000",
  "amount": 5000,
  "webhookUrl": "https://votre-serveur.com/callback",
  "countryName": "CAMEROON"
}
ChampTypeObligatoireDescription
transferMethodStringOuiCode opérateur (ex : OMCM, MOMOCM)
customerNameStringOuiNom complet du client
externalIdUUIDOuiIdentifiant unique côté votre système (UUID v4)
phoneNumberStringOuiNuméro en format international sans + (ex : 237690000000)
amountBigDecimalOuiMontant dans la devise locale (XAF, XOF, UGX…)
webhookUrlStringOuiURL de callback pour recevoir le résultat asynchrone
countryNameStringOuiCAMEROON, IVORY_COAST, SENEGAL, BURKINA_FASO, MALI, BENIN, UGANDA
transferMethod et countryName doivent être cohérents. Ex : OMCM + CAMEROON. Toute combinaison invalide retourne 400 Bad Request.

POST /api/v1/transaction/collect

Initie une collecte — débite le compte mobile money du client vers votre compte.
curl -X POST https://api.remita.cm/api/v1/transaction/collect \
  -H "Content-Type: application/json" \
  -H "apiKey: YOUR_API_KEY" \
  -H "apiId: YOUR_API_ID" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -d '{
    "transferMethod": "OMCM",
    "customerName": "Jean Dupont",
    "externalId": "550e8400-e29b-41d4-a716-446655440000",
    "phoneNumber": "237690000000",
    "amount": 5000,
    "webhookUrl": "https://votre-serveur.com/callback",
    "countryName": "CAMEROON"
  }'

Réponse (200)

{
  "transactionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "externalId": "550e8400-e29b-41d4-a716-446655440000",
  "transferMethod": "OMCM",
  "customerName": "Jean Dupont",
  "customerPhone": "237690000000",
  "payToken": "abc123xyz",
  "amount": 5000,
  "feesSystem": 50,
  "feesApp": 25,
  "transactionStatus": "PENDING"
}

POST /api/v1/transaction/deposit

Initie un dépôt — envoie de l’argent depuis votre compte vers le mobile money d’un bénéficiaire. Même corps de requête que /collect. Seul le sens du transfert change.
curl -X POST https://api.remita.cm/api/v1/transaction/deposit \
  -H "Content-Type: application/json" \
  -H "apiKey: YOUR_API_KEY" \
  -H "apiId: YOUR_API_ID" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -d '{
    "transferMethod": "MOMOCM",
    "customerName": "Marie Martin",
    "externalId": "660e9500-f30c-52e5-b827-557766551111",
    "phoneNumber": "237670000000",
    "amount": 10000,
    "webhookUrl": "https://votre-serveur.com/callback",
    "countryName": "CAMEROON"
  }'
Réponse identique à /collect avec transactionStatus: "PENDING".

POST /api/v1/transaction/depositMultiple

Initie plusieurs dépôts en une seule requête (batch).

Corps de la requête

[
  {
    "transferMethod": "MOMOCM",
    "customerName": "Alice",
    "externalId": "uuid-1",
    "phoneNumber": "237670000001",
    "amount": 5000,
    "webhookUrl": "https://votre-serveur.com/callback",
    "countryName": "CAMEROON"
  },
  {
    "transferMethod": "OMCM",
    "customerName": "Bob",
    "externalId": "uuid-2",
    "phoneNumber": "237690000002",
    "amount": 3000,
    "webhookUrl": "https://votre-serveur.com/callback",
    "countryName": "CAMEROON"
  }
]
curl -X POST https://api.remita.cm/api/v1/transaction/depositMultiple \
  -H "Content-Type: application/json" \
  -H "apiKey: YOUR_API_KEY" \
  -H "apiId: YOUR_API_ID" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -d '[{...}, {...}]'

POST /api/v1/transaction/transaction-status

Vérifie le statut d’une transaction par son transactionId.

Paramètres query

ParamètreTypeObligatoireDescription
idUUIDOuitransactionId retourné par collect / deposit
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_JWT_TOKEN"

Réponse (200)

{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "externalId": "550e8400-e29b-41d4-a716-446655440000",
  "amount": 5000,
  "feesSystem": 50,
  "feesApp": 25,
  "phoneReceiver": "237690000000",
  "receiverName": "Jean Dupont",
  "status": "SUCCESS",
  "transferMethod": "OMCM",
  "transactionType": "COLLECT",
  "countryName": "CAMEROON",
  "payToken": "abc123xyz"
}

Statuts possibles

StatutDescription
PENDINGTransaction initiée, en attente opérateur
PENDING_APPROVALEn attente d’approbation interne
SUCCESSTransaction réussie
FAILEDTransaction échouée

POST /api/v1/transaction/chekTransactionStatus

Vérifie et synchronise le statut d’une transaction en interrogeant directement l’opérateur. Utile si le webhook n’a pas été reçu et que transaction-status retourne encore PENDING.

Paramètres query

ParamètreTypeObligatoireDescription
transactionIdUUIDOuiIdentifiant de la transaction
curl -X POST "https://api.remita.cm/api/v1/transaction/chekTransactionStatus?transactionId=3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "apiKey: YOUR_API_KEY" \
  -H "apiId: YOUR_API_ID" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

POST /api/v1/transaction/validateTransaction

Valide et approuve une transaction en attente (PENDING_APPROVAL).

Paramètres query

ParamètreTypeObligatoireDescription
checkerIdUUIDOuiIdentifiant du validateur
transactionIdUUIDOuiIdentifiant de la transaction
payeeNoteStringOuiNote de validation
curl -X POST "https://api.remita.cm/api/v1/transaction/validateTransaction?checkerId=<uuid>&transactionId=<uuid>&payeeNote=Approuv%C3%A9" \
  -H "apiKey: YOUR_API_KEY" \
  -H "apiId: YOUR_API_ID" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

POST /api/v1/transaction/rejectTransaction

Rejette une transaction en attente.

Paramètres query

ParamètreTypeObligatoireDescription
checkerIdUUIDOuiIdentifiant du validateur
transactionIdUUIDOuiIdentifiant de la transaction
reasonStringOuiMotif du rejet
curl -X POST "https://api.remita.cm/api/v1/transaction/rejectTransaction?checkerId=<uuid>&transactionId=<uuid>&reason=Fraude+suspect%C3%A9e" \
  -H "apiKey: YOUR_API_KEY" \
  -H "apiId: YOUR_API_ID" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

GET /api/v1/transaction/getByApplicationProduct

Liste toutes les transactions de votre application avec pagination.

Paramètres query

ParamètreTypeObligatoireDescription
pageIntegerOuiNuméro de page (0-indexé)
sizeIntegerOuiNombre d’éléments par page
curl -X GET "https://api.remita.cm/api/v1/transaction/getByApplicationProduct?page=0&size=20" \
  -H "apiKey: YOUR_API_KEY" \
  -H "apiId: YOUR_API_ID" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

Réponse (200)

{
  "content": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "externalId": "550e8400-e29b-41d4-a716-446655440000",
      "amount": 5000,
      "feesSystem": 50,
      "feesApp": 25,
      "phoneReceiver": "237690000000",
      "receiverName": "Jean Dupont",
      "status": "SUCCESS",
      "transferMethod": "OMCM",
      "transactionType": "COLLECT",
      "countryName": "CAMEROON"
    }
  ],
  "totalElements": 150,
  "totalPages": 8,
  "size": 20,
  "number": 0
}

GET /api/v1/transaction/getByApplicationProductAndPhoneReceiver

Filtre les transactions par numéro de téléphone du bénéficiaire.
ParamètreTypeObligatoireDescription
phoneNumberStringOuiNuméro en format international
pageIntegerOuiNuméro de page (0-indexé)
sizeIntegerOuiNombre d’éléments par page

GET /api/v1/transaction/getByApplicationProductAndStatus

Filtre les transactions par statut.
ParamètreTypeObligatoireDescription
transactionStatusStringOuiPENDING, PENDING_APPROVAL, SUCCESS, FAILED
pageIntegerOuiNuméro de page
sizeIntegerOuiTaille de la page

GET /api/v1/transaction/getTotalAmountByApplicationProductAndDateRange

Calcule le montant total des transactions sur une plage de dates.
ParamètreTypeObligatoireDescription
startDateStringOuiDate début ISO 8601 (ex : 2026-01-01)
endDateStringOuiDate fin ISO 8601 (ex : 2026-03-31)
statusStringOuiStatut à filtrer

Réponse

75000.00

GET /api/v1/transaction/getTotalAmountByApplicationProduct

Retourne le montant total de toutes les transactions de votre application.
curl -X GET "https://api.remita.cm/api/v1/transaction/getTotalAmountByApplicationProduct" \
  -H "apiKey: YOUR_API_KEY" \
  -H "apiId: YOUR_API_ID" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

GET /api/v1/transaction/getByApplicationProductBalances

Retourne les soldes disponibles de votre application par opérateur et type (collect / deposit).
curl -X GET "https://api.remita.cm/api/v1/transaction/getByApplicationProductBalances" \
  -H "apiKey: YOUR_API_KEY" \
  -H "apiId: YOUR_API_ID" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

Réponse (200)

[
  {
    "serviceType": "OMCM",
    "balanceCollect": 250000.00,
    "balanceDeposit": 120000.00
  },
  {
    "serviceType": "MOMOCM",
    "balanceCollect": 180000.00,
    "balanceDeposit": 95000.00
  }
]

Flux recommandé

1. POST /collect  ou  /deposit

2. Recevoir transactionId + statut initial (PENDING)

3. Attendre le callback webhook (asynchrone)
       OU
   POST /transaction-status  (polling)
       OU
   POST /chekTransactionStatus  (force sync opérateur)

4. Traiter le statut final (SUCCESS / FAILED)
Utilisez toujours un externalId unique (UUID v4) par transaction. En cas de retry sur timeout réseau, réutilisez le même externalId — Remita détectera le doublon et retournera la transaction existante.
import uuid

def idempotent_external_id(order_id: str) -> str:
    """UUID déterministe à partir de votre ID de commande."""
    return str(uuid.uuid5(uuid.NAMESPACE_DNS, f"order:{order_id}"))