Skip to content

Phone number formats

How Wajub reads a Mobile Money number, country by country, and what it rejects.

Mobile Money is identified by phone number everywhere Wajub touches it: a customer paying in, a payout leaving your balance, a marketplace settling a seller. Get the format wrong and the payment fails before the customer ever sees a prompt, which makes this the most common integration error we see.

Send E.164

Wajub expects the international form: a +, the country dialling code, then the subscriber number. No spaces, no dashes, no parentheses, no leading zero from the national format.

The shape of an accepted number
+[country code][subscriber number]

+237670000000     Cameroon, MTN
+221770000000     Senegal, Orange
+254700000000     Kenya, Safaricom

A number that arrives without its country code is not automatically refused. Wajub parses it with libphonenumber, and when the call carries a country to anchor it on, a channel like cm.mtn is enough, a local number such as 670000000 is read as +237670000000. Without that anchor there is nothing to guess from, and the number comes back as a 422.

Send E.164 anyway

Relying on the fallback means relying on your own channel being right. Normalise on your side, at the point where the customer types the number, and you remove a whole class of failure from every call that follows.

Every country Wajub reaches

Sixteen countries, each with its dialling code and the operators Wajub knows there.

CountryDialling codeOperators
CameroonCameroon+237MTN MoMo, Orange Money, Express Union, Yoomee Money
Côte d'IvoireCôte d'Ivoire+225MTN MoMo, Orange Money, Moov Money, Wave, Green Money
SenegalSenegal+221Orange Money, Free Money
BeninBenin+229MTN MoMo, Moov Money, Glo
Burkina FasoBurkina Faso+226Orange Money, Moov Money
NigeriaNigeria+234MTN MoMo, Orange Money
GhanaGhana+233MTN MoMo, Vodafone Cash, Airtel Money, AirtelTigo Money
KenyaKenya+254M-Pesa, M-Pesa Till, Airtel Till, Equitel, T-Kash
UgandaUganda+256MTN MoMo, Airtel Money
RwandaRwanda+250MTN MoMo, Airtel Money
TanzaniaTanzania+255Airtel Money, Tigo Pesa, Vodafone Cash, HaloPesa
DR CongoDR Congo+243Airtel Money, Orange Money, Vodacom M-Pesa, Express Union
GabonGabon+241Airtel Money, Express Union
ChadChad+235Express Union
Central African Rep.Central African Rep.+236Express Union
CongoCongo+242Express Union

How the operator is identified

This is where production and sandbox genuinely differ, and the difference matters.

In production, Wajub asks libphonenumber's carrier database who actually owns the number. That database is maintained by Google and tracks real allocations, so it survives number portability and new ranges without anyone updating a table here. The carrier name it returns is mapped to an operator: MTN, Orange, Airtel, Moov, Wave, Safaricom, Vodacom, Free, Nexttel, Camtel, Yoomee and Expresso are recognised. A carrier outside that list is treated as no supported operator.

In sandbox, no real number exists to look up, so Wajub matches the prefixes below instead. They are synthetic: they exist to make test outcomes deterministic, not to describe how real numbers are allocated.

Country and operatorSandbox prefixChannel
Cameroon / MTN MoMoCameroon / MTN MoMo+23767…cm.mtn
Cameroon / Orange MoneyCameroon / Orange Money+23769…cm.orange
Cameroon / Express UnionCameroon / Express Union+23768…cm.eu
Cameroon / Yoomee MoneyCameroon / Yoomee Money+23766…cm.yoomee
Côte d'Ivoire / MTN MoMoCôte d'Ivoire / MTN MoMo+22505…ci.mtn
Côte d'Ivoire / Orange MoneyCôte d'Ivoire / Orange Money+22507…ci.orange
Côte d'Ivoire / Moov MoneyCôte d'Ivoire / Moov Money+22501…ci.moov
Côte d'Ivoire / WaveCôte d'Ivoire / Wave+22503…ci.wave
Côte d'Ivoire / Green MoneyCôte d'Ivoire / Green Money+22509…ci.green
Senegal / Orange MoneySenegal / Orange Money+22177…sn.orange
Senegal / Free MoneySenegal / Free Money+22176…sn.free
Benin / MTN MoMoBenin / MTN MoMo+22990…bj.mtn
Benin / Moov MoneyBenin / Moov Money+22991…bj.moov
Benin / GloBenin / Glo+22997…bj.glo
Burkina Faso / Orange MoneyBurkina Faso / Orange Money+22670…bf.orange
Burkina Faso / Moov MoneyBurkina Faso / Moov Money+22671…bf.moov
Nigeria / MTN MoMoNigeria / MTN MoMo+2348…ng.mtn
Nigeria / Orange MoneyNigeria / Orange Money+2347…ng.orange
Ghana / MTN MoMoGhana / MTN MoMo+23324…gh.mtn
Ghana / Vodafone CashGhana / Vodafone Cash+23320…gh.vodafone
Ghana / Airtel MoneyGhana / Airtel Money+23326…gh.airtel
Ghana / AirtelTigo MoneyGhana / AirtelTigo Money+23327…gh.airteltigo
Kenya / M-PesaKenya / M-Pesa+25470…ke.mpesa
Kenya / M-Pesa TillKenya / M-Pesa Till+25471…ke.mpesa_till
Kenya / Airtel TillKenya / Airtel Till+25473…ke.airtel_till
Kenya / EquitelKenya / Equitel+25476…ke.equitel
Kenya / T-KashKenya / T-Kash+25477…ke.tkash
Uganda / MTN MoMoUganda / MTN MoMo+25677…ug.mtn
Uganda / Airtel MoneyUganda / Airtel Money+25675…ug.airtel
Rwanda / MTN MoMoRwanda / MTN MoMo+25078…rw.mtn
Rwanda / Airtel MoneyRwanda / Airtel Money+25073…rw.airtel
Tanzania / Airtel MoneyTanzania / Airtel Money+25567…tz.airtel
Tanzania / Tigo PesaTanzania / Tigo Pesa+25565…tz.tigo
Tanzania / Vodafone CashTanzania / Vodafone Cash+25574…tz.vodafone
Tanzania / HaloPesaTanzania / HaloPesa+25562…tz.halopesa
DR Congo / Airtel MoneyDR Congo / Airtel Money+24399…cd.airtel
DR Congo / Orange MoneyDR Congo / Orange Money+24389…cd.orange
DR Congo / Vodacom M-PesaDR Congo / Vodacom M-Pesa+24381…cd.vodacom
DR Congo / Express UnionDR Congo / Express Union+24382…cd.eu
Gabon / Airtel MoneyGabon / Airtel Money+2410…ga.airtel
Gabon / Express UnionGabon / Express Union+2411…ga.eu
Chad / Express UnionChad / Express Union+23566…td.eu
Central African Rep. / Express UnionCentral African Rep. / Express Union+23670…cf.eu
Congo / Express UnionCongo / Express Union+24205…cg.eu

Letting Wajub pick the channel

Send a phone number with no channel and Wajub resolves the operator itself, then routes to the best available provider for it. This is the normal case, and the one to prefer.

No channel, resolved from the number
{
"amount": 5000,
"currency": "XAF",
"customer": {
"phone": "+237670000000"
}
}

Name a channel only when you want to force one operator, on the charge call of a Direct API integration. If the number and the channel disagree, the call is refused rather than silently rerouted.

What comes back when it is wrong

ResponseCauseFix
422 on phoneNo +, no country code, and nothing to anchor the number onNormalise to E.164 before you send
422 on channelThe channel names an operator that does not serve that countryCheck the country's operators above
422, number and channel disagreeThe number belongs to another operator than the one you namedDrop channel and let Wajub resolve it
failed with invalid_phoneThe number parsed but no carrier owns itAsk the customer to confirm their number

The first three are refusals at creation, so nothing is charged and nothing appears in your Dashboard. The last one is a real payment that reached an operator and came back, and it shows up in the failure reasons catalogue.

What did you think of this content?