Paystack supports Airtel Money as a mobile money payment channel in Kenya. The integration works through the same Charge API used for M-Pesa, with the provider set to airtel. However, availability and feature parity with M-Pesa can vary. For businesses that need comprehensive Airtel Money support, a hybrid approach using Paystack alongside a provider with deeper Airtel integration may be necessary.
M-Pesa dominates the Kenyan mobile money market. This is not news. But treating Kenya as a single-carrier market is a mistake that costs businesses real money.
Airtel Money serves millions of Kenyans. In some regions, particularly western Kenya, Nyanza, and parts of the Coast and North Eastern provinces, Airtel has a competitive or even dominant presence. Customers in these areas may use Airtel Money as their primary financial tool. If your checkout only accepts M-Pesa, you are telling these customers to go somewhere else.
The numbers back this up. Airtel Kenya is the second-largest mobile operator in the country. A meaningful percentage of mobile money transactions in Kenya go through Airtel Money. For businesses targeting a national audience, especially those serving rural and peri-urban customers, Airtel Money support is not a nice-to-have. It is table stakes.
There is also the dual-SIM factor. Many Kenyans carry two phones or a dual-SIM device, one for Safaricom and one for Airtel. They may have money on their Airtel line when their M-Pesa balance is low. Giving them the option to pay with either means fewer abandoned checkouts.
Paystack lists Airtel Money as a supported mobile money channel in Kenya alongside M-Pesa. In the Kenya pillar article, we covered that Paystack accepts six payment methods in Kenya: M-Pesa, Airtel Money, Visa/Mastercard, Apple Pay, Pesalink, and bank transfers.
The Airtel Money flow through Paystack works conceptually the same as M-Pesa:
charge.success or charge.failed webhook to your server.// Charge an Airtel Money customer via Paystack
const chargeAirtelMoney = async (phone, amountKes, email) => {
const response = await fetch('https://api.paystack.co/charge', {
method: 'POST',
headers: {
Authorization: 'Bearer sk_live_YOUR_SECRET_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: email,
amount: amountKes * 100,
currency: 'KES',
mobile_money: {
phone: phone,
provider: 'airtel',
},
}),
});
return response.json();
};
// Charge KES 1,000 to an Airtel Money customer
const result = await chargeAirtelMoney('0733456789', 1000, 'customer@example.com');
That is the code. It is nearly identical to the M-Pesa charge, with provider: 'airtel' instead of provider: 'mpesa'.
However, there are practical considerations. Read the next sections before assuming everything works the same.
Get weekly developer tips
Join 25,000+ developers. Practical guides, job tips, and new content — straight to your inbox.
No spam. Unsubscribe anytime.
Payment providers in Kenya optimize for M-Pesa first. It is the largest market. This means Airtel Money support, while listed as available, may lag behind M-Pesa in several ways:
None of this means Airtel Money on Paystack is broken. It means you should test the actual flow, not assume it works identically to M-Pesa based on the API structure alone.
Before you launch Airtel Money in production, test it thoroughly. Here is a practical testing checklist:
0733, 0738, 254733. Confirm which format Paystack expects for Airtel numbers.Document what you find. If something does not work as expected, you have the information you need to decide whether to use Paystack alone or bring in a secondary provider.
If Paystack does not fully meet your Airtel Money needs, several other providers support it in Kenya:
IntaSend. A Kenyan payment gateway that supports both M-Pesa and Airtel Money for collections and payouts. IntaSend is popular with Kenyan startups and has good documentation for mobile money integration. Worth evaluating if Airtel Money is a primary use case for you.
Flutterwave. The Nigeria-headquartered gateway that operates in Kenya. Flutterwave supports Airtel Money as a mobile money channel alongside M-Pesa, cards, and other methods. They have a large developer community and extensive documentation.
Africa's Talking. A developer-focused platform that provides direct mobile money APIs for multiple carriers, including Airtel. Africa's Talking gives you low-level access to the mobile money infrastructure, which is useful if you need fine-grained control.
PesaPal. A Kenyan payment aggregator that supports multiple payment methods including Airtel Money. PesaPal has been in the market for years and has established relationships with telcos and banks in East Africa.
Each of these has its own pricing, API design, and support quality. For a detailed comparison, see Choosing Between Paystack, IntaSend, PesaPal, and Flutterwave in Kenya.
If Paystack covers M-Pesa, cards, Pesalink, and Apple Pay well but you need stronger Airtel Money support, the hybrid approach works. You use Paystack as your primary payment provider and route Airtel Money transactions through a secondary provider.
Here is how to structure it:
// Payment router: choose provider based on payment method
const processPayment = async (paymentMethod, phone, amountKes, email) => {
if (paymentMethod === 'mpesa') {
// Route to Paystack
return await chargeViaPaysack({
provider: 'mpesa',
phone,
amount: amountKes * 100,
email,
});
}
if (paymentMethod === 'airtel_money') {
// Route to secondary provider (e.g., IntaSend, Africa's Talking)
return await chargeViaSecondaryProvider({
carrier: 'airtel',
phone,
amount: amountKes,
});
}
if (paymentMethod === 'card' || paymentMethod === 'pesalink') {
// Route to Paystack
return await initializePaystackTransaction({
channels: [paymentMethod === 'card' ? 'card' : 'bank_transfer'],
amount: amountKes * 100,
email,
});
}
};
The hybrid approach adds complexity in three areas:
// Unified payment record
const savePayment = async (source, data) => {
await db.payments.create({
provider: source, // 'paystack' or 'intasend'
externalReference: data.reference,
method: data.paymentMethod, // 'mpesa', 'airtel_money', 'card', etc.
amountKes: data.amount,
status: data.status,
customerPhone: data.phone,
customerEmail: data.email,
rawPayload: JSON.stringify(data.raw),
createdAt: new Date(),
});
};
This pattern works. Several Kenyan companies use it in production. The extra code and operational overhead are the price of reaching customers that a single provider cannot serve alone. For the broader discussion of running multiple payment providers, see Running Paystack and Daraja Side by Side and Building an M-Pesa Fallback When Paystack Is Unavailable.
If you want to automatically route payments based on the customer's mobile carrier, you can infer it from their phone number prefix. Kenyan mobile number prefixes map to carriers:
const detectCarrier = (phone) => {
// Normalize to local format
const normalized = phone.replace(/^\+?254/, '0').replace(/\s/g, '');
const prefix = normalized.substring(0, 4);
const airtelPrefixes = ['0733', '0738', '0780', '0781', '0782', '0783',
'0784', '0785', '0786', '0787', '0788', '0789'];
const telkomPrefixes = ['0770', '0771', '0772', '0773', '0774', '0775',
'0776', '0777', '0778', '0779'];
if (airtelPrefixes.includes(prefix)) return 'airtel';
if (telkomPrefixes.includes(prefix)) return 'telkom';
return 'safaricom'; // Default to Safaricom for other prefixes
};
// Auto-route based on phone number
const phone = '0733456789';
const carrier = detectCarrier(phone);
if (carrier === 'airtel') {
// Show Airtel Money option prominently, or route to Airtel-capable provider
} else if (carrier === 'safaricom') {
// Show M-Pesa option, route through Paystack
}
A few warnings about carrier detection:
If you use Paystack Checkout (the popup or redirect), Paystack handles the payment method presentation for you. The customer sees the available options and picks one.
If you build a custom checkout, you need to present Airtel Money explicitly. Do not bury it. A customer with an Airtel line will scan the payment options looking for "Airtel Money." If they only see "M-Pesa" and "Card," they will assume they cannot pay and leave.
Effective labeling:
If you are using the hybrid approach (Paystack for M-Pesa, secondary provider for Airtel Money), your custom checkout is the place where you handle the routing. The customer picks "Airtel Money," your frontend sends the request to your server, and your server routes it to the appropriate provider. The customer does not need to know about your backend architecture.
The Kenyan mobile money landscape is evolving. Airtel Money continues to grow its user base, particularly in regions where it has strong network coverage. The interoperability between M-Pesa and Airtel Money (wallet-to-wallet transfers) has improved over the years, which makes both networks more valuable.
For payment providers like Paystack, Airtel Money support in Kenya will likely deepen over time. Paystack is backed by Stripe, and Stripe's approach is to support every payment method that matters in each market. As Airtel Money volumes grow, the integration will mature.
As a developer, your job is to build systems that can handle multiple payment methods today and adapt as the landscape shifts. Abstract your payment logic behind a clean interface. Do not hard-code assumptions about which provider or carrier is available. The code example in the hybrid approach section shows this pattern.
The Paystack in Kenya: What It Supports and What It Does Not article is updated as Paystack adds or changes features. Check it periodically for the latest on Airtel Money and other payment method support.
KES 2,999
The definitive guide to building payment systems with Paystack — from your first transaction to production-grade payment infrastructure across Africa. 9 modules, 47 lessons. Free preview available.
Start Paystack Course