Click Airtime

Network Products

List available products, exchange rates, and bundles for a specific network.

Network Products

Retrieve the full product catalog for a specific network, including exchange rates, custom airtime limits, and fixed bundles. This is useful when you already know the network and want to browse available products without performing a phone number lookup.

GET /v2/catalog/products

Permission required: airtime.read

Query Parameters

ParameterTypeRequiredDescription
network_idintegerYesNetwork ID from /v2/catalog/networks or /v2/catalog/countries

Example Request

curl -X GET "https://api.clickairtime.com/v2/catalog/products?network_id=22" \
  -H "Authorization: Bearer ce_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
const response = await fetch(
  'https://api.clickairtime.com/v2/catalog/products?network_id=22',
  {
    headers: {
      'Authorization': 'Bearer ce_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    },
  }
);
const data = await response.json();
import requests

response = requests.get(
    'https://api.clickairtime.com/v2/catalog/products',
    params={'network_id': 22},
    headers={
        'Authorization': 'Bearer ce_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    }
)
data = response.json()
$ch = curl_init('https://api.clickairtime.com/v2/catalog/products?network_id=22');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ce_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = json_decode(curl_exec($ch));

Example Response

{
  "success": true,
  "data": {
    "network": {
      "id": 22,
      "name": "MTN Ghana",
      "country": "Ghana",
      "country_code": "GH",
      "currency": "GHS"
    },
    "exchange_rate": {
      "source_currency": "USD",
      "destination_currency": "GHS",
      "rate": 12.35
    },
    "products": {
      "custom_airtime": {
        "available": true,
        "min_amount_local": 1,
        "max_amount_local": 5000,
        "local_currency": "GHS"
      },
      "fixed_bundles": [
        {
          "id": 101,
          "name": "500MB Data - 30 Days",
          "type": "DATA",
          "price_usd": 2.50,
          "local_value": "500MB Data - 30 Days",
          "local_currency": "GHS",
          "description": "500MB Data - 30 Days"
        },
        {
          "id": 102,
          "name": "1GB Data - 30 Days",
          "type": "DATA",
          "price_usd": 4.00,
          "local_value": "1GB Data - 30 Days",
          "local_currency": "GHS",
          "description": "1GB Data - 30 Days"
        },
        {
          "id": 201,
          "name": "GHS 5 Airtime",
          "type": "AIRTIME",
          "price_usd": 0.45,
          "local_value": "5.00",
          "local_currency": "GHS",
          "description": "GHS 5 Airtime Top-Up"
        }
      ]
    },
    "sms_notification": {
      "available": true,
      "cost_usd": 0.10
    }
  },
  "meta": {
    "request_id": "req_p1r2o3d4u5c6",
    "timestamp": "2024-01-15T10:30:00.000Z"
  }
}

Response Fields

FieldTypeDescription
networkobjectNetwork information
network.idintegerNetwork ID
network.namestringNetwork operator name
network.countrystringCountry name
network.country_codestringISO 2-letter country code
network.currencystringLocal currency code
exchange_rateobject | nullCurrent exchange rate (null if unavailable)
exchange_rate.source_currencystringYour wallet currency
exchange_rate.destination_currencystringLocal currency
exchange_rate.ratenumberExchange rate multiplier
products.custom_airtimeobjectCustom amount airtime options
products.custom_airtime.availablebooleanWhether custom amounts are supported
products.custom_airtime.min_amount_localnumberMinimum amount in local currency
products.custom_airtime.max_amount_localnumberMaximum amount in local currency
products.fixed_bundlesarrayPre-defined data/airtime bundles
products.fixed_bundles[].idintegerProduct ID (use in POST /v2/topups)
products.fixed_bundles[].namestringProduct name
products.fixed_bundles[].typestringAIRTIME or DATA
products.fixed_bundles[].price_usdnumberCost in USD
sms_notificationobjectSMS notification options and pricing

This endpoint returns the same product data as Catalog Lookup, but without requiring a phone number. Use it to build product selection UIs before a phone number is entered.