List airtime products
Airtime plans and product codes. Request fields, response examples and integration guidance.
/products/airtime
Example request
curl --request GET \ --url "https://api.strongmb.ng/v1/products/airtime" \ --header "Authorization: Bearer $STRONGMB_API_KEY" \ --header "Accept: application/json"
// Server-side Node.js 22+; never expose your key in a browser.
async function main() {
const response = await fetch("https://api.strongmb.ng/v1/products/airtime", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.STRONGMB_API_KEY}`,
Accept: "application/json"
},
signal: AbortSignal.timeout(30000)
});
const result = await response.json();
console.log(response.status, result);
}
main().catch(console.error);
<?php
// Requires the PHP cURL extension.
$client = curl_init('https://api.strongmb.ng/v1/products/airtime');
curl_setopt_array($client, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('STRONGMB_API_KEY'),
'Accept: application/json',
],
]);
$raw = curl_exec($client);
if ($raw === false) {
throw new RuntimeException(curl_error($client));
}
$status = curl_getinfo($client, CURLINFO_HTTP_CODE);
curl_close($client);
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
print_r(['http_status' => $status, 'response' => $result]);
require 'net/http'
require 'json'
uri = URI('https://api.strongmb.ng/v1/products/airtime')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'
http.open_timeout = 10
http.read_timeout = 30
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer ' + ENV.fetch('STRONGMB_API_KEY')
request['Accept'] = 'application/json'
begin
response = http.request(request)
result = JSON.parse(response.body)
puts({ http_status: response.code, response: result }.to_json)
rescue StandardError => error
warn error.message
end
import json
import os
from urllib.request import Request, urlopen
from urllib.error import HTTPError, URLError
headers = {
"Authorization": "Bearer " + os.environ["STRONGMB_API_KEY"],
"Accept": "application/json",
}
body = None
request = Request(
"https://api.strongmb.ng/v1/products/airtime",
data=body, headers=headers, method="GET"
)
try:
with urlopen(request, timeout=30) as response:
result = json.load(response)
print(response.status, result)
except HTTPError as error:
print(error.code, error.read().decode("utf-8"))
except URLError as error:
print("Network error:", error.reason)
Returns available airtime providers and their product codes. Use the product_code when making a
purchase.
{
"status": true,
"message": "Products retrieved successfully",
"data": {
"billers": {
"123e4567-e89b-12d3-a456-426614174000": {
"name": "MTN NIGERIA",
"id": "123e4567-e89b-12d3-a456-426614174000",
"description": "This is a test product for VTU",
"icon": "https://cdn.mysite.local/assets/icon/internet/mtn-cf1c5524-d1d9-4ee2-ad01-3f711d5bdf41.png",
"products": {
"vtu": {
"name": "VTU",
"id": "111e4567-e89b-12d3-a456-426614174000",
"description": "This is a test product for VTU",
"icon": null,
"api_access": true,
"items": [
{
"id": "924e1f3b-8c4a-4d2a-9f3b-1a2b3c4d5e6f",
"name": "MTN AIRTIME",
"discount": 1,
"currency": "NGN",
"min_amount": "50",
"description": "This is a test product for VTU",
"product_code": "smb_mtn_test_vtu",
"image": null
}
]
}
}
},
"123e44a1-e89b-12d3-a456-426614174000": {
"name": "AIRTEL NIGERIA",
"id": "123e44a1-e89b-12d3-a456-426614174000",
"description": "This is a test product for VTU",
"icon": "https://cdn.mysite.local/assets/icon/internet/airtel-cf1c5524-d1d9-4ee2-ad01-3f711d5bdf41.png",
"products": {
"vtu": {
"name": "VTU",
"id": "111e4567-e89b-1213-a456-426614174000",
"description": "This is a test product for VTU",
"icon": null,
"api_access": true,
"items": [
{
"id": "924e1f3b-551d-4d2a-9f3b-1a2b3c4d5e6f",
"name": "AIRTEL AIRTIME",
"discount": 1,
"currency": "NGN",
"min_amount": "50",
"description": "This is a test product for VTU",
"product_code": "smb_air_test_vtu",
"image": null
}
]
}
}
}
}
},
"metadata": {
"code": "PRODUCTS_RETRIEVED",
"timestamp": 1790805273,
"trace_id": "748006A8B8"
}
}
Read product entries from data.billers.{biller_id}.products.{product_type}.items. Iterate the
returned items array and use each item’s product_code for the matching validation or
purchase request.
Response fields and types
Expand an object to explore its fields. [] indicates an array item. Error responses may return
data: null.
| Field path | JSON type | Meaning and handling |
|---|---|---|
status |
boolean | Whether this API request succeeded. Check the HTTP status and metadata.code when handling errors. |
message |
string | Human-readable description of the result. Use metadata.code for programmatic error handling instead of parsing this text. |
data |
object | Response data. Check the result before reading nested fields; an error may return null or validation details. |
data.billers |
object | Providers keyed by their returned identifiers. |
data.billers.{biller_id} |
object | One provider. The key is dynamic, not a literal biller_id field. |
data.billers.{biller_id}.name |
string | Display name of the provider. |
data.billers.{biller_id}.id |
string | Provider identifier. Use the item product_code when purchasing. |
data.billers.{biller_id}.description |
string | Description of the provider or service. |
data.billers.{biller_id}.icon |
string | Provider icon URL. Allow for an unavailable image. |
data.billers.{biller_id}.products |
object | Product groups keyed by the returned product type. |
data.billers.{biller_id}.products.{product_type} |
object | One product group. Iterate the actual keys returned by the API. |
data.billers.{biller_id}.products.{product_type}.name |
string | Display name of the product group. |
data.billers.{biller_id}.products.{product_type}.id |
string | Identifier of the product group. |
data.billers.{biller_id}.products.{product_type}.description |
string | Description of this product group. |
data.billers.{biller_id}.products.{product_type}.icon |
string | null | Optional product-group icon. Null means no icon is supplied. |
data.billers.{biller_id}.products.{product_type}.api_access |
boolean | Whether this product group is available for API purchases. |
data.billers.{biller_id}.products.{product_type}.items |
array | Available product items. Refresh the list to obtain current prices, discounts and availability. |
data.billers.{biller_id}.products.{product_type}.items[] |
object | One purchasable product item. |
data.billers.{biller_id}.products.{product_type}.items[].id |
string | Identifier of the product item. Use product_code in purchase requests. |
data.billers.{biller_id}.products.{product_type}.items[].name |
string | Display name of the product item. |
data.billers.{biller_id}.products.{product_type}.items[].discount
|
number | Percentage discount on the airtime face value. At 1%, NGN 100 of airtime costs NGN 99. Your rate may increase with transaction volume; use the current value returned for your account. |
data.billers.{biller_id}.products.{product_type}.items[].currency
|
string | Currency of the price or purchase amount; NGN means Nigerian naira. |
data.billers.{biller_id}.products.{product_type}.items[].min_amount
|
string | Minimum airtime face value you can purchase, Reject smaller amounts before submitting the request. |
data.billers.{biller_id}.products.{product_type}.items[].description |
string | Description of this product item. |
data.billers.{biller_id}.products.{product_type}.items[].product_code
|
string | Exact code to send in the matching validation or purchase request. |
data.billers.{biller_id}.products.{product_type}.items[].image |
string | null | Optional item image reference. It may be null; the cable example uses a placeholder filename. |
metadata |
object | Diagnostic information about the response. |
metadata.code |
string | Machine-readable result code. Use it to distinguish validation, authentication and service errors. |
metadata.timestamp |
integer | Unix timestamp in seconds associated with the response. |
metadata.trace_id |
string | Correlation identifier for troubleshooting. Retain it with a redacted request when contacting support. |
Always check metadata.code; do not rely on HTTP status alone. See response codes and recommended
handling.
Questions? Let’s work through them.
Having an issue or need help with your integration? Join the Strongmb Slack community to ask questions and get assistance from our team and other developers.
Keep API keys and customer details private when sharing examples.
Experiencing a service issue? Check Strongmb’s service status for incident updates.
Did this page help you?
Up to 100 characters. Please leave out personal details, account information and API keys.