Products
Browse available airtime products and service catalogs using the Click Airtime V1 API.
Version 1 API (v1.4) — This API is in maintenance mode. New integrations should use the Version 2 API which provides a richer catalog with bundle support and detailed product metadata.
The product catalog endpoints allow you to discover available airtime products before sending a top-up.
GET /adp/product-catalog
List all available service catalogs. Returns the services that have products configured for your account.
Request
GET https://api.clickairtime.com/adp/product-catalog
X-Click-Airtime-Email: your@email.com
X-Click-Airtime-Token: your-api-token
Code Examples
curl -X GET https://api.clickairtime.com/adp/product-catalog \
-H "X-Click-Airtime-Email: your@email.com" \
-H "X-Click-Airtime-Token: your-api-token"const response = await fetch('https://api.clickairtime.com/adp/product-catalog', {
headers: {
'X-Click-Airtime-Email': 'your@email.com',
'X-Click-Airtime-Token': 'your-api-token',
},
});
const { data } = await response.json();
data.forEach(service => {
console.log(`${service.providerName} (ID: ${service.serviceId})`);
});import requests
response = requests.get(
'https://api.clickairtime.com/adp/product-catalog',
headers={
'X-Click-Airtime-Email': 'your@email.com',
'X-Click-Airtime-Token': 'your-api-token',
}
)
data = response.json()['data']
for service in data:
print(f"{service['providerName']} (ID: {service['serviceId']})")Response (200)
{
"message": "success",
"statusCode": 200,
"code": 1,
"data": [
{
"serviceId": 12,
"providerName": "MTN_Ghana"
},
{
"serviceId": 15,
"providerName": "Airtel_Malawi"
},
{
"serviceId": 18,
"providerName": "Vodafone_Ghana"
}
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
serviceId | number | Unique identifier for the service — use this to query products |
providerName | string | Name of the mobile network operator |
GET /adp/products
List all products available for a specific service. Use the serviceId from the product catalog response.
Request
GET https://api.clickairtime.com/adp/products?serviceId=12
X-Click-Airtime-Email: your@email.com
X-Click-Airtime-Token: your-api-token
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
serviceId | number | Yes | The service ID from /adp/product-catalog |
Code Examples
curl -X GET "https://api.clickairtime.com/adp/products?serviceId=12" \
-H "X-Click-Airtime-Email: your@email.com" \
-H "X-Click-Airtime-Token: your-api-token"const response = await fetch(
'https://api.clickairtime.com/adp/products?serviceId=12',
{
headers: {
'X-Click-Airtime-Email': 'your@email.com',
'X-Click-Airtime-Token': 'your-api-token',
},
}
);
const { data } = await response.json();
data.forEach(product => {
console.log(`[${product.productId}] ${product.product_name} - ${product.product_type} (${product.amount})`);
});import requests
response = requests.get(
'https://api.clickairtime.com/adp/products',
params={'serviceId': 12},
headers={
'X-Click-Airtime-Email': 'your@email.com',
'X-Click-Airtime-Token': 'your-api-token',
}
)
data = response.json()['data']
for product in data:
print(f"[{product['productId']}] {product['product_name']} - {product['product_type']} ({product['amount']})")Response (200)
{
"message": "success",
"statusCode": 200,
"code": 1,
"data": [
{
"productId": 42,
"amount": 5.00,
"product_name": "MTN Ghana GHS 5",
"service": "MTN_Ghana",
"provider_name": "MTN_Ghana",
"product_type": "FIXED_PRODUCT"
},
{
"productId": 43,
"amount": 10.00,
"product_name": "MTN Ghana GHS 10",
"service": "MTN_Ghana",
"provider_name": "MTN_Ghana",
"product_type": "FIXED_PRODUCT"
},
{
"productId": 50,
"amount": null,
"product_name": "MTN Ghana Open Range",
"service": "MTN_Ghana",
"provider_name": "MTN_Ghana",
"product_type": "OPEN_PRODUCT"
}
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
productId | number | Product identifier — use this in the top-up request |
amount | number or null | Fixed amount for FIXED_PRODUCT, null for OPEN_PRODUCT |
product_name | string | Human-readable product name |
service | string | Service name |
provider_name | string | Provider/network name |
product_type | string | FIXED_PRODUCT or OPEN_PRODUCT |
GET /adp/products/:id
Retrieve details for a single product by its ID.
Request
GET https://api.clickairtime.com/adp/products/:id
X-Click-Airtime-Email: your@email.com
X-Click-Airtime-Token: your-api-token
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Yes | The product ID to retrieve |
Code Examples
curl -X GET https://api.clickairtime.com/adp/products/42 \
-H "X-Click-Airtime-Email: your@email.com" \
-H "X-Click-Airtime-Token: your-api-token"const productId = 42;
const response = await fetch(
`https://api.clickairtime.com/adp/products/${productId}`,
{
headers: {
'X-Click-Airtime-Email': 'your@email.com',
'X-Click-Airtime-Token': 'your-api-token',
},
}
);
const { data } = await response.json();
console.log(`${data.product_name}: ${data.amount} (${data.product_type})`);import requests
product_id = 42
response = requests.get(
f'https://api.clickairtime.com/adp/products/{product_id}',
headers={
'X-Click-Airtime-Email': 'your@email.com',
'X-Click-Airtime-Token': 'your-api-token',
}
)
data = response.json()['data']
print(f"{data['product_name']}: {data['amount']} ({data['product_type']})")Response (200)
{
"message": "success",
"statusCode": 200,
"code": 1,
"data": {
"productId": 42,
"amount": 5.00,
"product_name": "MTN Ghana GHS 5",
"service": "MTN_Ghana",
"provider_name": "MTN_Ghana",
"product_type": "FIXED_PRODUCT"
}
}
Error Responses
| HTTP Status | Description |
|---|---|
| 401 | Invalid or missing authentication credentials |
| 404 | Product ID not found |
