Plustiveplustive
Sign inGet API key

Tutorial · Updated June 2026

How to automate bill payments with an API

Verify a customer, pay electricity, cable TV, education or broadband bills, and return the token or PIN — programmatically, over one REST API in Nigeria.

Automating bill payments means paying a biller — electricity, cable TV, an exam body or an ISP — from your own software and handing the customer the result instantly. With the Plustive API every bill follows one shape: list → verify → pay. Money is in kobo and each payment is idempotent on your clientReference.

The four bill types

  • Electricity — prepaid (token returned) and postpaid, for the discos. Variable amount.
  • Cable TV — DSTV, GOtv and StarTimes bouquets, by smartcard/IUC number.
  • Education — WAEC, NECO and JAMB result-checker PINs. No verify step; the PIN is returned.
  • Broadband — Smile, Spectranet and similar, like cable TV.

Step 1 — Verify the customer

For electricity, cable TV and broadband, confirm the account holder before you move money. Verification returns the customerName and a status of valid, invalid or unknown — show the name to your customer so they catch a wrong meter number before paying.

curl -X POST https://api.plustiveimpact.com/api/v1/electricity/verify \
  -H "Authorization: Bearer pk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{ "productId": "ikedc-prepaid", "meterNumber": "04123456789" }'

→ { "customerName": "ADA OKafor", "status": "valid" }

Step 2 — Pay and return the token

Now pay. Electricity is variable-amount, so pass the amount in kobo (minimum ₦100). For a prepaid meter the recharge token comes back in the token field — display it immediately.

curl -X POST https://api.plustiveimpact.com/api/v1/electricity \
  -H "Authorization: Bearer pk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "productId": "ikedc-prepaid",
    "meterNumber": "04123456789",
    "amount": 500000,
    "clientReference": "power_4001"
  }'
  # amount 500000 = ₦5,000.00

→ { "status": "Success", "token": "1234-5678-9012-3456" }

Cable TV and broadband — same shape

Verify the smartcard or IUC number, then pay the chosen bouquet. The verify endpoint mirrors electricity:

curl -X POST https://api.plustiveimpact.com/api/v1/cabletv/verify \
  -H "Authorization: Bearer pk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{ "productId": "dstv-compact", "smartcardNumber": "1234567890" }'

→ { "customerName": "ADA OKafor", "status": "valid" }

Education PINs — pay only

Result-checker PINs have no account to verify, so you skip straight to payment. The purchased PIN is returned in the token field:

curl -X POST https://api.plustiveimpact.com/api/v1/education \
  -H "Authorization: Bearer pk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{ "productId": "waec-result-checker", "clientReference": "edu_7781" }'

→ { "status": "Success", "token": "WRN-XXXX-XXXX-XXXX" }

Make it production-grade

  • Idempotency: one clientReference per order; retry with the same value so a timeout never pays twice.
  • Persist the token/PIN the moment you receive it — it’s the thing your customer paid for.
  • Confirm asynchronously: treat Pending as not-final; act on the terminal state from a signed webhook or GET /api/v1/transactions/{ref}.
  • Trust the auto-refund: a payment that ultimately fails returns to your wallet to the kobo — no manual reversal.

The exact request and response fields for every biller are in the bill-payments reference. The pattern never changes: list, verify, pay, confirm.

Go deeper: