Airtel Money Through Paystack in Kenya
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.
Why Airtel Money Matters in Kenya
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.
What Paystack Currently Supports for Airtel Money
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:
- You call the Charge API with the customer's phone number and specify the provider as airtel.
- Paystack sends a USSD prompt to the customer's Airtel line.
- The customer enters their Airtel Money PIN to authorize the payment.
- Paystack sends a
charge.successorcharge.failedwebhook 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.
Where Airtel Money and M-Pesa Support May Differ
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:
- USSD push reliability. The M-Pesa STK push is a well-established protocol that Safaricom has refined over years. Airtel's USSD push mechanism is functional but may behave differently in edge cases: slower delivery, different timeout windows, or different error codes.
- Transaction limits. Airtel Money has its own per-transaction and daily limits, which are different from M-Pesa limits. These limits may also differ from what Paystack allows per transaction.
- Webhook timing. The speed at which Paystack receives confirmation from Airtel can differ from M-Pesa. Your timeout handling may need adjustment.
- Testing environment. The Paystack sandbox may simulate M-Pesa more thoroughly than Airtel Money. Test both in production (with small amounts) before launching to real users.
- Transfers out. Paystack Transfers to M-Pesa wallets are well-documented. Whether Paystack supports transfers to Airtel Money wallets with the same ease is something you need to verify with their current documentation and support team.
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.
Testing the Airtel Money Flow
Before you launch Airtel Money in production, test it thoroughly. Here is a practical testing checklist:
- Sandbox test. Use your Paystack test key to simulate an Airtel Money charge. Check that the API accepts the request and returns the expected response structure.
- Production test with small amounts. Sandbox simulations do not always reflect real Airtel infrastructure behavior. Use a real Airtel line and charge KES 10 or KES 50 to verify the USSD push arrives, the PIN entry works, and the webhook fires correctly.
- Timeout test. Initiate a charge and do not complete it on the phone. Observe how long until the charge times out and what webhook event you receive. Compare this with M-Pesa timeout behavior.
- Wrong PIN test. Enter the wrong PIN on the USSD prompt. Verify that you receive a failure webhook and that the error reason is clear.
- Insufficient balance test. Try to charge more than the Airtel Money balance. Verify the failure handling.
- Phone number format. Test with different Airtel number formats:
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.
Alternative Providers for Airtel Money
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.
The Hybrid Approach: Paystack Plus a Secondary Provider
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:
- Two sets of credentials and API contracts. You maintain integrations with two providers, each with their own dashboard, webhook formats, and quirks.
- Unified reconciliation. Your accounting needs to reconcile payments from two sources. Build a common payment record format in your database that normalizes data from both providers.
- Two webhook endpoints. Each provider sends webhooks in its own format. You need separate handlers that both funnel into the same order fulfillment logic.
// 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.
Detecting the Customer Carrier from Their Phone Number
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:
- Safaricom (M-Pesa): 070x, 071x, 072x, 074x, 075x, 076x, 079x, 010x, 011x
- Airtel: 073x, 078x, 010x (some ranges)
- Telkom (T-Kash): 077x
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:
- Number portability. Kenya allows mobile number portability (MNP). A number that starts with 0733 (Airtel prefix) might have been ported to Safaricom. Prefix-based detection is a useful heuristic, not a guarantee.
- Let the customer choose. Even if you detect the carrier, always let the customer select their preferred payment method. They might have money on a different line or prefer to pay with a different method entirely.
- Prefix allocations change. The Communications Authority of Kenya periodically reallocates number ranges. Keep your prefix mapping updated.
Checkout UX: Presenting Airtel Money as an Option
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:
- Use "Airtel Money" as the label, not "Mobile Money" generically. Customers identify with their carrier brand.
- If you accept both M-Pesa and Airtel Money, show them as separate options with their respective logos. "Mobile Money" as a catch-all label creates confusion.
- Place mobile money options above card options. Most Kenyan customers will pay with mobile money. See Why Kenyan Checkout Conversion Depends on Mobile Money Placement for the data behind this recommendation.
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.
Looking Ahead: Airtel Money in Kenya
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.
Key Takeaways
- ✓Paystack lists Airtel Money as a supported mobile money channel in Kenya. The customer gets a USSD prompt on their phone to authorize the payment, similar to the M-Pesa STK push flow.
- ✓Feature availability for Airtel Money on Paystack may not match M-Pesa exactly. M-Pesa is the dominant mobile money platform in Kenya, and most payment providers optimize for it first.
- ✓Airtel Money has a significant user base in western Kenya, Nyanza, and rural areas where Airtel network coverage competes with or exceeds Safaricom. Ignoring these users means losing sales.
- ✓If Paystack does not fully cover your Airtel Money needs, providers like IntaSend, Flutterwave, and Africa is Talking offer Airtel Money integration in Kenya.
- ✓A hybrid approach (Paystack for M-Pesa, cards, and Pesalink plus a secondary provider for Airtel Money) is a legitimate pattern used by businesses that need full mobile money coverage.
- ✓Always test the actual Airtel Money flow in Paystack sandbox and production before committing. API documentation and real behavior can differ.
Frequently Asked Questions
- Does Paystack support Airtel Money STK push in Kenya?
- Paystack lists Airtel Money as a supported mobile money channel in Kenya. The flow uses a USSD prompt similar to M-Pesa STK push. However, the exact behavior and reliability may differ from M-Pesa. Test the flow in sandbox and production with a real Airtel line before going live.
- What percentage of Kenyan mobile money users use Airtel Money?
- Safaricom M-Pesa dominates the Kenyan mobile money market with the majority share. Airtel Money holds the second-largest share. Exact percentages change over time as both networks grow. In some western Kenya counties, Airtel has a significantly higher share than the national average. For any business targeting a national audience, Airtel Money users represent a meaningful revenue opportunity.
- Can I send Paystack Transfers to Airtel Money wallets?
- Paystack Transfers support sending to M-Pesa wallets in Kenya. Whether the same Transfer recipient type works for Airtel Money wallets may depend on current Paystack support. Check the Paystack documentation for the latest on supported transfer recipient types for Airtel Money, or contact their support team.
- Should I build Airtel Money support if my app only serves Nairobi?
- Even in Nairobi, a meaningful number of residents use Airtel Money, particularly in lower-income areas and among dual-SIM users. The cost of adding Airtel Money (especially if Paystack handles it natively) is low compared to the revenue you lose by turning away paying customers. If you are building a custom integration through a secondary provider, the cost-benefit depends on your transaction volume and user demographics.
- What about Telkom T-Kash on Paystack?
- Telkom Kenya T-Kash has a much smaller market share than M-Pesa and Airtel Money. Paystack support for T-Kash may be limited or unavailable. Check the current Paystack documentation. For most businesses, M-Pesa plus Airtel Money covers the vast majority of mobile money users in Kenya.
Ready to build real-world apps?
Join the McTaba Labs full-stack marathon (4 months full-time · 6 months part-time). Learn M-Pesa, USSD, and WhatsApp engineering while shipping 8 production apps.
Apply to the McTaba Marathon