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.

¿Algo incorrecto o ausente? Escríbanos.