> ## Documentation Index
> Fetch the complete documentation index at: https://docs.centipidbilling.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Payment gateways

> Select, configure, test, and safely switch the payment method your ISP collects with.

# Choose a payment gateway

Open **Settings → Payments**. Which gateways you are offered depends on your
country, on account enablement, and on commercial onboarding with the provider.
The catalog contains 25 gateway codes; 23 of them have a credential form in the
current interface.

Every gateway below has a setup guide of its own: what to collect before you
start, the exact fields, the callback URLs, how a payment completes, and what
each error means.

## Current gateway catalog

| Code                                                       | Method                   | Integration style                                                   |
| ---------------------------------------------------------- | ------------------------ | ------------------------------------------------------------------- |
| [`SAFARICOM`](/billing/payment-gateways/safaricom)         | Safaricom M-Pesa         | STK push with your own Daraja API keys, paybill or till             |
| [`PAYBILL`](/billing/payment-gateways/paybill)             | Paybill without API keys | STK push to your paybill using the platform's Daraja keys           |
| [`TILL_NUMBER`](/billing/payment-gateways/till-number)     | Till without API keys    | Buy Goods STK push to your till using the platform's Daraja keys    |
| [`BANK`](/billing/payment-gateways/bank)                   | Bank account             | STK push against your bank's M-Pesa paybill, to your account number |
| [`KOPOKOPO`](/billing/payment-gateways/kopokopo)           | Kopo Kopo                | STK collection through the Kopo Kopo API                            |
| [`CENTIPID`](/billing/payment-gateways/centipid)           | Centipid Collections     | Managed collection with withdrawals                                 |
| [`IOTEC`](/billing/payment-gateways/iotec)                 | Iotec                    | Ugandan mobile money, status read back from Iotec                   |
| [`RELWORX`](/billing/payment-gateways/relworx)             | Relworx                  | Mobile money aggregator with a signed webhook                       |
| [`AIRTEL_MONEY`](/billing/payment-gateways/airtel-money)   | Airtel Money             | Airtel Africa API — **not offered by the country catalog**          |
| [`PAWAPAY`](/billing/payment-gateways/pawapay)             | PawaPay                  | Pan-African mobile money on one API token, polled to completion     |
| [`PALMPESA`](/billing/payment-gateways/palmpesa)           | PalmPesa                 | Tanzanian wallet push, polled to completion                         |
| [`CLICKPESA`](/billing/payment-gateways/clickpesa)         | ClickPesa                | Hosted checkout, webhook confirmation                               |
| [`AZAMPAY`](/billing/payment-gateways/azampay)             | AzamPay                  | Wallet push, callback authenticated by a callback password          |
| [`ZENOPAY`](/billing/payment-gateways/zenopay)             | ZenoPay                  | Wallet push, polled to completion                                   |
| [`HUBTEL`](/billing/payment-gateways/hubtel)               | Hubtel                   | Ghanaian mobile money, network detected from the payer's number     |
| [`PAYSTACK`](/billing/payment-gateways/paystack)           | Paystack                 | Hosted checkout, verified against Paystack                          |
| [`OPAY`](/billing/payment-gateways/opay)                   | OPay                     | Hosted cashier, signed callback                                     |
| [`MONNIFY`](/billing/payment-gateways/monnify)             | Monnify                  | Hosted checkout, signed webhook re-verified against Monnify         |
| [`PESAPAL`](/billing/payment-gateways/pesapal)             | PesaPal                  | Hosted checkout, IPN URL registered on save                         |
| [`PAYPAL`](/billing/payment-gateways/paypal)               | PayPal                   | Approve-then-capture; sets your dashboard's billing currency        |
| [`DPO`](/billing/payment-gateways/dpo)                     | DPO Pay                  | Hosted checkout, token verified against DPO                         |
| [`PAYFAST`](/billing/payment-gateways/payfast)             | PayFast                  | Signed redirect and signed ITN confirmation                         |
| [`ORANGE_MONEY`](/billing/payment-gateways/orange-money)   | Orange Money             | Web Payment hosted checkout                                         |
| [`MTN_MOMO`](/billing/payment-gateways/mtn-momo)           | MTN Mobile Money (MoMo)  | **No credential form in this version**                              |
| [`VODACOM_MPESA`](/billing/payment-gateways/vodacom-mpesa) | Vodacom M-Pesa (DRC)     | **No credential form in this version**                              |

## Know before you choose

Four things decide whether a gateway will work for you, and none of them is
visible from the marketplace card.

<Warning>
  **Three gateways cannot be set up through the interface today.**
  [MTN MoMo](/billing/payment-gateways/mtn-momo) and
  [Vodacom M-Pesa](/billing/payment-gateways/vodacom-mpesa) appear in the
  country catalog but render no credential fields.
  [Airtel Money](/billing/payment-gateways/airtel-money) is the opposite — it
  has a working form, but no country offers it, so it never appears in the
  marketplace.

  Do not plan a migration onto any of these without talking to support first.
</Warning>

### Where the payer authorizes

**On their handset** — Safaricom, Paybill, Till, Bank, Kopo Kopo, Centipid,
Iotec, Relworx, Airtel Money, PawaPay, PalmPesa, ZenoPay, AzamPay, Hubtel,
MTN MoMo, Vodacom M-Pesa. Nothing extra is needed in the captive walled garden.

**In a hosted checkout page** — ClickPesa, Paystack, OPay, Monnify,
PesaPal, PayPal, DPO, PayFast, Orange Money. The payer's own browser must reach
the provider, so a Hotspot subscriber who is not yet online **cannot pay unless
that provider is reachable pre-authentication**. Allow it in the walled garden
and test from a device that is genuinely not logged in.

### Whether you need provider API keys

Paybill, Till, and Bank collect M-Pesa without any Daraja keys of your own — the
prompt is raised with the platform's Daraja credentials. They are real STK
pushes, not printed instructions. Centipid Collections goes further and needs no
provider account at all, with the balance paid out through Withdrawals.

Every other gateway needs credentials from an account the ISP owns.

### What completes a payment

A payment is only complete when the money is confirmed back to Centipid Billing.
Gateways differ in how that happens — a signed webhook, a status poll, a capture
call — and the failure mode is the same in every case: **the payer is charged
and never provisioned.** Each guide names what to check first for that gateway.

### Whether a linked router is required

Paybill, Till, Bank, and Centipid Collections refuse to send a prompt unless a
MikroTik router is linked and online.

## Configure a gateway

<Steps>
  <Step title="Complete provider onboarding">
    Obtain credentials from an account owned by the ISP. Confirm live versus
    sandbox status, settlement currency, supported country, and callback
    requirements with the provider.
  </Step>

  <Step title="Open Settings → Payments">
    Select the intended method and read its guide before filling the form.
  </Step>

  <Step title="Enter credentials safely">
    Paste each value into its matching field. Never reuse credentials from
    another ISP's account, and never mix test and live values.
  </Step>

  <Step title="Save and complete verification">
    Switching may require an OTP or a confirmation dialog. Saving validates the
    form; it does not prove the provider accepts your credentials.
  </Step>

  <Step title="Test end to end">
    Use a controlled amount. Verify initiation, provider authorization,
    confirmation, the payment ledger, the subscriber's package, the receipt, and
    finally settlement into your own account.
  </Step>
</Steps>

## Switch an existing account

1. Resolve or record pending transactions on the old gateway.
2. Confirm the new credentials and callback configuration.
3. Check captive walled-garden reachability for the new provider.
4. Update payment instructions and subscriber communications.
5. Switch during a monitored window.
6. Run a controlled payment from both the captive portal and the customer portal.
7. Retain the old reconciliation data according to policy.

See the [credential reference](/billing/payment-gateways/credentials-reference)
for every gateway's fields in one place, and
[Payment troubleshooting](/billing/payment-gateways/troubleshooting) for symptoms
that are not specific to one gateway.
