Mobile money
In Africa, money is on the phone. Hela talks to the operators and aggregators to request a payment on the customer's phone or send them a link to a mobile payment page.
| Partner | Countries | Mode | What you need |
|---|---|---|---|
| MTN MoMo | DRC, Uganda, Rwanda, Cameroon, Côte d'Ivoire, Benin, Ghana, Zambia… | Request on the phone (Request to Pay) | A MoMo developer account (Collections): subscription key, API user, API key, environment |
| M-Pesa | Kenya, Tanzania, DRC (Vodacom) | Request on the phone (STK Push) | A Daraja account: consumer key and secret, short code, pass key |
| Orange Money | Côte d'Ivoire, Senegal, Cameroon, Mali, Burkina, DRC… | Payment link (Web Payment) | Client id and secret, merchant key, country |
| Wave | Senegal, Côte d'Ivoire, Mali, Burkina, Uganda | Payment link (Checkout) | API key, webhook secret |
| Flutterwave | Nigeria, Ghana, Kenya, Uganda, Rwanda, Tanzania, francophone Africa | Payment link — aggregator: mobile money, cards, transfer | Secret key, webhook hash |
| Paystack | Nigeria, Ghana, Kenya, South Africa, Côte d'Ivoire | Payment link — aggregator | Secret key |
| Airtel Money | DRC, Uganda, Kenya, Tanzania, Zambia, Rwanda, Nigeria, Malawi, Gabon, Congo, Chad, Niger, Madagascar, Seychelles | Request on the phone (Merchant Payments) | An Airtel Africa developer account: client id and secret, country |
Connecting
Integrations → the partner → Connect. Enter the credentials the operator gave you and the Hela wallet to credit (usually a mobile money wallet named after the operator). Tick sandbox to try against the operators' test environments.
For partners that notify by webhook (Orange Money, Wave, Flutterwave, Paystack), copy Hela's notification address into their console. MTN and M-Pesa call back the address given with each request; nothing to configure.
Using it
Request on the phone (MTN MoMo, M-Pesa, Airtel Money): on an invoice, enter the customer's number (pre-filled from their record). The customer receives a request to confirm with their PIN. On confirmation, Hela records the payment and the invoice becomes paid; on refusal or timeout, the state becomes failed.
Payment link (Orange Money, Wave, Flutterwave, Paystack): Hela creates the payment page for the exact amount and gives the address to send — WhatsApp, SMS, QR.
Through the API:
POST /companies/{id}/integrations/documents/sale/{saleId}/push-to-phone
{ "provider": "mpesa", "phone": "+254712345678" }
POST /companies/{id}/integrations/documents/sale/{saleId}/payment-link
{ "provider": "wave" }
At the till
The point of sale's Online mode asks for the customer's number and pushes the payment request to their phone without leaving the sale screen. The sale waits; the operator's confirmation records it in the chosen wallet.
Notable settings
| Partner | Setting | Meaning |
|---|---|---|
| MTN MoMo | Environment | mtncongo, mtnuganda, mtnrwanda, mtncameroon, mtnivorycoast, mtnbenin, mtnghana, mtnzambia… (sandbox in sandbox) |
| Orange Money | Country | ci, sn, cm, ml, bf, cd — the API address depends on it |
| Airtel Money | Country | CD, UG, KE, TZ, ZM, RW… — sent in the X-Country header; UAT sandbox available |
| All | Wallet | The wallet credited |
Good to know
- Amounts are sent in the document's currency; the operator refuses a currency it does not serve (a USD invoice at M-Pesa Kenya).
- Operator fees are not deducted from the recorded payment.
- Every request or link keeps the operator's reference; the connection log shows the full round trip.
- Hela verifies notifications: HMAC signature when the operator provides one, re-reading the transaction at the operator otherwise. A notification matching nothing is logged and ignored.