Payment Methods Available on Paystack in Kenya
Paystack in Kenya supports mobile money (including M-Pesa), card payments (Visa, Mastercard), and bank transfers. Mobile money is the highest-converting channel for consumer-facing products. Cards serve business customers and higher-value purchases. You can restrict channels using the channels parameter when initializing transactions.
Available Channels in Kenya
Paystack in Kenya gives you three payment channel categories. Each serves a different customer segment and has different engineering characteristics.
- Mobile Money: M-Pesa and other mobile money providers. The customer enters their phone number and authorizes via STK push. This is the primary channel for consumer payments in Kenya.
- Cards: Visa and Mastercard debit and credit cards. The customer enters card details and completes 3D Secure verification. Used by a smaller but valuable customer segment.
- Bank Transfer: Direct bank-to-bank transfer. The customer transfers from their bank account to a generated account number or reference.
To specify channels when initializing a transaction:
var response = await fetch('https://api.paystack.co/transaction/initialize', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + process.env.PAYSTACK_SECRET_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: 'customer@example.co.ke',
amount: 300000, // 3,000 KES in cents
currency: 'KES',
channels: ['mobile_money', 'card', 'bank_transfer'],
reference: 'ke_' + Date.now(),
}),
});
If you omit the channels parameter, Paystack shows all available channels for your market.
Mobile Money: M-Pesa and Beyond
Mobile money is the most important channel in Kenya. M-Pesa alone processes the vast majority of digital payments in the country. When you offer mobile money through Paystack, you are tapping into the payment method that most Kenyans use daily.
How the STK push flow works:
- The customer selects "Mobile Money" at the Paystack checkout
- They enter their phone number (e.g., 0712345678 or +254712345678)
- Paystack triggers an STK push to their phone
- A popup appears on the customer's phone asking them to enter their M-Pesa PIN
- The customer enters their PIN and the payment is authorized
- Paystack sends a
charge.successwebhook to your server
Phone number handling:
// Normalize Kenyan phone numbers for Paystack
function normalizeKenyanPhone(phone) {
// Remove spaces, dashes, and brackets
var cleaned = phone.replace(/[s-()]/g, '');
// Convert 07XX to +2547XX
if (cleaned.indexOf('07') === 0 || cleaned.indexOf('01') === 0) {
return '+254' + cleaned.substring(1);
}
// Already has country code
if (cleaned.indexOf('+254') === 0) {
return cleaned;
}
if (cleaned.indexOf('254') === 0) {
return '+' + cleaned;
}
return cleaned;
}
Conversion characteristics:
- Mobile money has the highest conversion rate in Kenya because it does not require card details or banking credentials
- The STK push is familiar to every M-Pesa user, reducing friction
- Failed STK pushes are common when the phone is off, out of network, or the customer does not respond in time
- Provide a retry option and a way to switch to an alternative channel if the STK push fails
Card Payments in Kenya
Card payments in Kenya work for Visa and Mastercard holders. Card penetration is lower than in South Africa or Nigeria, but the segment is growing, especially among urban professionals, tech workers, and businesses.
Card flow:
- Customer selects "Card" at checkout
- They enter their card number, expiry date, and CVV
- 3D Secure verification: the customer receives an OTP from their bank or approves via their banking app
- Payment is authorized and Paystack sends a webhook
When cards work well in Kenya:
- Recurring payments (subscriptions, memberships) where authorization can be reused
- B2B transactions where businesses pay with corporate cards
- International customers buying from a Kenyan merchant
- Higher-value transactions where the customer prefers the security of card payments
Card-specific engineering considerations:
- Kenyan banks may have lower card limits for online transactions. Customers might need to increase their online transaction limit with their bank before purchasing
- OTP delivery can be delayed on some networks. Your checkout should not time out during the 3DS step
- For recurring billing, store the authorization from the first successful charge and reuse it for subsequent charges
// Reuse a stored card authorization for recurring billing
var response = await fetch('https://api.paystack.co/transaction/charge_authorization', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + process.env.PAYSTACK_SECRET_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
authorization_code: storedAuthCode,
email: customerEmail,
amount: 500000, // 5,000 KES
currency: 'KES',
reference: 'recurring_' + Date.now(),
}),
});
Bank Transfers in Kenya
Bank transfers allow customers to pay by transferring directly from their bank account. This channel is less common for consumer purchases in Kenya (where M-Pesa dominates) but useful for specific scenarios.
When to offer bank transfers:
- B2B payments where bank-to-bank transfers are the standard
- Higher-value transactions where the customer prefers direct bank transfers
- Customers who want to pay from their bank account rather than M-Pesa or card
How it works:
- Customer selects bank transfer at checkout
- Paystack generates transfer details (account number, reference)
- Customer completes the transfer from their banking app or internet banking
- Payment is confirmed and Paystack sends a webhook
Bank transfers are asynchronous. The customer needs to switch to their banking app to complete the transfer. This adds steps to the flow but is familiar for business transactions.
Choosing the Right Channel Mix
Your channel strategy in Kenya should be driven by your customer base. Here are common patterns:
Consumer e-commerce (B2C):
- Primary: Mobile money (M-Pesa)
- Secondary: Cards
- Rationale: Most Kenyan consumers prefer M-Pesa. Offering cards as a secondary option captures the card-using segment without complicating the checkout.
SaaS / subscriptions:
- Primary: Cards (for authorization reuse on recurring charges)
- Secondary: Mobile money
- Rationale: Card authorizations can be reused for future charges without the customer re-authorizing each time. Mobile money requires customer authorization for each charge.
B2B / invoicing:
- Primary: Bank transfer
- Secondary: Cards
- Rationale: Businesses prefer bank transfers for accounting and audit trail purposes.
Marketplace (mixed audience):
- Offer all channels and let the customer choose
- Place mobile money first in the channel list
- Track channel preferences to optimize the order over time
// Channel selection based on transaction type
function getChannels(transactionType) {
if (transactionType === 'subscription') {
return ['card', 'mobile_money'];
}
if (transactionType === 'b2b_invoice') {
return ['bank_transfer', 'card'];
}
// Default: consumer purchase
return ['mobile_money', 'card'];
}
Testing Each Channel
Before going live, test each payment channel you plan to offer. Use Paystack test mode with your test API keys.
Testing mobile money:
- In test mode, mobile money payments are simulated. You will not receive an actual STK push.
- Use the test dashboard to simulate successful and failed mobile money transactions.
- Verify that your webhook handler processes mobile money events correctly.
Testing cards:
- Use Paystack test card numbers (e.g., 4084 0840 8408 4081 for successful payments).
- Test with different failure scenarios: declined cards, insufficient funds, expired cards.
- Verify that 3DS redirects work correctly and the customer returns to your callback URL.
Testing bank transfers:
- In test mode, bank transfers auto-complete after a delay.
- Verify that your system handles the asynchronous nature of bank transfers.
A thorough testing checklist:
- Test each channel with a successful payment
- Test each channel with a failed payment
- Verify webhook delivery and processing for each channel
- Test the callback redirect for each channel
- Verify amount matching during transaction verification
- Test channel switching (customer starts with mobile money, switches to card)
Optimizing Conversion Rates by Channel
Each channel has different failure modes and conversion characteristics. Optimize for each one:
Mobile money optimization:
- Pre-fill the phone number if you already have it from the customer's profile
- Show a clear "Check your phone" message after triggering the STK push
- Provide a "Resend prompt" button if the customer does not receive the STK push
- Offer a switch to card payments if mobile money fails multiple times
Card optimization:
- Show card brand logos (Visa, Mastercard) to set expectations
- Format the card number field with spaces for readability
- Warn customers they will need to verify with their bank (3DS step)
- Handle 3DS timeout gracefully and offer a retry
General optimization:
- Show the amount in KES clearly before the customer initiates payment
- Display a progress indicator during payment processing
- Provide clear error messages that tell the customer what to do next
- Log channel-specific failure reasons to identify patterns over time
Key Takeaways
- ✓Mobile money (M-Pesa) is the highest-converting payment channel in Kenya. It should be the default option in your checkout flow.
- ✓Card payments (Visa, Mastercard) work in Kenya but serve a smaller segment. Cards are more relevant for B2B, subscriptions, and international customers.
- ✓Bank transfers are available for customers who prefer direct bank-to-bank payments.
- ✓You can restrict which channels appear at checkout using the channels parameter in the transaction initialization call.
- ✓M-Pesa payments use an STK push flow where the customer authorizes on their phone. Your UI must handle the waiting period gracefully.
- ✓Each channel has different conversion rates, settlement behavior, and failure modes. Choose based on your audience, not just preference.
- ✓Test mode simulates all channels. Test each one before going live to verify your webhook handling and error flows.
Frequently Asked Questions
- Does Paystack support M-Pesa payments in Kenya?
- Yes. Paystack supports mobile money payments in Kenya, which includes M-Pesa. The customer receives an STK push notification on their phone and authorizes the payment with their M-Pesa PIN.
- Which payment channel converts best in Kenya?
- Mobile money (M-Pesa) has the highest conversion rate for consumer-facing products in Kenya. Cards work better for recurring subscriptions and B2B transactions. Bank transfers are used primarily for business-to-business payments.
- Can I restrict which payment methods appear at checkout?
- Yes. Use the channels parameter when initializing a transaction. For example, channels: ["mobile_money", "card"] will show only mobile money and card options. Omitting the parameter shows all available channels.
- Do card payments work for recurring billing in Kenya?
- Yes. After a successful card payment, Paystack stores the authorization. You can reuse it for future charges without the customer re-entering their card details. This makes cards the preferred channel for subscription-based products in Kenya.
- What happens if the M-Pesa STK push fails?
- If the STK push fails (phone off, network issues, customer declined), the payment is not completed. Your UI should offer a retry option or allow the customer to switch to an alternative payment method like a card.
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