MTN Mobile Money (MoMo) opère dans 16 pays Africa : Ghana, Côte d'Ivoire, Cameroun, Ouganda, Rwanda, Bénin, Congo, etc. 70M+ users actifs. Pour vendre dans ces pays, MoMo est essentiel. MTN a lancé MoMo Open API 2019 pour intégration développeur. Voici guide complet 2026.
TL;DR
- MTN MoMo Open API : API publique standardisée multi-pays.
- Collection : recevoir paiements clients (équivalent C2B M-Pesa).
- Disbursement : envoyer payouts (B2C).
- Frais : 1-3 % par transaction selon pays + volume.
Couverture MTN MoMo 2026
| Pays | Users | Part de marché mobile money |
|---|---|---|
| Ghana | 25M | 90 % |
| Côte d'Ivoire | 12M | 60 % (vs Orange Money) |
| Cameroun | 8M | 75 % |
| Ouganda | 18M | 80 % |
| Rwanda | 4M | 90 % |
| Bénin | 3M | 70 % |
| Congo (RDC + Brazzaville) | 6M | 65 % |
| Zambie | 5M | 50 % |
| Nigeria (MTN MoMo PSB) | 15M | 25 % (concurrence Opay) |
Inscription MTN MoMo Developer Portal
- Aller sur momodeveloper.mtn.com
- Créer compte développeur
- Souscrire à un produit :
- Collections (recevoir paiements)
- Disbursements (payouts)
- Remittance (transferts)
- Récupérer Subscription Key
- Créer API User + API Key (programmatique)
- Sandbox d'abord, puis production après KYC
Intégration Collections (Node.js)
Étape 1 — créer API user (one-time)
`typescript
import axios from 'axios';
import { v4 as uuid } from 'uuid';
async function createApiUser() {
const referenceId = uuid();
await axios.post(
'https://sandbox.momodeveloper.mtn.com/v1_0/apiuser',
{ providerCallbackHost: 'kolonell.com' },
{
headers: {
'X-Reference-Id': referenceId,
'Ocp-Apim-Subscription-Key': process.env.MOMO_SUBSCRIPTION_KEY,
},
}
);
// Créer API Key pour cet user
const apiKey = await axios.post(
https://sandbox.momodeveloper.mtn.com/v1_0/apiuser/${referenceId}/apikey,
null,
{
headers: {
'Ocp-Apim-Subscription-Key': process.env.MOMO_SUBSCRIPTION_KEY,
},
}
);
return { userId: referenceId, apiKey: apiKey.data.apiKey };
}
`
Étape 2 — obtenir token
`typescript
async function getMomoToken() {
const auth = Buffer.from(
${process.env.MOMO_USER_ID}:${process.env.MOMO_API_KEY}
).toString('base64');
const res = await axios.post(
'https://sandbox.momodeveloper.mtn.com/collection/token/',
null,
{
headers: {
Authorization: Basic ${auth},
'Ocp-Apim-Subscription-Key': process.env.MOMO_SUBSCRIPTION_KEY,
},
}
);
return res.data.access_token;
}
`
Étape 3 — initier paiement (request to pay)
`typescript
async function requestToPay({
phoneNumber, // Format MSISDN E.164 sans +
amount,
currency, // GHS, XOF, EUR, etc.
externalId,
payerMessage,
payeeNote,
}) {
const token = await getMomoToken();
const referenceId = uuid();
await axios.post(
'https://sandbox.momodeveloper.mtn.com/collection/v1_0/requesttopay',
{
amount: amount.toString(),
currency,
externalId,
payer: {
partyIdType: 'MSISDN',
partyId: phoneNumber,
},
payerMessage,
payeeNote,
},
{
headers: {
Authorization: Bearer ${token},
'X-Reference-Id': referenceId,
'X-Target-Environment': 'sandbox', // ou 'mtnghana', 'mtncotedivoire', etc.
'Ocp-Apim-Subscription-Key': process.env.MOMO_SUBSCRIPTION_KEY,
'Content-Type': 'application/json',
},
}
Besoin d'un site web professionnel ?
Kolonell crée des sites web qui attirent des clients, optimisés pour le marché sénégalais. Devis gratuit en 2 minutes.
);
return referenceId; // Sauvegarder pour query
}
`
Étape 4 — vérifier statut
`typescript
async function queryPayment(referenceId: string) {
const token = await getMomoToken();
const res = await axios.get(
https://sandbox.momodeveloper.mtn.com/collection/v1_0/requesttopay/${referenceId},
{
headers: {
Authorization: Bearer ${token},
'X-Target-Environment': 'sandbox',
'Ocp-Apim-Subscription-Key': process.env.MOMO_SUBSCRIPTION_KEY,
},
}
);
return res.data;
// { status: 'SUCCESSFUL' | 'PENDING' | 'FAILED', ... }
}
`
Workflow checkout type e-commerce
`
- User : entre numéro téléphone + montant
- Frontend : POST /api/payment {phone, amount}
- Backend : appel requestToPay → reçoit referenceId
- Backend : sauve {referenceId, orderId, status: 'PENDING'} en DB
- Frontend : affiche "Vérifiez votre téléphone"
- User : reçoit prompt USSD/popup MoMo, valide PIN
- Backend : poll queryPayment(referenceId) toutes 5s pendant 60s
- Backend : statut SUCCESSFUL → marquer order paid
- Frontend : redirect succès
`
Disbursements (B2C payouts)
Pour payouts (rembours, payroll, marketplace) :
`typescript
async function transfer({
phoneNumber,
amount,
currency,
externalId,
}) {
const token = await getDisbursementToken(); // Endpoint disbursement
const referenceId = uuid();
await axios.post(
'https://sandbox.momodeveloper.mtn.com/disbursement/v1_0/transfer',
{
amount: amount.toString(),
currency,
externalId,
payee: {
partyIdType: 'MSISDN',
partyId: phoneNumber,
},
payerMessage: 'Payout',
payeeNote: 'Order refund',
},
{
headers: {
Authorization: Bearer ${token},
'X-Reference-Id': referenceId,
'X-Target-Environment': 'mtnghana',
'Ocp-Apim-Subscription-Key': process.env.MOMO_DISBURSEMENT_KEY,
},
}
);
return referenceId;
}
`
Spécificités par pays
Ghana
- Currency : GHS
- Target environment :
mtnghana - Frais : 1.5 % en Collections
- Bank Open Banking : Direct GH (compétitivité)
Côte d'Ivoire
- Currency : XOF
- Target environment :
mtncotedivoire - Frais : 2 % Collections
- Concurrence : Orange Money (Wave plus minoritaire)
Cameroun
- Currency : XAF (CEMAC)
- Target environment :
mtncameroon - Frais : 2.5 %
Ouganda
- Currency : UGX
- Target environment :
mtnuganda - Frais : 1.5-2 %
Erreurs fréquentes
- Mauvais Target Environment — sandbox vs prod différents par pays.
- Pas X-Reference-Id unique — doublons rejetés.
- Format MSISDN incorrect — sans + sans 00.
- Subscription Key wrong product — Collections vs Disbursements ≠.
- Pas vérifier compte float — Disbursements échouent si balance vide.
Tarification 2026
| Pays | Collections | Disbursements |
|---|---|---|
| Ghana | 1.5 % | 0.8 % |
| Côte d'Ivoire | 2 % | 1 % |
| Cameroun | 2.5 % | 1.2 % |
| Ouganda | 1.5 % | 0.8 % |
Volumes négociables > 10M XOF/mois.
Alternatives Pan-Africa
- DPO Group : agrégateur multi-pays, MoMo + cards + crypto
- Flutterwave : agrégateur Nigeria-leader, supporte MoMo
- Paystack : Nigeria-first, expand MoMo Ghana CI
- PayDunya : Sénégal/CI-first, MoMo + Wave + cards
Pour startup multi-pays, agrégateur plus simple que MoMo direct.
FAQ
Q : MoMo Côte d'Ivoire ou Orange Money ?
R : Les deux. Orange Money 50 % CI, MoMo 35 %. Agrégateur (DPO/Flutterwave) couvre les deux.
Q : Compte business MoMo vs persistent ?
R : Compte business obligatoire pour API. Création via MTN agences locales.
Q : KYC durée ?
R : 5-15 jours après dépôt complet. Documents incorporation + KYC directors.
Conclusion
MTN MoMo API 2026 = essentiel pour Ghana / CI / Cameroun. API standardisée Open API mais setup pays-par-pays. Pour multi-pays Africa, agrégateur (DPO/Flutterwave) souvent plus simple. Pour single market scaling, intégration directe MoMo gagne en marges.
Mohamed Bah
Fondateur, Kolonell
Passionné par le digital et l'entrepreneuriat en Afrique, Mohamed accompagne les entreprises sénégalaises dans leur transformation digitale depuis 2020. Fondateur de Kolonell, il croit que chaque PME mérite une présence en ligne professionnelle et accessible.
