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.
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
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
- Always verify TV smartcards / meters first before charging your customer.
- Pass a unique
referencewith every order — retries with the same reference return the original result instead of double-charging. - Check
GET /api/v1/order/status?reference=…to confirm delivery before marking orders complete. - Poll
GET /api/v1/smm/statusfor SMM orders — social delivery can take minutes to hours. - Fetch prices live from the catalog endpoints so your margins stay accurate.