Skip to main content
You need an NGN account that is active and debitable, and not a customer wallet.

1. Find the product

Three reads, top down.
A package amount is set for a fixed-price product — a data bundle — and null when the customer chooses.
Catalog ids are Sakawave ULIDs and are the only accepted addresses. Read them from the catalog and store them; a slug is display text.

2. Validate the customer

This is the step that matters.
Three things to do with it:
  1. Show customer.customerName to the payer. A wrong meter number is a valid meter number belonging to someone else.
  2. Show totalDebit, not amount. The charge is on top.
  3. Move quickly. expiresAt is ten minutes out.
Note the amount format: "5000.00", a decimal string. Not "500000". Bill payments are the one service in this API that does not use minor units.

3. Pay

The account is debited immediately. What comes back tells you how far delivery got:
submitted or pending is just as normal as confirmed — the biller may take a moment.

4. Deliver the token

Where a biller issues a credential — a prepaid electricity token, most often — it arrives in tokenData once the payment is confirmed.
Store the token. It is not re-issued, and a customer who loses it has lost the value you bought them.

Four things to know

  1. Amounts are decimals here. "5000.00", not "500000".
  2. The success state is confirmed, not completed.
  3. A failure refunds itself. Sakawave reverses the debit; you do not claim it back.
  4. An enquiry lasts ten minutes and is spent by one payment.

If it failed

Next