List data plans
Get data plans and product codes. Request fields, response examples and integration guidance.
/products/internet
Example request
curl --request GET \ --url "https://api.strongmb.ng/v1/products/internet" \ --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/internet", {
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/internet');
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/internet')
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/internet",
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 all available data plans. Use the product_code from each plan when making a purchase.
{
"status": true,
"message": "Products retrieved successfully",
"data": {
"billers": {
"10bba835-5385-4c3a-8f2b-123456789abc": {
"name": "MTN NIGERIA",
"id": "10bba835-5385-4c3a-8f2b-123456789abc",
"description": "Internet Data",
"icon": "https://cdn.mysite.local/assets/icon/internet/mtn-cf1c5524-d1d9-4ee2-ad01-3f711d5bdf41.png",
"products": {
"gif": {
"name": "GIFTING",
"id": "10bba851-8991-4c3a-8f2b-123456789abc",
"description": "This is a test product type",
"icon": null,
"api_access": true,
"items": [
{
"id": "10bbeba9-8d9f-4692-819b-db093ece6af9",
"name": "10GB",
"bundle_size_mb": 10000,
"amount": "1000",
"currency": "NGN",
"validity": "30DAYS",
"description": "This is a test product plan",
"product_code": "smb_mtn_test_0001",
"image": null
}
]
}
}
},
"20bba835-5385-4c3a-8f2b-123456789abc": {
"name": "AIRTEL NIGERIA",
"id": "20bba835-5385-4c3a-8f2b-123456789abc",
"description": "Internet Data",
"icon": "https://cdn.mysite.local/assets/icon/internet/airtel-cf1c5524-d1d9-4ee2-ad01-3f711d5bdf41.png",
"products": {
"gif": {
"name": "GIFTING",
"id": "20bba851-8991-4c3a-8f2b-123456789abc",
"description": "This is a test product type",
"icon": null,
"api_access": true,
"items": [
{
"id": "20bbeba9-8d9f-4692-819b-db093ece6af9",
"name": "10GB",
"bundle_size_mb": 10000,
"amount": "1000",
"currency": "NGN",
"validity": "30DAYS",
"description": "This is a test product plan",
"product_code": "smb_air_test_0001",
"image": null
}
]
}
}
}
}
},
"metadata": {
"code": "PRODUCTS_RETRIEVED",
"timestamp": 1790805221,
"trace_id": "97FDCDD814"
}
}
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[].bundle_size_mb
|
number | Data bundle size in megabytes; 10000 means 10GB in this example. |
data.billers.{biller_id}.products.{product_type}.items[].amount
|
string | Price of this data bundle in the indicated currency, returned as a numeric string. The example price is NGN 1000. |
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[].validity
|
string | Validity period of the data bundle; 30DAYS means 30 days. |
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. |
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.