Skip to content

Providers & channels

Which channels a payout can use, and what decides whether one is available.

A channel names an operator in a country: cm.mtn is MTN Cameroon, sn.wave is Wave Senegal. It is the one field that says where the money physically goes, and it belongs to the beneficiary rather than to the payout, so it is fixed the day the destination is created.

Naming a channel is not the same as being able to pay out on it. The list below is what the API accepts; what actually executes depends on your account.

What has to line up

A payout runs through four separate checks before an operator ever sees it, and each answers with its own message.

CheckRefused with
The slug is a payout channel Wajub knows422 The selected beneficiary.channel is invalid.
Some rail can technically disburse on it422 No payout provider is available for this channel and currency.
That rail is approved for live payoutsThe same message
Your account has it configured, in that currency, with its circuit closedThe same message

The last three collapse into one error on purpose: a merchant has no business knowing which of Wajub's rails is down. What it means in practice is that a channel can appear in the table below, be accepted at creation, and still have nowhere to go.

The channels the API accepts

Fifty Mobile Money channels across twenty-two countries. Any of them is a valid beneficiary.channel.

CountryChannels
Beninbj.mtn bj.moov
Burkina Fasobf.orange bf.moov
Camerooncm.mtn cm.orange cm.eu
Congo-Brazzavillecg.mtn cg.airtel
Côte d'Ivoireci.mtn ci.orange ci.moov ci.wave
DR Congocd.vodacom cd.airtel cd.orange cd.africell
Egypteg.vodafone
Gabonga.airtel ga.moov
Ghanagh.mtn gh.vodafone gh.airteltigo
Guineagn.mtn gn.orange
Kenyake.mpesa ke.airtel
Liberialr.mtn
Malawimw.airtel mw.tnm
Maliml.orange ml.moov
Mozambiquemz.mpesa
Rwandarw.mtn rw.airtel
Senegalsn.orange sn.free sn.wave
Sierra Leonesl.orange
Tanzaniatz.mpesa tz.airtel tz.tigo tz.halopesa
Togotg.tmoney tg.moov
Ugandaug.mtn ug.airtel
Zambiazm.mtn zm.airtel zm.zamtel

cd.vodacom and mz.mpesa are both M-Pesa, and cm.eu is Express Union. The slug follows the operator Wajub routes through, not the brand printed on the customer's phone.

Three more channels are valid for a beneficiary without being Mobile Money: ci.djamo and sn.djamo, Djamo wallets paid by phone number, and wajub, another Wajub account paid by its account number, which never leaves Wajub and carries no fee.

The generic channel

A payout names its channel: the operator's own slug from that table, such as ke.mpesa or eg.vodafone. There is one exception, Cameroon: cm.mobile works out from the number whether it is cm.mtn or cm.orange. Beneficiaries covers how that resolution behaves and how it fails.

No other country has a generic channel. ke.mobile, eg.mobile or any other {country}.mobile is refused like an unknown channel, with 422 and The selected channel is invalid.. Even in Cameroon, name the operator whenever you know it: a resolution that fails costs you a 422 where an explicit slug would have gone straight through.

Coverage belongs to your account

Wajub's own rail pays out on cm.mtn, cm.orange and cm.eu. Every other channel in the table above needs a payout provider connected to your account and approved by Wajub for live payouts, and GET /providers lists what your account has. Collecting on a channel never implies being able to disburse on it, and having a provider connected for collections does not turn its payout side on.

What the currency does, and does not, decide

There is no rule tying a currency to a channel's country. A payout is checked against the bounds configured for its currency, against the list of active currencies, and against the currencies your providers support. Nothing compares the currency to the two letters in the slug.

In practice you will send XAF on cm.* and XOF on ci.*, because that is what the operator settles in. But a mismatch does not produce a dedicated error: it produces the same No payout provider is available for this channel and currency. as any other gap in coverage.

Channels that exist but are not payout channels

The Wajub catalogue marks a few more destinations as payout-capable, and the API refuses all of them for a beneficiary your integration creates.

ChannelWhat it is
ng.bank eg.instapay in.upiBank transfer, Nigeria, Egypt and India
crypto.btc crypto.eth crypto.usdt crypto.usdcCrypto wallets
paypalA PayPal wallet, addressed by contact detail

Sending one of these as beneficiary.channel answers 422 The selected beneficiary.channel is invalid. Bank destinations do exist, as payout accounts you create in the Dashboard on the wire channel.

Which provider handles it

You never choose. There is no provider field on a transfer and no per-call override: you name a channel, and Wajub picks among the rails that can carry it.

The order is deterministic rather than balanced, because moving money favours predictability over spreading load. Candidates are sorted by the priority you set on each provider, the highest first, and a failure moves down the list. A rail whose recent failures tripped its circuit breaker is skipped until it recovers. Orchestration covers how to set that priority and what the fallback does.

The transfer tells you afterwards which one ran it, in provider, and the operator's own identifier lands in provider_reference once the payout reaches it.

What did you think of this content?