ProzTopUp

Nigeria's trusted VTU platform

Developers

Resell ProzTopUp services via API

Sell airtime, data, DStv/GOtv/StarTimes, electricity, exam e-pins and SMM boosts from your own website or app. Orders debit your ProzTopUp wallet instantly at the same prices you see on the dashboard — you add your own margin on top.

1. Fund wallet
Top up your ProzTopUp wallet — API orders debit it directly.
2. Create key
Dashboard → API Keys → Generate key. Copy it once.
3. Integrate
Call the endpoints below with your key. Go live.
Get an API key →Create account

Authentication

Pass your key on every request as Authorization: Bearer <key>(or X-API-Key header). Keep keys secret — revoke compromised keys from the dashboard. Limit: 60 requests/minute per key.

Endpoints

GET/api/v1/balanceWallet balance for the API key owner.
GET/api/v1/servicesCatalog overview with every order endpoint.
GET/api/v1/data/plans?network=MTNData plans with live resell prices.
POST/api/v1/airtimeBuy airtime. { network, phone, amount, reference? }
POST/api/v1/dataBuy data. { network, phone, plan_id, reference? }
GET/api/v1/tv/packages?provider=DSTVTV packages & prices.
POST/api/v1/tv/verifyVerify smartcard. { provider, smartcard }
POST/api/v1/tvPay TV. { provider, smartcard, package_id, reference? }
GET/api/v1/electricity/discosSupported DISCOs.
POST/api/v1/electricity/verifyVerify meter. { disco, meter_type, meter_number, amount }
POST/api/v1/electricityPay bill (returns token). { disco, meter_type, meter_number, amount, reference? }
GET/api/v1/epins/catalogExam pins & prices.
POST/api/v1/epinsBuy e-pin(s). { exam_id, quantity? }
GET/api/v1/smm/servicesSMM services with NGN prices.
POST/api/v1/smm/orderBoost order. { service_id, link, quantity, reference? }
GET/api/v1/smm/status?order=123Live SMM delivery status.
GET/api/v1/order/status?reference=REFStatus of any order (incl. electricity token).
GET/api/v1/transactionsOrder history (?type=DATA&page=1&limit=20).

Example: buy data (cURL)

curl -X POST https://protopup.com.ng//api/v1/data \
  -H "Authorization: Bearer pt_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"network":"MTN","phone":"08012345678","plan_id":"PLAN_ID","reference":"my-unique-ref-001"}'

Example: JavaScript

const res = await fetch("https://protopup.com.ng//api/v1/data", {
  method: "POST",
  headers: {
    "Authorization": "Bearer pt_live_YOUR_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    network: "MTN",
    phone: "08012345678",
    plan_id: "PLAN_ID",      // from GET /api/v1/data/plans
    reference: "my-unique-ref-001", // optional idempotency key
  }),
});
const order = await res.json();
console.log(order.reference, order.balance);

Example: PHP

$ch = curl_init("https://protopup.com.ng//api/v1/airtime");
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer pt_live_YOUR_KEY",
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => json_encode([
    "network" => "AIRTEL",
    "phone" => "08012345678",
    "amount" => 500,
    "reference" => "my-unique-ref-002",
  ]),
]);
$order = json_decode(curl_exec($ch), true);

Response format

// Success — HTTP 200
{ "status": "success", "message": "...", "reference": "DATA-...oko",
  "balance": 9500, "token": "1234-5678 (electricity only)" }

// Error — HTTP 4xx/5xx
{ "status": "error", "message": "Insufficient wallet balance" }

💡 Tips for resellers