Home/Developers/Purchases
Reseller API v1

Purchases API

Sell airtime, data, electricity, cable TV, exam and JAMB pins. You pay your reseller price from your PowerWave wallet; what you charge your customers is up to you.

Every code block, endpoint and section has a Copy button.

Before you start

Purchases use your reseller API key (pw_live_…) and are paid from your PowerWave wallet at your reseller prices. Create the key and fund your wallet as described in the Overview. Every purchase needs a unique reference - see References & safe retries.

Looking to collect money from your customers instead? See Payments. To send money to bank accounts, see Payouts.

The transaction object

Purchase calls return a transaction in data:

{
    "reference": "ORDER-10293",
    "transaction_ref": "PW8K2J4L9QXA",
    "type": "airtime",
    "status": "successful",
    "direction": "debit",
    "amount": "970.00",
    "fee": "0.00",
    "discount": "30.00",
    "balance_after": "24430.00",
    "description": "MTN Airtime - 0803****567",
    "channel": "api",
    "created_at": "2026-10-06T19:31:02+01:00",
    "completed_at": "2026-10-06T19:31:04+01:00",
    "details": {
        "phone": "08031234567",
        "network": "MTN",
        "face_value": "1000"
    }
}

status is successful, pending or failed. Pending means the provider has not confirmed yet - do not retry; you'll get a webhook (transaction.successful / transaction.failed), or poll GET /transactions/{reference}. Failed purchases are refunded to your wallet automatically. Prepaid electricity tokens and exam pins are in details.

Account

GET/v1/ping

Check your key

Check your key works (and which reseller business it belongs to).

curl "https://api.powerwave.ng/v1/ping" \
  -H "Authorization: Bearer $PW_KEY"
Response data
{
    "business": "MyBiz Data",
    "business_id": 12,
    "reseller": "MyBiz Data",
    "environment": "live",
    "time": "2026-10-06T19:30:00+01:00"
}
GET/v1/balance

Wallet balance

Your PowerWave wallet balance (what API purchases are paid from).

curl "https://api.powerwave.ng/v1/balance" \
  -H "Authorization: Bearer $PW_KEY"
Response data
{
    "balance": "25400.00",
    "currency": "NGN"
}
GET/v1/funding-account

Funding account

Your dedicated bank account - transfers to it fund your wallet.

curl "https://api.powerwave.ng/v1/funding-account" \
  -H "Authorization: Bearer $PW_KEY"
Response data
{
    "bank_name": "Paga",
    "account_number": "0123456789",
    "account_name": "PowerWave - Ada Okafor"
}

Airtime & data

GET/v1/networks

List networks

Networks, airtime limits and your airtime discount.

curl "https://api.powerwave.ng/v1/networks" \
  -H "Authorization: Bearer $PW_KEY"
Response data
{
    "networks": [
        {
            "id": 1,
            "code": "mtn",
            "name": "MTN",
            "airtime": true,
            "data": true,
            "airtime_min": "50.00",
            "airtime_max": "50000.00",
            "airtime_discount_percent": "3.000"
        }
    ]
}
GET/v1/data-plans?network=mtn

List data plans

Data plans for a network, at your reseller price.

ParameterDescription
networkrequired
network code or id (query)
curl "https://api.powerwave.ng/v1/data-plans?network=mtn" \
  -H "Authorization: Bearer $PW_KEY"
Response data
{
    "network": "mtn",
    "plans": [
        {
            "id": 42,
            "name": "MTN 1GB",
            "size": "1GB",
            "type": "SME",
            "validity": "30 days",
            "price": "250.00"
        }
    ]
}
POST/v1/airtime

Buy airtime

Buy airtime.

ParameterDescription
networkrequired
code or id
phonerequired
080...
amountrequired
naira, e.g. "1000"
referencerequired
your unique ID
curl -X POST "https://api.powerwave.ng/v1/airtime" \
  -H "Authorization: Bearer $PW_KEY" \
  -H "Content-Type: application/json" \
  -d '{"network":"mtn","phone":"08031234567","amount":"1000","reference":"ORDER-10293"}'
Response data
{
    "reference": "ORDER-10293",
    "transaction_ref": "PW8K2J4L9QXA",
    "type": "airtime",
    "status": "successful",
    "direction": "debit",
    "amount": "970.00",
    "fee": "0.00",
    "discount": "30.00",
    "balance_after": "24430.00",
    "description": "MTN Airtime - 0803****567",
    "channel": "api",
    "created_at": "2026-10-06T19:31:02+01:00",
    "completed_at": "2026-10-06T19:31:04+01:00",
    "details": {
        "phone": "08031234567",
        "network": "MTN",
        "face_value": "1000"
    }
}
POST/v1/data

Buy data

Buy a data plan.

ParameterDescription
plan_idrequired
from /data-plans
phonerequired
080...
referencerequired
your unique ID
curl -X POST "https://api.powerwave.ng/v1/data" \
  -H "Authorization: Bearer $PW_KEY" \
  -H "Content-Type: application/json" \
  -d '{"plan_id":42,"phone":"08031234567","reference":"ORDER-10294"}'
Response data
{
    "reference": "ORDER-10293",
    "transaction_ref": "PW8K2J4L9QXA",
    "type": "airtime",
    "status": "successful",
    "direction": "debit",
    "amount": "970.00",
    "fee": "0.00",
    "discount": "30.00",
    "balance_after": "24430.00",
    "description": "MTN Airtime - 0803****567",
    "channel": "api",
    "created_at": "2026-10-06T19:31:02+01:00",
    "completed_at": "2026-10-06T19:31:04+01:00",
    "details": {
        "phone": "08031234567",
        "network": "MTN",
        "face_value": "1000"
    }
}

Electricity

GET/v1/electricity/discos

List electricity companies

Distribution companies, limits and fee.

curl "https://api.powerwave.ng/v1/electricity/discos" \
  -H "Authorization: Bearer $PW_KEY"
Response data
{
    "discos": [
        {
            "id": 3,
            "code": "ikedc",
            "name": "Ikeja Electric",
            "min_amount": "500.00",
            "max_amount": "500000.00",
            "fee": "100.00"
        }
    ]
}
POST/v1/electricity/validate

Validate a meter

Look up the customer name on a meter before paying.

ParameterDescription
disco_idrequired
id
meter_numberrequired
…
meter_typerequired
prepaid | postpaid
curl -X POST "https://api.powerwave.ng/v1/electricity/validate" \
  -H "Authorization: Bearer $PW_KEY" \
  -H "Content-Type: application/json" \
  -d '{"disco_id":3,"meter_number":"45012345678","meter_type":"prepaid"}'
Response data
{
    "customer_name": "ADA OKAFOR"
}
POST/v1/electricity

Pay for electricity

Pay for electricity. Prepaid tokens are in details.token.

ParameterDescription
disco_idrequired
id
meter_numberrequired
…
meter_typerequired
prepaid | postpaid
amountrequired
naira
referencerequired
your unique ID
curl -X POST "https://api.powerwave.ng/v1/electricity" \
  -H "Authorization: Bearer $PW_KEY" \
  -H "Content-Type: application/json" \
  -d '{"disco_id":3,"meter_number":"45012345678","meter_type":"prepaid","amount":"5000","reference":"ORDER-10295"}'
Response data
{
    "reference": "ORDER-10293",
    "transaction_ref": "PW8K2J4L9QXA",
    "type": "airtime",
    "status": "successful",
    "direction": "debit",
    "amount": "970.00",
    "fee": "0.00",
    "discount": "30.00",
    "balance_after": "24430.00",
    "description": "MTN Airtime - 0803****567",
    "channel": "api",
    "created_at": "2026-10-06T19:31:02+01:00",
    "completed_at": "2026-10-06T19:31:04+01:00",
    "details": {
        "phone": "08031234567",
        "network": "MTN",
        "face_value": "1000"
    }
}

Cable TV

GET/v1/cable/providers

List cable providers

DStv, GOtv, StarTimes...

curl "https://api.powerwave.ng/v1/cable/providers" \
  -H "Authorization: Bearer $PW_KEY"
Response data
{
    "providers": [
        {
            "id": 1,
            "code": "dstv",
            "name": "DStv",
            "fee": "100.00"
        }
    ]
}
GET/v1/cable/plans?provider_id=1

List cable plans

Bouquets for a provider, at your price.

ParameterDescription
provider_idrequired
id (query)
curl "https://api.powerwave.ng/v1/cable/plans?provider_id=1" \
  -H "Authorization: Bearer $PW_KEY"
Response data
{
    "plans": [
        {
            "id": 7,
            "name": "DStv Compact",
            "price": "12500.00"
        }
    ]
}
POST/v1/cable/validate

Validate a smartcard

Look up the account name on a smartcard / IUC.

ParameterDescription
provider_idrequired
id
plan_idrequired
id
smartcardrequired
number
curl -X POST "https://api.powerwave.ng/v1/cable/validate" \
  -H "Authorization: Bearer $PW_KEY" \
  -H "Content-Type: application/json" \
  -d '{"provider_id":1,"plan_id":7,"smartcard":"7023456789"}'
Response data
{
    "customer_name": "ADA OKAFOR"
}
POST/v1/cable

Renew a cable subscription

Renew / subscribe.

ParameterDescription
provider_idrequired
id
plan_idrequired
id
smartcardrequired
number
referencerequired
your unique ID
curl -X POST "https://api.powerwave.ng/v1/cable" \
  -H "Authorization: Bearer $PW_KEY" \
  -H "Content-Type: application/json" \
  -d '{"provider_id":1,"plan_id":7,"smartcard":"7023456789","reference":"ORDER-10296"}'
Response data
{
    "reference": "ORDER-10293",
    "transaction_ref": "PW8K2J4L9QXA",
    "type": "airtime",
    "status": "successful",
    "direction": "debit",
    "amount": "970.00",
    "fee": "0.00",
    "discount": "30.00",
    "balance_after": "24430.00",
    "description": "MTN Airtime - 0803****567",
    "channel": "api",
    "created_at": "2026-10-06T19:31:02+01:00",
    "completed_at": "2026-10-06T19:31:04+01:00",
    "details": {
        "phone": "08031234567",
        "network": "MTN",
        "face_value": "1000"
    }
}

Exam & JAMB pins

GET/v1/exam-pins

List exam pins

WAEC, NECO, NABTEB... (also /jamb-pins).

curl "https://api.powerwave.ng/v1/exam-pins" \
  -H "Authorization: Bearer $PW_KEY"
Response data
{
    "types": [
        {
            "id": 2,
            "code": "waec-result",
            "name": "WAEC Result Checker",
            "price": "3300.00",
            "requires_customer_reference": false,
            "customer_reference_label": null
        }
    ]
}
POST/v1/exam-pins/validate

Validate a pin customer

Validate a profile/registration number when the type requires one (also /jamb-pins/validate).

ParameterDescription
type_idrequired
id
customer_referencerequired
e.g. JAMB profile code
curl -X POST "https://api.powerwave.ng/v1/exam-pins/validate" \
  -H "Authorization: Bearer $PW_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type_id":5,"customer_reference":"1234567890"}'
Response data
{
    "customer_name": "ADA OKAFOR"
}
POST/v1/exam-pins

Buy an exam pin

Buy a pin (also /jamb-pins). The pin is in details.pin.

ParameterDescription
type_idrequired
id
customer_referenceoptional
only if required
referencerequired
your unique ID
curl -X POST "https://api.powerwave.ng/v1/exam-pins" \
  -H "Authorization: Bearer $PW_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type_id":2,"reference":"ORDER-10297"}'
Response data
{
    "reference": "ORDER-10293",
    "transaction_ref": "PW8K2J4L9QXA",
    "type": "airtime",
    "status": "successful",
    "direction": "debit",
    "amount": "970.00",
    "fee": "0.00",
    "discount": "30.00",
    "balance_after": "24430.00",
    "description": "MTN Airtime - 0803****567",
    "channel": "api",
    "created_at": "2026-10-06T19:31:02+01:00",
    "completed_at": "2026-10-06T19:31:04+01:00",
    "details": {
        "phone": "08031234567",
        "network": "MTN",
        "face_value": "1000"
    }
}

Transactions

GET/v1/transactions/{reference}

Get a transaction

One transaction by YOUR reference (or our transaction_ref) - includes token/pin.

curl "https://api.powerwave.ng/v1/transactions/{reference}" \
  -H "Authorization: Bearer $PW_KEY"
Response data
{
    "reference": "ORDER-10293",
    "transaction_ref": "PW8K2J4L9QXA",
    "type": "airtime",
    "status": "successful",
    "direction": "debit",
    "amount": "970.00",
    "fee": "0.00",
    "discount": "30.00",
    "balance_after": "24430.00",
    "description": "MTN Airtime - 0803****567",
    "channel": "api",
    "created_at": "2026-10-06T19:31:02+01:00",
    "completed_at": "2026-10-06T19:31:04+01:00",
    "details": {
        "phone": "08031234567",
        "network": "MTN",
        "face_value": "1000"
    }
}
GET/v1/transactions?page=1&per_page=20

List transactions

Transactions of this key's business (purchases, collections, refunds). Filters: type, status, from, to (YYYY-MM-DD).

curl "https://api.powerwave.ng/v1/transactions?page=1&per_page=20" \
  -H "Authorization: Bearer $PW_KEY"
Response data
{
    "page": 1,
    "per_page": 20,
    "total": 135,
    "transactions": [
        "…"
    ]
}

Questions? Contact us.