OWB API Documentation
Data & Airtime Automation — MTN · Airtel · GLO
HTTPS Only
POST /auth/signin
Authenticate and retrieve your API key and account details.
Field Type Required Description
password string required Account password
identifier string required Email address or username
useGmail boolean required Set true to authenticate with Gmail
useUsername boolean required Set true to authenticate with username
{
  "password": "your_password",
  "useGmail": true,
  "useUsername": false,
  "identifier": "user@example.com"
}
200
Success
{ "gmail": "...", "balance": 12500, "username": "john_doe", "key": "OWB_..." }
500
Server Error
{ "message": "Internal server error" }
curl -X POST https://owbbklive.pxxl.click/v1/auth/signin \
  -H "Content-Type: application/json" \
  -d '{
    "password": "your_password",
    "useGmail": true,
    "useUsername": false,
    "identifier": "user@example.com"
  }'
const response = await fetch('https://owbbklive.pxxl.click/v1/auth/signin', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    password: 'your_password',
    useGmail: true,
    useUsername: false,
    identifier: 'user@example.com'
  })
});
const data = await response.json();
console.log(data.key); // your API key
String body = "{\"password\":\"your_password\",\"useGmail\":true," +
              "\"useUsername\":false,\"identifier\":\"user@example.com\"}";

HttpRequest request = HttpRequest.newBuilder()
  .uri(URI.create("https://owbbklive.pxxl.click/v1/auth/signin"))
  .header("Content-Type", "application/json")
  .POST(HttpRequest.BodyPublishers.ofString(body))
  .build();

HttpClient.newHttpClient()
  .sendAsync(request, HttpResponse.BodyHandlers.ofString())
  .thenApply(HttpResponse::body)
  .thenAccept(System.out::println);
$ch = curl_init("https://owbbklive.pxxl.click/v1/auth/signin");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    "password"    => "your_password",
    "useGmail"    => true,
    "useUsername" => false,
    "identifier"  => "user@example.com"
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
echo $response;
import requests

resp = requests.post("https://owbbklive.pxxl.click/v1/auth/signin", json={
    "password":    "your_password",
    "useGmail":    True,
    "useUsername": False,
    "identifier":  "user@example.com"
})
data = resp.json()
print("API Key:", data["key"])
POST /buy/data
Purchase a data plan for MTN, Airtel, or GLO. Requires API key.
apikey: Bearer YOUR_API_KEY
Field Type Required Description
network string required Network operator: mtn | airtel | glo
planId integer required Plan ID from GET /plans
phone string required 10-digit recipient phone number
201
Purchase Successful
{ "message": "Purchase successful", "balance": 5380 }
401
Unauthorized
{ "message": "Please create an account or login" }
401
Insufficient Funds
{ "message": "Insufficient balance. You need ₦500 more to complete this purchase." }
500
Server Error
{ "message": "Something went wrong" }
curl -X POST https://owbbklive.pxxl.click/v1/buy/data \
  -H "apikey: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"network":"mtn","planId":2,"phone":"9117624342"}'
const response = await fetch('https://owbbklive.pxxl.click/v1/buy/data', {
  method: 'POST',
  headers: {
    'apikey': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ network: "mtn", planId: 2, phone: "9117624342" })
});
const data = await response.json();
console.log(data);
HttpRequest request = HttpRequest.newBuilder()
  .uri(URI.create("https://owbbklive.pxxl.click/v1/buy/data"))
  .header("apikey", "Bearer YOUR_API_KEY")
  .header("Content-Type", "application/json")
  .POST(HttpRequest.BodyPublishers.ofString(
    "{\"network\":\"mtn\",\"planId\":2,\"phone\":\"9117624342\"}"))
  .build();
$ch = curl_init("https://owbbklive.pxxl.click/v1/buy/data");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "apikey: Bearer YOUR_API_KEY",
    "Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    "network" => "mtn",
    "planId"  => 2,
    "phone"   => "9117624342"
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$resp = curl_exec($ch);
import requests

headers = {"apikey": "Bearer YOUR_API_KEY"}
payload = {"network": "mtn", "planId": 2, "phone": "9117624342"}

r = requests.post("https://owbbklive.pxxl.click/v1/buy/data", json=payload, headers=headers)
print(r.status_code, r.json())
POST /buy/airtime
Purchase airtime (VTU) for MTN, Airtel, or GLO. Requires API key.
apikey: Bearer YOUR_API_KEY
Field Type Required Description
network string required Network operator: mtn | airtel | glo
amount integer required Airtime amount in naira (₦)
phone string required 10-digit recipient phone number
201
Purchase Successful
{ "message": "Purchase successful", "balance": 5380 }
401
Insufficient Funds
{ "message": "Insufficient balance. You need ₦500 more to complete this purchase." }
401
Unauthorized
{ "message": "Please create an account or login" }
curl -X POST https://owbbklive.pxxl.click/v1/buy/airtime \
  -H "apikey: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"network":"airtel","amount":50,"phone":"9117624342"}'
const response = await fetch('https://owbbklive.pxxl.click/v1/buy/airtime', {
  method: 'POST',
  headers: {
    'apikey': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ network: "airtel", amount: 50, phone: "9117624342" })
});
const data = await response.json();
console.log(data);
String body = "{\"network\":\"airtel\",\"amount\":50,\"phone\":\"9117624342\"}";
HttpRequest request = HttpRequest.newBuilder()
  .uri(URI.create("https://owbbklive.pxxl.click/v1/buy/airtime"))
  .header("apikey", "Bearer YOUR_API_KEY")
  .header("Content-Type", "application/json")
  .POST(HttpRequest.BodyPublishers.ofString(body))
  .build();
$ch = curl_init("https://owbbklive.pxxl.click/v1/buy/airtime");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "apikey: Bearer YOUR_API_KEY",
    "Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    "network" => "airtel",
    "amount"  => 50,
    "phone"   => "9117624342"
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
import requests

r = requests.post(
    "https://owbbklive.pxxl.click/v1/buy/airtime",
    json={"network": "airtel", "amount": 50, "phone": "9117624342"},
    headers={"apikey": "Bearer YOUR_API_KEY"}
)
print(r.status_code, r.json())
GET /buy/plans
Retrieve all available data plans for MTN, Airtel, and GLO. No authentication required.
{
  "mtn": [{
    "networkId": 1,
    "network": "mtn",
    "data": "3GB",
    "days": 6,
    "id": 2,
    "type": "sme",
    "extra": "1.5GB night bonus"
  }],
  "airtel": [{
    "networkId": 2,
    "network": "airtel",
    "data": "3GB",
    "days": 6,
    "id": 2,
    "type": "CG"
  }],
  "glo": [{
    "networkId": 3,
    "network": "glo",
    "data": "3GB",
    "days": 6,
    "id": 2,
    "type": "gifting"
  }]
}
curl -X GET https://owbbklive.pxxl.click/v1/buy/plans
const response = await fetch('https://owbbklive.pxxl.click/v1/buy/plans');
const plans = await response.json();
console.log(plans.mtn); // MTN plans
HttpRequest request = HttpRequest.newBuilder()
  .uri(URI.create("https://owbbklive.pxxl.click/v1/buy/plans"))
  .GET()
  .build();

HttpClient.newHttpClient()
  .sendAsync(request, HttpResponse.BodyHandlers.ofString())
  .thenApply(HttpResponse::body)
  .thenAccept(System.out::println);
$plans = json_decode(
    file_get_contents("https://owbbklive.pxxl.click/v1/buy/plans"),
    true
);
import requests

plans = requests.get("https://owbbklive.pxxl.click/v1/buy/plans").json()
print(plans["mtn"])  # MTN plans
GET /fund
Retrieve your current wallet balance in naira (₦). Requires API key.
apikey: Bearer YOUR_API_KEY
12000
The response is a plain integer representing your current NGN wallet balance, not a JSON object.
curl -X GET https://owbbklive.pxxl.click/v1/fund \
  -H "apikey: Bearer YOUR_API_KEY"
const response = await fetch('https://owbbklive.pxxl.click/v1/fund', {
  headers: { 'apikey': 'Bearer YOUR_API_KEY' }
});
const balance = await response.text();
console.log("Balance: ₦" + balance);
HttpRequest request = HttpRequest.newBuilder()
  .uri(URI.create("https://owbbklive.pxxl.click/v1/fund"))
  .header("apikey", "Bearer YOUR_API_KEY")
  .GET()
  .build();

HttpClient.newHttpClient()
  .sendAsync(request, HttpResponse.BodyHandlers.ofString())
  .thenApply(HttpResponse::body)
  .thenAccept(b -> System.out.println("Balance: ₦" + b));
$ch = curl_init("https://owbbklive.pxxl.click/v1/fund");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["apikey: Bearer YOUR_API_KEY"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$balance = curl_exec($ch);
echo "Balance: ₦" . $balance;
import requests

resp = requests.get(
    "https://owbbklive.pxxl.click/v1/fund",
    headers={"apikey": "Bearer YOUR_API_KEY"}
)
print("Balance: ₦" + resp.text)
Supported networks
mtn airtel glo