Click Airtime

Transactions

Search and retrieve transaction history from the Click Airtime V1 API using GET /adp/transactions.

Version 1 API (v1.4) — This API is in maintenance mode. New integrations should use the Version 2 API which provides paginated transaction lists, filtering, and detailed status tracking.

GET /adp/transactions

Retrieve details of an airtime transaction. This endpoint allows you to fetch information related to a specific airtime transaction, providing insights into the transaction's status and other relevant details.

Request

GET https://api.clickairtime.com/adp/transactions
X-Click-Airtime-Email: your@email.com
X-Click-Airtime-Token: your-api-token

Query Parameters

ParameterTypeRequiredDescription
transaction_IdstringNoFilter by Click Airtime transaction ID (UUID)
msisdnstringNoFilter by recipient phone number (e.g., 265996139030)
extRefIdstringNoFilter by your external reference ID

At least one query parameter (transaction_Id, msisdn, or extRefId) must be provided. If multiple are specified, results are filtered by all criteria (AND logic). Parameters are passed as GET URL parameters.

Code Examples

Search by Phone Number

curl -X GET "https://api.clickairtime.com/adp/transactions?msisdn=265996139030" \
  -H "X-Click-Airtime-Email: your@email.com" \
  -H "X-Click-Airtime-Token: your-api-token"
const params = new URLSearchParams({ msisdn: '265996139030' });

const response = await fetch(
  `https://api.clickairtime.com/adp/transactions?${params}`,
  {
    headers: {
      'X-Click-Airtime-Email': 'your@email.com',
      'X-Click-Airtime-Token': 'your-api-token',
    },
  }
);

const { data } = await response.json();
data.forEach(txn => {
  console.log(`${txn.transactionId}: ${txn.amount} ${txn.currency} → ${txn.msisdn} [${txn.state}]`);
});
import requests

response = requests.get(
    'https://api.clickairtime.com/adp/transactions',
    params={'msisdn': '265996139030'},
    headers={
        'X-Click-Airtime-Email': 'your@email.com',
        'X-Click-Airtime-Token': 'your-api-token',
    }
)

data = response.json()['data']
for txn in data:
    print(f"{txn['transactionId']}: {txn['amount']} {txn['currency']}{txn['msisdn']} [{txn['state']}]")
$response = Http::withHeaders([
    'X-Click-Airtime-Email' => 'your@email.com',
    'X-Click-Airtime-Token' => 'your-api-token',
])->get('https://api.clickairtime.com/adp/transactions', [
    'msisdn' => '265996139030',
]);

$data = $response->json()['data'];

foreach ($data as $txn) {
    echo "{$txn['transactionId']}: {$txn['amount']} {$txn['currency']} → {$txn['msisdn']} [{$txn['state']}]\n";
}
HttpResponse<String> response = Unirest
    .get("https://api.clickairtime.com/adp/transactions")
    .queryString("msisdn", "265996139030")
    .header("X-Click-Airtime-Email", "your@email.com")
    .header("X-Click-Airtime-Token", "your-api-token")
    .asString();

JSONObject result = new JSONObject(response.getBody());
JSONArray data = result.getJSONArray("data");

for (int i = 0; i < data.length(); i++) {
    JSONObject txn = data.getJSONObject(i);
    System.out.println(
        txn.getString("transactionId") + ": " +
        txn.getDouble("amount") + " " +
        txn.getString("currency") + " → " +
        txn.getString("msisdn") + " [" +
        txn.getString("state") + "]"
    );
}

Search by External Reference ID

curl -X GET "https://api.clickairtime.com/adp/transactions?extRefId=HWI-199S-100" \
  -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/transactions?extRefId=HWI-199S-100',
  {
    headers: {
      'X-Click-Airtime-Email': 'your@email.com',
      'X-Click-Airtime-Token': 'your-api-token',
    },
  }
);

const { data } = await response.json();
console.log('Transaction:', data[0]);
response = requests.get(
    'https://api.clickairtime.com/adp/transactions',
    params={'extRefId': 'HWI-199S-100'},
    headers={
        'X-Click-Airtime-Email': 'your@email.com',
        'X-Click-Airtime-Token': 'your-api-token',
    }
)

data = response.json()['data']
print(f"Transaction: {data[0]}")

Response (200)

{
  "message": "Success",
  "statusCode": 200,
  "data": [
    {
      "transactionId": "f661f75a-c249-4aef-8cf3-abcdef123456",
      "status": true,
      "msisdn": "265996139030",
      "network": "NetOne",
      "country": "Zimbabwe",
      "amount": 100,
      "TopupAmount": 100,
      "effectiveAmount": 100.00,
      "currency": "ZWL",
      "extRefId": "DS2345",
      "accountId": "1dedb34-434ff-555x-ed5434fa",
      "state": "SUCCESS",
      "provider": {
        "transaction_id": "EXT-12345",
        "reference_code": "REF-67890"
      }
    }
  ]
}

Response Fields

FieldTypeDescription
transactionIdstringUnique Click Airtime transaction identifier (UUID)
statusbooleantrue if the top-up was delivered successfully, false otherwise
msisdnstringRecipient phone number
networkstringMobile network operator name
countrystringDestination country name
amountnumberAmount delivered in destination currency
TopupAmountnumberSame as amount (backward compatibility alias)
effectiveAmountnumberAmount deducted from your account balance (after rate conversion)
currencystringDestination currency code (e.g., ZWL, MWK)
extRefIdstringYour external reference ID
accountIdstringService account UUID used for this transaction
statestringTransaction state: SUCCESS, FAILED, or PENDING
provider.transaction_idstringProvider's transaction ID
provider.reference_codestringProvider's reference code

Transaction Statuses

The transaction response includes two status indicators:

FieldTypeValuesDescription
statusbooleantrue / falseLegacy field — true if airtime was delivered, false otherwise
statestringSUCCESS, FAILED, PENDINGDescriptive state of the transaction

Error Responses

HTTP StatusDescription
400Missing required query parameter (transaction_Id, msisdn, or extRefId)
401Invalid or missing authentication credentials
404No transactions found matching the criteria