Airtime, Data,
Electricity, Cable TV,
Betting & more
across Nigeria
One unified REST API covers all Nigerian bill payment categories - airtime, mobile data, electricity (all 12 DisCos), cable TV, recharge card printing, betting account funding, JAMB, WAEC, and eSIM. One integration, 50+ providers, instant delivery.
POST https://api.sogo.africa/v1/bills/airtime Authorization: Bearer sogo_sk_live_•••••••••••••••• Content-Type: application/json Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000 { "network": "mtn", "phone": "08012345678", "amount": 1000 }
200 OK 92ms { "message": "Airtime purchase successful.", "data": { "reference": "BP_20260524_XXXXXXXXXXXX", "status": "completed", "type": "airtime", "network": "mtn", "phone": "08012345678", "amount": 1000, "fee": 0, "total": 1000, "created_at": "2026-05-24T10:30:00Z" } }
Every major Nigerian bill payment provider
From the big four telecoms to all 12 electricity distribution companies - the Bills API gives your users access to every provider they need.
Airtime, Data & eSIM providers
MTN
Airtel
Glo
9mobile
SmileAirtime and data services cover MTN, Airtel, Glo, and 9mobile. International eSIM data plans give your users connectivity in 190+ countries.
All 12 Electricity Distribution Companies (DisCos)
AEDC
ABEDC
BEDC
EEDC
EKEDC
IBEDC
IKEDC
JED
KAEDCO
KEDCO
PHED
YEDCAll 12 DisCos covered: Abuja (AEDC), Benin (BEDC), Eko (EKEDC), Enugu (EEDC), Ibadan (IBEDC), Ikeja (IKEDC), Jos (JED), Kaduna (KAEDCO), Kano (KEDCO), Port Harcourt (PHED), Yola (YEDC), and Abuja ABEDC. Meter number verification before payment is supported via the verify-meter endpoint.
Cable TV providers
DSTV
GoTV
StarTimesPay subscriptions for DSTV, GoTV, and StarTimes. Smartcard number verification via verify-smartcard confirms the subscriber's name before deduction, preventing wrong-account payments. Package selection from available bouquets is supported via GET /v1/bills/cable-packages.
Betting & gaming platforms (14 providers)
Bet9ja
Betway
SportyBet
1xBet
BangBet
BetKing
Betland
BetLion
Cloudbet
LiveScore Bet
Merrybet
NaijaBet
NairaBet
SupabetFund betting accounts for Nigeria's top 14 sports betting platforms. The verify-account endpoint looks up the username before deduction.
Educational payment providers
JAMB
WAECPay JAMB registration fees, result checker, and profile verification fees. WAEC result checker and examination fees. Profile lookup via verify-jamb confirms the candidate's name before payment. View available plans with GET /v1/bills/education-plans.
One pattern for all 7 bill categories
Every bill category follows the same response shape, so one integration handles all of them. Build once, cover all Nigerian bills.
Load the catalogue
Call GET /v1/bills/catalog to get all providers, slugs, available types, and metadata in a single response. Cache it and refresh periodically.
Verify the recipient
For electricity, cable TV, betting, and JAMB - call the verification endpoint first. Returns the subscriber's name for user confirmation before payment.
Submit the payment
Call the category endpoint (e.g. POST /v1/bills/airtime) with provider slug and amount. Deduction and delivery happen in the same request.
Confirm via webhook
For asynchronous deliveries, a transaction.completed webhook fires when the bill is confirmed delivered by the provider.
All 16 Bills API endpoints
Organised into three groups: catalogue reads, pre-payment verification, and purchase endpoints.
Returns all supported bill types, providers within each type, provider slugs, and type-level metadata. Use this to populate your UI and map provider slugs for payment requests.
GET https://api.sogo.africa/v1/bills/catalog Authorization: Bearer sogo_sk_live_••••••••••••••••
200 OK 74ms { "data": { "airtime": { "label": "Airtime", "providers": [ { "slug": "mtn", "name": "MTN Nigeria" }, { "slug": "airtel", "name": "Airtel Nigeria" }, { "slug": "glo", "name": "Glo Nigeria" }, { "slug": "9mobile","name": "9mobile" } ] }, "electricity": { "label": "Electricity", "providers": [ { "slug": "aedc", "name": "AEDC" }, // ... 11 more DisCos ] }, // ... cable_tv, data, betting, education, epin, esim } }
Returns all available mobile data plans for each telecom provider, including bundle size, validity period, price, and variation code. Filters: ?network=mtn. Use variation codes when calling POST /v1/bills/data.
Returns subscription packages available for DSTV, GoTV, and StarTimes. Includes package name, channels, monthly price, and variation code. Filter by provider: ?provider=dstv.
Returns available education payment plans for JAMB and WAEC, including plan name, purpose, and price. JAMB plans include UTME registration, direct entry, change of course, and profile verification.
Returns the discount percentage applied to each bill category and provider for your API key. Use this to calculate the effective cost of each transaction type. Discounts vary by volume and partner tier.
Why verify before paying?
Verification endpoints look up the account holder's name using their meter number, smartcard number, or user ID before any Naira is deducted. Showing "Subscriber: John Doe" before the user confirms prevents wrong-account payments and reduces support incidents significantly. For electricity, verification also returns whether the meter is prepaid or postpaid.
Validates a meter number against a specific electricity DisCo. Returns the customer's name, address, and meter type (prepaid/postpaid). No charge is applied.
| Parameter | Type | Required | Description |
|---|---|---|---|
| disco_slug | string | required | DisCo slug from catalog (e.g. aedc, ikedc, ekedc). |
| meter_number | string | required | The customer's electricity meter number. |
| meter_type | string | required | prepaid or postpaid. |
POST https://api.sogo.africa/v1/bills/electricity/verify-meter Authorization: Bearer sogo_sk_live_•••••••••••••••• Content-Type: application/json { "disco_slug": "ikedc", "meter_number": "45012345678", "meter_type": "prepaid" }
200 OK 320ms { "message": "Meter verified successfully.", "verification": { "customer_name": "John Adewale Doe", "address": "12 Lagos Street, Ikeja, Lagos", "meter_number": "45012345678", "meter_type": "prepaid" } }
Validates a DSTV, GoTV, or StarTimes smartcard number and returns the subscriber's name and current subscription status.
Looks up a JAMB registration number or profile ID and returns the candidate's name, date of birth, and exam status. Used to confirm the recipient before paying any JAMB fees.
Validates a betting account ID with the specified platform and returns the account holder's username. Supports all 14 betting providers. Call this before POST /v1/bills/bet-funding.
Purchase airtime for any Nigerian network (MTN, Airtel, Glo, 9mobile). Delivery is instant and confirmed in the same response.
| Parameter | Type | Required | Description |
|---|---|---|---|
| network | string | required | Network slug: mtn, glo, airtel, t2mobile. |
| phone | string | required | Nigerian mobile number in format 080XXXXXXXX or +2348XXXXXXXX. |
| amount | integer | required | Airtime value in Naira (minimum ₦50, maximum ₦50,000). |
POST https://api.sogo.africa/v1/bills/airtime Authorization: Bearer sogo_sk_live_•••••••••••••••• Content-Type: application/json Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000 { "network": "mtn", "phone": "08012345678", "amount": 1000 }
200 OK 92ms { "message": "Airtime purchase successful.", "data": { "reference": "BP_20260524_XY1234ABCDEF", "status": "completed", "type": "airtime", "network": "mtn", "phone": "08012345678", "amount": 1000, "fee": 0, "total": 1000, "created_at":"2026-05-24T10:30:00Z" } }
// PHP - buy ₦1,000 MTN airtime $client = new \GuzzleHttp\Client; $response = $client->post('https://api.sogo.africa/v1/bills/airtime', [ 'headers' => [ 'Authorization' => 'Bearer ' . getenv('SOGO_SECRET_KEY'), 'Content-Type' => 'application/json', 'Idempotency-Key' => \Ramsey\Uuid\Uuid::uuid4()->toString(), ], 'json' => [ 'network' => 'mtn', 'phone' => $request->phone, 'amount' => (int) $request->amount, ], ]); $data = json_decode($response->getBody(), true)['data']; // $data['status'] === 'completed' means delivery is done
import { randomUUID } from 'crypto'; const res = await fetch('https://api.sogo.africa/v1/bills/airtime', { method: 'POST', headers: { Authorization: `Bearer ${process.env.SOGO_SECRET_KEY}`, 'Content-Type': 'application/json', 'Idempotency-Key': randomUUID(), }, body: JSON.stringify({ network: 'mtn', phone: req.body.phone, amount: req.body.amount, }), }); const { data } = await res.json(); // data.status === 'completed' - instant confirmation
Purchase a mobile data bundle. Required params: network (mtn/glo/airtel/t2mobile/smile), phone, variation_code (from GET /v1/bills/data-plans). Supports all available bundles from 50MB daily plans to unlimited monthly packages.
Pay an electricity bill or buy prepaid token. Required params: disco_slug (DisCo slug), meter_number, meter_type (prepaid/postpaid), amount (in Naira). Always call verify-meter first and show the customer name to the user before submitting.
Pay a cable TV subscription. Required params: provider (dstv/gotv/startimes), smartcard_number, subscription_type (renew/change), variation_code (from GET /v1/bills/cable-packages), amount. Call verify-smartcard first to confirm the subscriber name.
Pay JAMB and WAEC fees. Required params: provider (jamb/waec), variation_code (from GET /v1/bills/education-plans), amount. For JAMB: also pass profile_id (candidate registration number). For WAEC: also pass service_type (result_checker/registration).
Purchase electronic recharge card PINs (e-PIN) for bulk airtime resellers and recharge card printing businesses. Returns a list of PIN codes and their serial numbers. Required params: network (mtn/glo/airtel/t2mobile), denomination (100/200/500), quantity.
Fund a betting account wallet. Required params: provider (e.g. bet9ja, sportybet), account_id (betting platform user ID), amount. Always call verify-account first to confirm the username.
Transaction status webhooks
Most bill payments complete synchronously - the response already includes status: completed. For asynchronous deliveries (some electricity providers, eSIM), Sogo fires webhooks.
Asynchronous bill payment has been successfully delivered. For electricity, the payload includes the prepaid token code. For eSIM, activation details are included. Update your user's record and notify them.
The bill payment could not be processed (possible reasons include provider downtime, invalid account details, or service unavailability) and the transaction has been cancelled, firing a transaction.cancelled webhook.
Following a cancellation or delivery failure, Sogo automatically refunds the full Naira bill amount back to your Naira wallet balance. Sogo dispatches a transaction.refunded webhook when the refund completes.
Add Nigerian bill payments to your app today
Get your API keys and start testing in sandbox. Every endpoint, every provider, and every webhook is available in the test environment - no real money needed.