Paystack in Kenya: What It Supports and What It Does Not
Paystack in Kenya supports card payments (Visa, Mastercard), M-Pesa via checkout, Pesalink bank-to-bank transfers, and Apple Pay. It settles to Kenyan bank accounts or M-Pesa wallets in KES. It supports transfers to bank accounts, M-Pesa wallets, Paybills, and Till numbers. It does not support direct STK Push, USSD payments, Airtel Money as a standalone channel, or C2B validation URLs.
What Paystack Offers in Kenya
Paystack launched in Kenya after its acquisition by Stripe. The Kenyan product is real and it works, but it is a different animal from what Nigerian developers are used to. The payment landscape in Kenya runs on M-Pesa first, cards second, and everything else a distant third. Paystack has adapted to this, but not fully.
Here is the complete list of what Paystack supports in Kenya as of mid-2026:
- Card payments. Visa and Mastercard, both debit and credit. Works the same as Nigeria. 3DS authentication is supported.
- M-Pesa. Customers can pay via M-Pesa through the Paystack hosted checkout. The customer enters their phone number, receives a push notification on their phone, enters their M-Pesa PIN, and the payment completes. This is not a direct STK Push you initiate from your server.
- Pesalink. Bank-to-bank instant transfers. The customer selects their bank, authenticates via their banking app or USSD, and the money moves. Pesalink is newer and less widely used than M-Pesa, but it avoids the M-Pesa float limits.
- Apple Pay. Available for merchants who complete domain verification. Works on Safari and in iOS apps with Apple Pay enabled devices.
For a broader view of how Paystack fits into the Kenyan payment ecosystem alongside Daraja and other providers, start with the Paystack in Kenya hub guide.
Settlement and Payouts
Paystack settles Kenyan transactions in KES. You have two settlement destinations:
- Bank account. Any Kenyan bank account. Standard settlement timelines apply. [TODO: verify current settlement timeline on paystack.com]
- M-Pesa wallet. Paystack can settle directly to your M-Pesa registered number. This is useful for small businesses that operate primarily through M-Pesa.
Settlement is net of Paystack fees. You receive the transaction amount minus the fee. The fee varies by payment channel and merchant category. [TODO: verify current fee schedule on paystack.com/pricing]
For transfers (payouts you initiate), Paystack supports four destinations in Kenya:
- Bank accounts via account number and bank code
- M-Pesa wallets via phone number
- Paybill numbers via business number and account number
- Till numbers via till number
This makes Paystack one of the few gateways that can both collect and disburse through M-Pesa without you needing a separate Daraja integration for B2C payments. Read the full details in Paystack Kenya settlement to bank or M-Pesa wallet.
How M-Pesa Works on Paystack
This is where most Kenyan developers get surprised. M-Pesa on Paystack is not the same as M-Pesa through Daraja.
With Daraja, you call the STK Push API directly. Your server sends a request to Safaricom, and the customer sees a payment prompt on their phone within seconds. You control the experience end to end. You get the callback, you verify, you grant value.
With Paystack, the M-Pesa payment happens inside Paystack's hosted checkout page. The customer clicks "Pay with M-Pesa", enters their phone number in the Paystack checkout UI, and then receives the push notification. You do not call any M-Pesa API directly. Paystack handles the Daraja interaction on your behalf.
What this means in practice:
- You cannot customize the STK Push prompt message.
- You cannot set the account reference that appears on the customer's M-Pesa statement (Paystack sets this).
- The user experience has an extra step (the Paystack checkout page) compared to a direct STK Push.
- You get a
charge.successwebhook from Paystack, not a Daraja callback. - The payment channel in the webhook data will show
"mobile_money".
For many applications, this is fine. You trade some UX control for the simplicity of a single payment gateway that handles cards, M-Pesa, and Pesalink through one API. For applications where the STK Push experience is critical (like a POS system, a matatu fare system, or a high-volume checkout), you may want direct Daraja instead.
The detailed implementation is in accepting M-Pesa payments through Paystack checkout.
What Paystack Does Not Support in Kenya
This is the section that matters most if you are deciding whether Paystack alone is enough for your Kenyan product. Here is what Paystack does not support:
- Direct STK Push. You cannot trigger an M-Pesa payment prompt from your server. The STK Push happens through Paystack's checkout, which you do not control. If you need direct STK Push, use the Daraja API.
- USSD payments. Paystack supports USSD in Nigeria but not in Kenya. Kenyan USSD payments are tied to M-Pesa and bank USSD channels, and Paystack does not expose them as a payment method.
- Airtel Money as a standalone channel. While Airtel Money is a significant mobile money provider in Kenya, Paystack does not currently offer it as a separate payment channel the way it offers M-Pesa. For Airtel Money on Paystack, check the current status.
- C2B validation URLs. In Daraja, you can set a validation URL that lets you accept or reject a payment before it completes. Paystack does not expose this. Every M-Pesa payment that the customer confirms will go through.
- Lipa Na M-Pesa Online (direct). The Lipa Na M-Pesa Online API (STK Push) is Daraja-only. Paystack wraps it internally but does not give you direct access.
- M-Pesa B2B. Business-to-business payments between Paybill accounts are not available through Paystack. You need Daraja for B2B.
- Custom short codes. You cannot use your own Paybill or Till number with Paystack. Payments go through Paystack's short code, and they settle to you.
If you need any of these capabilities, you either integrate Daraja directly alongside Paystack or choose a provider that offers them. See running Paystack and Daraja side by side for the hybrid approach.
The API Is the Same Across Countries
One thing Paystack gets right: the API is identical whether you are in Nigeria, Ghana, South Africa, or Kenya. You call the same endpoints, use the same authentication, and get the same webhook events. The only things that change are:
- The payment channels available at checkout (M-Pesa and Pesalink only appear for Kenyan merchants)
- The settlement currency (KES for Kenya)
- The amount unit (Paystack uses the smallest currency unit, which is cents for KES, not shillings)
- The transfer recipient types (M-Pesa wallet, Paybill, Till are Kenya-specific)
This means if you have an existing Paystack integration built for Nigeria, adapting it for Kenya is mostly a matter of handling the different payment channels in your UI and converting amounts to cents. The server-side code barely changes.
// Amount handling for Kenya
// KES 500 = 50000 cents
const amountInCents = 500 * 100; // 50000
// Initialize transaction - same endpoint as Nigeria
const response = await paystack.post('/transaction/initialize', {
email: 'customer@example.com',
amount: amountInCents, // Always in smallest unit
currency: 'KES',
channels: ['card', 'mobile_money', 'bank_transfer'], // Pesalink falls under bank_transfer
});
The channels array lets you restrict which payment methods appear at checkout. For a Kenyan merchant, mobile_money shows M-Pesa, and bank_transfer shows Pesalink. For the full list of channel options, see Paystack payment channels.
Transfers and Payouts in Kenya
Paystack Transfers in Kenya are more versatile than most developers expect. You can send money to:
- Bank accounts: Create a transfer recipient with the bank code and account number, then initiate a transfer.
- M-Pesa wallets: Create a recipient with type
mobile_moneyand the phone number. The money lands in the recipient's M-Pesa account. - Paybill numbers: Create a recipient with the business number and account number. Useful for paying utilities, rent, or other businesses.
- Till numbers: Similar to Paybill but for Buy Goods payments.
// Create an M-Pesa transfer recipient
const recipient = await paystack.post('/transferrecipient', {
type: 'mobile_money',
name: 'Jane Wanjiku',
account_number: '0712345678', // M-Pesa phone number
bank_code: 'MPESA',
currency: 'KES',
});
// Initiate transfer
const transfer = await paystack.post('/transfer', {
source: 'balance',
amount: 50000, // KES 500 in cents
recipient: recipient.data.data.recipient_code,
reason: 'Rider payout - July 2026',
});
This is powerful because it means you can build a complete collect-and-disburse system on Paystack alone, without needing a separate Daraja B2C integration. A food delivery app, for example, can collect payment from customers through Paystack checkout and pay riders via M-Pesa transfers, all through one provider.
The full transfer implementation details are in Paystack transfers to M-Pesa wallets and transfers to Paybill and Till numbers.
When Paystack Alone Is Enough
Paystack is the right choice as your only payment provider in Kenya when:
- You need to accept both cards and M-Pesa and do not need to control the STK Push experience.
- You are building a standard e-commerce checkout, SaaS subscription, or donation platform.
- You want one API for both collecting payments and making payouts to bank accounts or M-Pesa.
- You are already using Paystack in Nigeria or Ghana and want to expand to Kenya with minimal code changes.
- Your checkout conversion does not depend on the M-Pesa payment happening inline (without a redirect to Paystack's page).
For these use cases, Paystack simplifies your stack considerably. One set of API keys, one webhook handler, one reconciliation flow. That simplicity has real engineering value.
See building a Kenyan e-commerce checkout for a complete working example.
When You Need More Than Paystack
Paystack is not enough when:
- You need direct STK Push with custom prompts and controlled timing (matatu fare collection, POS terminals, kiosk payments).
- You need Airtel Money as a payment channel to reach customers who do not use M-Pesa.
- You need USSD payment channels for feature phone users.
- You need C2B validation to accept or reject payments based on business rules before they complete.
- You need B2B transfers between Paybill accounts.
- You want your own Paybill or Till number to appear on customer statements.
- You need the absolute lowest per-transaction cost for high-volume M-Pesa payments (direct Daraja is cheaper than going through a gateway).
In these cases, you have three options:
- Daraja only. If your product is M-Pesa-centric and you do not need cards, go direct to Daraja. See migrating from Paystack to direct Daraja.
- Paystack plus Daraja. Use Paystack for cards and international payments, Daraja for M-Pesa. More complex but gives you the best of both. See running both side by side.
- Alternative gateway. Providers like IntaSend, Pesapal, and Flutterwave offer different feature sets. See choosing between Kenyan gateways.
Compliance and Onboarding in Kenya
To use Paystack in Kenya, you need to complete business activation. The requirements include:
- A registered Kenyan business (or foreign entity with Kenyan operations)
- Business registration documents (certificate of incorporation, CR12, or equivalent)
- KRA PIN certificate
- Director identification documents
- A Kenyan bank account for settlement
The onboarding process is handled through the Paystack Dashboard. Once submitted, review typically takes a few business days. [TODO: verify current onboarding timeline on paystack.com]
You can start building and testing immediately with test keys. You only need business activation to go live and accept real payments.
Kenyan merchants should also be aware of the Digital Service Tax and CBK payment service provider rules that may apply to their business.
What You Can Build with Paystack in Kenya
Paystack's Kenyan feature set is enough to build a wide range of products. The Kenya cluster in this guide includes step-by-step build guides for:
- E-commerce checkout accepting M-Pesa and cards
- SaaS subscription billing with recurring charges
- School fees portal for Kenyan schools
- Chama contribution tracker with member payments
- Delivery app with rider payouts via M-Pesa
- Event ticketing for Kenyan events
- Rent collection for landlords
- Freelancer invoicing for Kenyan developers
Each guide includes working code, Paystack API calls, webhook handling, and deployment considerations specific to Kenyan network conditions.
For the full picture of Paystack's capabilities across all countries, read the complete Paystack engineering guide.
Key Takeaways
- ✓Paystack Kenya supports cards, M-Pesa, Pesalink, and Apple Pay as payment channels at checkout.
- ✓M-Pesa payments go through Paystack hosted checkout, not a direct STK Push you control.
- ✓Settlement happens to a Kenyan bank account or M-Pesa wallet in KES.
- ✓Transfers can go to bank accounts, M-Pesa wallets, Paybill numbers, and Till numbers.
- ✓Paystack does not support USSD payments, direct STK Push, or Airtel Money as a standalone payment channel in Kenya.
- ✓If you need STK Push control, C2B validation, or Airtel Money, you need Daraja or a complementary provider.
Frequently Asked Questions
- Does Paystack support M-Pesa in Kenya?
- Yes. Paystack supports M-Pesa as a payment channel in Kenya through its hosted checkout. The customer enters their phone number at checkout and receives an M-Pesa push notification. However, you do not get direct STK Push control. For that, you need the Daraja API.
- Can I settle Paystack payments to my M-Pesa wallet?
- Yes. Paystack Kenya allows settlement to a Kenyan bank account or an M-Pesa wallet. You configure your settlement destination in the Paystack Dashboard.
- Does Paystack support Airtel Money in Kenya?
- Airtel Money is not currently available as a standalone payment channel on Paystack in Kenya the way M-Pesa is. If you need to accept Airtel Money payments, you may need a complementary provider or direct integration.
- Can I use Paystack to send money to M-Pesa wallets?
- Yes. Paystack Transfers support M-Pesa wallets, bank accounts, Paybill numbers, and Till numbers as recipient types in Kenya. You create a transfer recipient and initiate the transfer via the API.
- Is Paystack cheaper than Daraja for M-Pesa payments?
- Generally, direct Daraja has lower per-transaction costs than going through a gateway like Paystack. The trade-off is engineering complexity. With Daraja you manage the Safaricom integration yourself. With Paystack you get M-Pesa plus cards plus Pesalink through one API. Check current pricing on both paystack.com/pricing and the Daraja portal.
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