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
clientReferenceper 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
Pendingas not-final; act on the terminal state from a signed webhook orGET /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.