Collect payments with PawaPay
PAWAPAY aggregates mobile money across much of Africa behind one API token.
Centipid Billing posts a deposit request, the payer authorizes on their handset,
and the deposit is polled to completion.
Offered in the country catalog for Uganda, Rwanda, Ghana, Côte d’Ivoire,
Tanzania, Zambia, Malawi, Benin, Burkina Faso, Cameroon, DR Congo,
Republic of the Congo, Senegal, Sierra Leone, and Nigeria.
Before you start
- Complete PawaPay merchant onboarding in an account owned by the ISP.
- Collect the API token from the PawaPay dashboard.
- Confirm which mobile money providers (“correspondents”) PawaPay has enabled for your account — the payer picks one at checkout, and an unsupported choice is refused.
- Confirm your account’s country is set correctly. PawaPay requires both a three-letter country code and the matching currency, and both are derived from it.
Configure the gateway
1
Open Settings → Payments → PawaPay
Select PawaPay from the payment marketplace.
2
Enter the API token
PawaPay API token (required) is the only field. It is stored as a secret
and is not echoed back into the form after saving.
3
Check your country is set
The currency is chosen from your country, not from a field on this form.
Kenya bills
KES, Uganda UGX, Tanzania TZS, Ghana GHS, Nigeria NGN,
Rwanda RWF, Zambia ZMW, Malawi MWK, Sierra Leone SLE, DR Congo
CDF, the CFA countries XOF or XAF.4
Run a controlled test payment
Pay a small amount from the captive portal, choose a correspondent, and
confirm the prompt arrives and the payment lands in the ledger.
Credentials
Requests go to
https://api.pawapay.io in production and to
https://api.sandbox.pawapay.io everywhere else, so a sandbox token cannot be
tested against production or the other way round.
Callback URLs
Settings → Payments showshttps://<your-host>/api/pawapay/callback. Register
it with PawaPay.
PawaPay callbacks are best-effort and do go missing, so the callback is not
what a payment depends on. Every accepted deposit is also polled: the captive
portal queries it while the payer’s browser is open, and a background job
keeps polling after the payer has moved on. A payment therefore still
completes when the callback never arrives.
What the payer must provide
- A mobile money number, normalized to the country’s international format.
- A correspondent — the mobile money provider to charge. Checkout refuses to send a request without a supported one.
How a payment completes
1
Request
A deposit is posted with a unique deposit id, the amount, the country and
currency resolved from your account, the correspondent, and the payer’s
number. The deposit id is what everything afterwards reconciles against.
2
Acceptance
PawaPay answers
ACCEPTED. The request is stored and polling is scheduled.3
Authorization
The payer approves on their handset.
4
Confirmation
The deposit settles to
COMPLETED, FAILED, or REJECTED. Only
COMPLETED records a payment and applies the package; the failure reason
PawaPay returns is stored against the transaction.Troubleshooting
For every gateway’s fields in one place, see the
credential reference.
