Bill Payment API
Every Nigerian biller. One integration.
Sell airtime, data, cable TV, prepaid electricity and exam PINs from your own app, website or WhatsApp bot. You earn a discount on every sale.
curl https://api.z9pay.com/v1/bills \
-H "Authorization: Bearer sk_test_••••••••" \
-d biller=ikeja-electric-prepaid \
-d customer=45031288761 \
-d amount=10000Who it’s for
Three kinds of customer, three plans.
- Communities and groups
- Estates, cooperatives, schools and associations paying for members, or selling to them.
- Influencers
- Run airtime and data giveaways, or a branded VTU store your audience buys from.
- Individuals
- Resellers selling to friends, family and customers, with a discount on every sale.
Plans
Pay monthly, cancel any time.
Individuals
Resellers selling airtime and data to people they know
₦0per month
- Airtime, data, TV and power
- Up to 1.5% discount on airtime
- Dashboard and wallet
- Email support
Communities and groups
Most chosenEstates, cooperatives, schools and associations
₦15,000per month
- Everything in Individuals
- Group wallets and sub-accounts
- Up to 3% discount on airtime
- Bulk payments and CSV upload
- Priority support
Influencers
Creators running giveaways and branded VTU stores
₦25,000per month
- Everything in Communities
- Branded storefront link
- Bulk airtime and data giveaways
- Webhooks and full API access
- Named account manager
Reference
Five endpoints cover it.
Covers 7 bill categories. Validate the customer before you charge them, pay, then listen for the webhook.
- GET/v1/billersList billers and products
- POST/v1/bills/validateCheck meter, smartcard or phone number
- POST/v1/billsPay a bill
- GET/v1/bills/:idFetch status and token
- POST/v1/webhooksSubscribe to status events
Is there a sandbox?
Yes. Sandbox keys work against simulated billers, chains and payouts, with the same API shape as production.
How do I go live?
Complete business verification, sign the API agreement, and our compliance team reviews your use case. Most reviews finish within five business days.
Do you send webhooks?
Yes. Every object change triggers a signed webhook. We retry with backoff for 72 hours until your endpoint returns a 2xx.