Bonaventure OgetoBy Bonaventure Ogeto|

Building a Local Checkout Experience for Kenya

For a Kenya-optimised Paystack checkout: (1) include "mobile_money" as a channel — this enables M-Pesa STK push through Paystack; (2) amounts are in KES sent to Paystack in kobo/cents (multiply by 100); (3) set currency: "KES"; (4) include the customer phone number (07XXXXXXXX format) so Paystack can trigger the M-Pesa STK push to the right number; (5) do not restrict to card-only if you want Kenyan conversions.

Kenya-Optimised Checkout Configuration

// Kenya-optimised transaction initialization
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.email,
    phone: customer.phone, // e.g., '0712345678' or '+254712345678' — required for M-Pesa STK push
    amount: Math.round(orderAmountKES * 100), // KES to smallest unit
    currency: 'KES',
    reference: generateReference(),
    channels: ['mobile_money', 'card', 'bank'], // M-Pesa first in the list
    metadata: {
      order_id: order.id,
    },
    callback_url: 'https://yourapp.com/payment/callback',
  }),
});

M-Pesa STK push flow via Paystack:

  1. Customer selects M-Pesa at checkout
  2. Paystack sends an STK push to the customer's phone
  3. Customer enters their M-Pesa PIN
  4. Paystack fires a charge.success webhook to your server

The STK push requires a live Safaricom number — test mode simulates it automatically.

Localisation Tips for Kenyan Users

  • Currency display: Show as "KES 1,000" or "Ksh 1,000" — both are familiar to Kenyan users.
  • M-Pesa STK push delays: Tell customers "A payment prompt will appear on your phone within 30 seconds." Safaricom network congestion can delay STK pushes.
  • Wrong number: If the customer enters their email but the phone number is wrong, the STK push fails silently. Add a phone number confirmation step at checkout.
  • Airtel Money: Paystack also supports Airtel Money in Kenya via the mobile_money channel — it is enabled automatically for Airtel numbers.

Learn More

Key Takeaways

  • M-Pesa is the dominant payment method in Kenya — enable mobile_money channel in every Kenyan checkout.
  • KES amounts go to Paystack in the smallest currency unit (multiply KES by 100 — Paystack treats it as cents/kobo).
  • Include the customer phone number in the initialize call to enable the M-Pesa STK push.
  • Card is supported for Kenyan Visa/Mastercard users, but M-Pesa has far higher checkout conversion.
  • Set currency: "KES" explicitly — Paystack supports multi-currency and will default to your account currency otherwise.
  • M-Pesa payments require the customer to have their phone and network connectivity to confirm the STK push.

Frequently Asked Questions

Does Paystack support M-Pesa in Kenya?
Yes. Paystack supports M-Pesa in Kenya via the mobile_money channel. When a customer selects M-Pesa at checkout, Paystack triggers an STK push to their Safaricom number. The customer enters their PIN and the payment is confirmed via a charge.success webhook.
Why did the M-Pesa STK push not reach the customer?
Common reasons: wrong phone number in the initialize call, Safaricom network delay (wait 60 seconds before retrying), the phone number is not registered on M-Pesa, or the customer's M-Pesa balance is insufficient. Verify the phone number format — use international format (+254XXXXXXXXX) for reliability.
Can I accept USD from international customers via Paystack in Kenya?
Paystack in Kenya supports KES transactions. For USD or multi-currency acceptance, you would need to configure currency conversion at the application level or use a Paystack account configured for your specific use case. Contact Paystack Kenya support for multi-currency merchant arrangements.
Is PesaLink supported on Paystack in Kenya?
PesaLink (Kenya Interbank Settlement System for peer-to-peer transfers) is a bank-to-bank transfer system in Kenya. As of 2026, Paystack Kenya primarily supports M-Pesa, Airtel Money, and card. For PesaLink, customers would need to use their bank's PesaLink integration separately, or you could use a Kenyan fintech gateway that supports PesaLink directly.

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