Skip to main content

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

  1. Complete PawaPay merchant onboarding in an account owned by the ISP.
  2. Collect the API token from the PawaPay dashboard.
  3. Confirm which mobile money providers (“correspondents”) PawaPay has enabled for your account — the payer picks one at checkout, and an unsupported choice is refused.
  4. 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 shows https://<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.
Authorization happens on the handset, so no PawaPay domain needs to be added to the captive walled garden.

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.