Purchase Airtime
curl --request POST \
--url https://api.bleeprs.com/api/purchaseAirtime \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
[
{
"amount": 1000,
"phoneNumber": "08107176819",
"network": "MTN",
"productCode": "MTN_AIRTIME_PRODUCT_CODE"
}
]
'import requests
url = "https://api.bleeprs.com/api/purchaseAirtime"
payload = [
{
"amount": 1000,
"phoneNumber": "08107176819",
"network": "MTN",
"productCode": "MTN_AIRTIME_PRODUCT_CODE"
}
]
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify([
{
amount: 1000,
phoneNumber: '08107176819',
network: 'MTN',
productCode: 'MTN_AIRTIME_PRODUCT_CODE'
}
])
};
fetch('https://api.bleeprs.com/api/purchaseAirtime', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bleeprs.com/api/purchaseAirtime",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
[
'amount' => 1000,
'phoneNumber' => '08107176819',
'network' => 'MTN',
'productCode' => 'MTN_AIRTIME_PRODUCT_CODE'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.bleeprs.com/api/purchaseAirtime"
payload := strings.NewReader("[\n {\n \"amount\": 1000,\n \"phoneNumber\": \"08107176819\",\n \"network\": \"MTN\",\n \"productCode\": \"MTN_AIRTIME_PRODUCT_CODE\"\n }\n]")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.bleeprs.com/api/purchaseAirtime")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("[\n {\n \"amount\": 1000,\n \"phoneNumber\": \"08107176819\",\n \"network\": \"MTN\",\n \"productCode\": \"MTN_AIRTIME_PRODUCT_CODE\"\n }\n]")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bleeprs.com/api/purchaseAirtime")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n {\n \"amount\": 1000,\n \"phoneNumber\": \"08107176819\",\n \"network\": \"MTN\",\n \"productCode\": \"MTN_AIRTIME_PRODUCT_CODE\"\n }\n]"
response = http.request(request)
puts response.read_body{
"gatewayStatus": "00",
"gatewayMessage": "Successfully Processed",
"requestReference": "JJqI1HCxemtGpMOWOESU",
"data": {
"message": "Vending Request Sent",
"references": [
"bpr_req_a1b2c3d4e5f6"
]
}
}{
"gatewayStatus": "88",
"gatewayMessage": "Unsucessfull",
"requestReference": "bpr_req_a1b2c3d4e5f6",
"data": "Amount out of range for MTN"
}{
"gatewayStatus": "88",
"gatewayMessage": "Unsucessfull",
"requestReference": "bpr_req_a1b2c3d4e5f6",
"data": "Vending account not configured"
}{
"gatewayStatus": "88",
"gatewayMessage": "Unsucessfull",
"requestReference": "bpr_req_a1b2c3d4e5f6",
"data": "Transaction in progress for this number and amount. Please wait."
}{
"gatewayStatus": "88",
"gatewayMessage": "Unsucessfull",
"requestReference": "bpr_req_a1b2c3d4e5f6",
"data": "Airtime vending is temporarily unavailable across all servers. Please try again later."
}Vending
Purchase Airtime
Purchase airtime for a phone number
POST
/
purchaseAirtime
Purchase Airtime
curl --request POST \
--url https://api.bleeprs.com/api/purchaseAirtime \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
[
{
"amount": 1000,
"phoneNumber": "08107176819",
"network": "MTN",
"productCode": "MTN_AIRTIME_PRODUCT_CODE"
}
]
'import requests
url = "https://api.bleeprs.com/api/purchaseAirtime"
payload = [
{
"amount": 1000,
"phoneNumber": "08107176819",
"network": "MTN",
"productCode": "MTN_AIRTIME_PRODUCT_CODE"
}
]
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify([
{
amount: 1000,
phoneNumber: '08107176819',
network: 'MTN',
productCode: 'MTN_AIRTIME_PRODUCT_CODE'
}
])
};
fetch('https://api.bleeprs.com/api/purchaseAirtime', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bleeprs.com/api/purchaseAirtime",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
[
'amount' => 1000,
'phoneNumber' => '08107176819',
'network' => 'MTN',
'productCode' => 'MTN_AIRTIME_PRODUCT_CODE'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.bleeprs.com/api/purchaseAirtime"
payload := strings.NewReader("[\n {\n \"amount\": 1000,\n \"phoneNumber\": \"08107176819\",\n \"network\": \"MTN\",\n \"productCode\": \"MTN_AIRTIME_PRODUCT_CODE\"\n }\n]")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.bleeprs.com/api/purchaseAirtime")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("[\n {\n \"amount\": 1000,\n \"phoneNumber\": \"08107176819\",\n \"network\": \"MTN\",\n \"productCode\": \"MTN_AIRTIME_PRODUCT_CODE\"\n }\n]")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bleeprs.com/api/purchaseAirtime")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n {\n \"amount\": 1000,\n \"phoneNumber\": \"08107176819\",\n \"network\": \"MTN\",\n \"productCode\": \"MTN_AIRTIME_PRODUCT_CODE\"\n }\n]"
response = http.request(request)
puts response.read_body{
"gatewayStatus": "00",
"gatewayMessage": "Successfully Processed",
"requestReference": "JJqI1HCxemtGpMOWOESU",
"data": {
"message": "Vending Request Sent",
"references": [
"bpr_req_a1b2c3d4e5f6"
]
}
}{
"gatewayStatus": "88",
"gatewayMessage": "Unsucessfull",
"requestReference": "bpr_req_a1b2c3d4e5f6",
"data": "Amount out of range for MTN"
}{
"gatewayStatus": "88",
"gatewayMessage": "Unsucessfull",
"requestReference": "bpr_req_a1b2c3d4e5f6",
"data": "Vending account not configured"
}{
"gatewayStatus": "88",
"gatewayMessage": "Unsucessfull",
"requestReference": "bpr_req_a1b2c3d4e5f6",
"data": "Transaction in progress for this number and amount. Please wait."
}{
"gatewayStatus": "88",
"gatewayMessage": "Unsucessfull",
"requestReference": "bpr_req_a1b2c3d4e5f6",
"data": "Airtime vending is temporarily unavailable across all servers. Please try again later."
}Overview
Purchase airtime for any Nigerian phone number on supported networks. The airtime will be credited instantly to the recipient’s phone.Request Body
Send an array with one or more airtime purchases.Response Fields
string
Reference to store for reconciliation and support.
object
Status Codes
| Code | Meaning |
|---|---|
202 | Batch accepted for processing. Airtime is credited within a few seconds; use each reference in data.references to track individual items. |
400 | The request could not be processed. Common causes: invalid payload, empty body, unrecognised network, or amount outside the airtime catalog range. |
422 | Your organisation is not yet configured for vending, or an individual item in the batch could not be posted. |
429 | Another purchase for the same phone number and amount is already in progress. Retry after a short delay or with a different amount. |
503 | Airtime vending is temporarily unavailable across all providers. Retry after a short delay. |
Supported Networks
- MTN - MTN Nigeria
- AIRTEL - Airtel Nigeria
- GLOBACOM - Glo Nigeria
- 9MOBILE - 9mobile Nigeria
Notes
- Airtime is credited instantly to the recipient’s phone
- The minimum purchase amount is
₦100; refer to the airtime catalog for network-specific limits. - Maximum purchase amounts are returned by the airtime catalog
- Phone numbers are accepted as
080...,23480..., or80...and normalized to the 11-digit local format; non-Nigerian mobile numbers are rejected before any charge - Transaction processing may take a few seconds
- Store the
requestReferencereturned by the API for reconciliation and support
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Minimum array length:
1Amount of airtime to purchase (in Naira)
Example:
50
Recipient's phone number. Accepted as 08012345678, 2348012345678, or 8012345678 — normalized to the 11-digit local format.
Example:
"08107176819"
Network provider
Available options:
MTN, AIRTEL, GLOBACOM, 9MOBILE Example:
"MTN"
Product code returned by the Airtime catalog
Example:
"MTN_AIRTIME_PRODUCT_CODE"
Voucher code returned by the Airtime catalog, when provided
Example:
""
Operator value returned by the Airtime catalog
Example:
"MTN"
Region value returned by the Airtime catalog
Example:
"NG"
Response
Batch accepted for processing. Airtime is credited within a few seconds; use each reference in data.references to track individual items.
Was this page helpful?