Click Airtime

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

FieldTypeDescription
serviceIdnumberUnique identifier for the service — use this to query products
providerNamestringName 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

ParameterTypeRequiredDescription
serviceIdnumberYesThe 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

FieldTypeDescription
productIdnumberProduct identifier — use this in the top-up request
amountnumber or nullFixed amount for FIXED_PRODUCT, null for OPEN_PRODUCT
product_namestringHuman-readable product name
servicestringService name
provider_namestringProvider/network name
product_typestringFIXED_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

ParameterTypeRequiredDescription
idnumberYesThe 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 StatusDescription
401Invalid or missing authentication credentials
404Product ID not found