McTaba Labs logo
Software EngineeringThe WhiteboardProjectsEventsMasterclassesWebinarsLearn
Book Call

500+ developers already in the community

Get answers, find accountability partners, and stay ahead

Join Discord →
McTaba Labs logo

Educating 1 million students in tech by 2030.

Programs

  • HighSchool Graduates Launchpad
  • AI & Business Automation
  • Corporate Training
  • McTaba Story & Mission
  • Full-Stack Curriculum
  • Course Pricing & Plans
  • Frequently Asked Questions

Resources

  • Join Discord Community
  • Tech Events in Nairobi
  • Masterclasses
  • Free Resources
  • Learn
  • Campus
  • Africa Tech Talent Report
  • Partner With Us
  • Start a Project
  • Our Work

Contact Us

  • 124 Manyani East Road, Lavington, Nairobi
  • +254727795603
  • Book a Discovery Call

Office Hours:

Mon-Fri: 9am - 2pm EAT

Sat: 10am - 12pm EAT

© 2027 McTaba Labs - A product of Edtech Industries. All rights reserved.

Privacy PolicyTerms of ServiceRefund Policy
  1. Learn
  2. Paystack for African Developers
  3. Transfers to Kenyan Bank Accounts via Paystack
Bonaventure OgetoBy Bonaventure Ogeto|Updated July 20, 2026

Transfers to Kenyan Bank Accounts via Paystack

To transfer to a Kenyan bank account via Paystack, create a nuban-type recipient with the Kenyan bank code and KES currency. Get bank codes from GET /bank?country=kenya. Initiate the transfer with the recipient code, amount in cents, and a unique reference. Settlement timing depends on the destination bank and can range from minutes to several hours through interbank clearing.

In this article

  1. 1. Getting Kenyan Bank Codes
  2. 2. Creating Kenyan Bank Recipients
  3. 3. Initiating KES Bank Transfers
  4. 4. Settlement Timing for Kenyan Banks
  5. 5. Common Failure Scenarios for Kenyan Banks
  6. 6. Choosing Between Bank and M-Pesa for Kenyan Payouts
  7. 7. Build for the Kenyan Market

Getting Kenyan Bank Codes

Every Kenyan bank on Paystack has a unique code. You need this code to create a recipient. Fetch the full list from the API.

const getKenyanBanks = async () => {
  var response = await fetch('https://api.paystack.co/bank?country=kenya', {
    headers: {
      Authorization: 'Bearer ' + process.env.PAYSTACK_SECRET_KEY,
    },
  });

  var data = await response.json();
  return data.data;
  // Returns: [{ name: "Kenya Commercial Bank", code: "xxx", ... }, ...]
};

// Cache this list and refresh weekly
var kenyanBanks = await getKenyanBanks();

Cache the bank list in your application. It does not change often. Present it as a dropdown in your vendor onboarding form so users select their bank by name rather than entering a code manually. This eliminates the most common error: wrong bank code.

Creating Kenyan Bank Recipients

const createKenyanBankRecipient = async (name, accountNumber, bankCode) => {
  var response = await fetch('https://api.paystack.co/transferrecipient', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer ' + process.env.PAYSTACK_SECRET_KEY,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      type: 'nuban',
      name: name,
      account_number: accountNumber,
      bank_code: bankCode,
      currency: 'KES',
    }),
  });

  var data = await response.json();
  if (!data.status) {
    throw new Error('Recipient creation failed: ' + data.message);
  }

  return {
    recipientCode: data.data.recipient_code,
    resolvedName: data.data.details.account_name,
    bankName: data.data.details.bank_name,
  };
};

Paystack resolves the account at creation time. If the account number and bank code do not match a real account, the request fails. Always show the resolved account name to the user for confirmation before proceeding. A mismatch between the name they entered and the resolved name is a red flag.

Get weekly developer tips

Join 25,000+ developers. Practical guides, job tips, and new content — straight to your inbox.

No spam. Unsubscribe anytime.

Initiating KES Bank Transfers

const sendToKenyanBank = async (recipientCode, amountKES, reason, reference) => {
  var amountCents = Math.round(amountKES * 100);

  var response = await fetch('https://api.paystack.co/transfer', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer ' + process.env.PAYSTACK_SECRET_KEY,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      source: 'balance',
      amount: amountCents,
      recipient: recipientCode,
      reason: reason,
      reference: reference,
    }),
  });

  var data = await response.json();
  if (!data.status) {
    throw new Error('Transfer failed: ' + data.message);
  }

  return data.data;
};

// Usage
var result = await sendToKenyanBank(
  'RCP_kenyan_vendor_01',
  25000, // 25,000 KES
  'Monthly vendor settlement - July 2026',
  'vendor_settlement_july_v01'
);

The amount is in cents (the smallest KES unit). 25,000 KES = 2,500,000 cents. Double-check your multiplication, especially when converting from user-facing amounts to API amounts. A mistake here means sending 100x too much or too little.

Settlement Timing for Kenyan Banks

Kenyan bank transfer settlement depends on several factors.

Same-bank transfers (sender and recipient are at the same bank) tend to be faster because the money does not need to cross the interbank clearing system. These can settle in minutes.

Cross-bank transfers go through the Kenya Bankers Association clearing system. Settlement can take anywhere from 30 minutes to several hours. During peak periods, batch processing, or bank maintenance windows, delays extend.

Business hours matter. Transfers initiated during banking hours (roughly 8 AM to 4 PM EAT, Monday to Friday) generally settle faster than those initiated in the evening, overnight, or on weekends. Weekend and holiday transfers may queue until the next business day, depending on the destination bank.

Month-end and salary periods cause increased processing volumes across the banking system. If your payout run coincides with the 25th-30th of the month (when many companies process payroll), expect longer settlement times.

For time-sensitive payouts in Kenya, M-Pesa transfers are near-instant, and Pesalink offers real-time bank-to-bank settlement. See Pesalink transfers through Paystack for the instant option.

Common Failure Scenarios for Kenyan Banks

Beyond the standard transfer failure reasons, Kenyan bank transfers have some specific patterns.

Account number format mismatch. Kenyan banks have varying account number lengths and formats. Some use 10 digits, others use 13 or 14. If the account number format does not match what the bank expects, the transfer fails. Validate the account number length against the expected format for the selected bank.

Dormant accounts. Kenyan banks are required to flag accounts as dormant after a period of inactivity (typically 12 months with no transactions). Transfers to dormant accounts fail. The recipient needs to visit their bank to reactivate the account.

CBK compliance holds. The Central Bank of Kenya requires banks to screen certain transfers for compliance. If a transfer triggers a compliance check, it may be held for review, causing delays beyond the normal settlement window. This is more common for larger transfers.

Bank system maintenance. Kenyan banks occasionally take their systems offline for maintenance, usually during late night hours or weekends. Transfers during these windows fail with timeout or system unavailable errors. These are transient and succeed on retry after the maintenance window ends.

Build your retry logic to handle these scenarios. Transient failures (timeouts, maintenance) resolve with a retry after 15-60 minutes. Permanent failures (wrong account, dormant) require recipient action. See managing transfer failures and reversals for the full framework.

Choosing Between Bank and M-Pesa for Kenyan Payouts

Most Kenyan platforms need both bank and M-Pesa payout options. Here is when to use each.

Bank transfers are better for: Large amounts above M-Pesa limits, corporate vendor payments, salary disbursement to employees with bank accounts, and recipients who need bank statements for tax purposes.

M-Pesa is better for: Small to moderate amounts, speed-sensitive payouts (rider settlements, instant payouts), recipients without bank accounts, and rural recipients where M-Pesa agents are more accessible than bank branches.

Let recipients choose during onboarding. Store their preference and create the appropriate recipient type. Some platforms default to M-Pesa (fastest, most accessible) and offer bank transfer as an alternative for high-value payouts.

For the full M-Pesa transfer guide, see transfers to M-Pesa wallets, Paybills, and Tills.

Build for the Kenyan Market

Kenyan bank transfers are one piece of the payment puzzle. Understanding when to use banks vs M-Pesa vs Pesalink gives your product the best coverage across the Kenyan market.

The McTaba bootcamp covers payment integration for the East African market. You build real products that handle the complexity of Kenya's payment landscape.

Create a free McTaba account

Key Takeaways

  • ✓Kenyan bank recipients use the nuban type with Kenyan bank codes and KES currency. Get bank codes from GET /bank?country=kenya.
  • ✓Settlement timing for Kenyan bank transfers varies. Same-bank transfers are faster. Cross-bank transfers go through interbank clearing and can take minutes to hours.
  • ✓Amounts are in cents (1 KES = 100 cents). To send 10,000 KES, pass 1000000.
  • ✓Bank transfers are better than M-Pesa for large amounts, corporate accounts, and recipients who prefer bank settlement.
  • ✓For instant bank-to-bank transfers, consider Pesalink where available through Paystack.
  • ✓Common failures include wrong bank codes, account number mismatches, and bank maintenance windows.

Frequently Asked Questions

Does Paystack support all Kenyan banks?
Paystack supports a wide range of Kenyan banks. Call GET /bank?country=kenya to see the current list of supported banks. If a specific bank is not listed, the recipient would need to provide an account at a supported bank or accept M-Pesa payouts instead.
Can I send KES transfers from an NGN Paystack balance?
No. Transfers must use the same currency as your Paystack balance. To send KES transfers, you need a KES balance funded by KES payments or KES deposits. You cannot convert NGN to KES through Paystack.
What happens if I use the wrong bank code for a Kenyan account?
Recipient creation will likely fail because Paystack validates the account number against the bank code. If by some chance it passes validation but the bank code is wrong, the transfer will fail when the interbank system cannot route the payment. Always let users select banks from a dropdown populated by the List Banks endpoint.

Learn Paystack Integration

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

Not ready? Create Free Account

Keep reading

Paystack Transfers and Payouts: Complete Guide

Everything you need to send money out of your Paystack account: creating transfer recipients, initiating single and bulk transfers, handling OTP requirements, managing failures, and building automated payout systems for bank accounts, M-Pesa wallets, and mobile money across Africa.

Read more

Transfer OTP: Enabling, Disabling and Automating

Paystack requires OTP confirmation for transfers by default. This guide explains the OTP flow, how to disable it for automated payout systems, the security trade-offs of disabling OTP, and how to build your own application-level approval controls to replace OTP with something better suited to production automation.

Read more

Funding Your Paystack Balance Programmatically

Your Paystack balance needs funds before you can send transfers. This guide covers the different ways to fund your balance, setting up dedicated virtual accounts, monitoring balance levels, building automated funding alerts, and integrating balance management into your payout pipeline so you never run out mid-payout.

Read more

Building a Driver Payout System for a Ride Hailing App

Ride-hailing drivers need fast, reliable payouts. This guide covers building a driver payout system on Paystack: calculating trip-based earnings with commission deductions, daily settlement cycles, M-Pesa and bank payout options, handling cash-collected trips, real-time driver balance tracking, and instant withdrawal features.

Read more

Verify Transaction: The Paystack Call You Must Never Skip

Every Paystack payment must be verified server-side before you grant value. This guide covers the GET /transaction/verify/:reference endpoint in detail, with production Node.js code and the edge cases that catch teams off guard.

Read more

Explore related topics

M-Pesa & African Stack

M-Pesa Daraja API tutorials, USSD development, and WhatsApp Business API guides. The African Stack that global bootcamps do not teach.

Learn to Code in Kenya

Everything a Kenyan needs to know before writing their first line of code. Career paths, real costs, hardware requirements, and honest answers about what it takes.

Learning to Code

Roadmaps, language guides, and practical advice for learning to code and launching a programming career.

Breaking Into Tech

Practical, no-nonsense guides for anyone looking to start or change their career in tech. From choosing your first language to acing interviews.

The African Stack: Skills for This Market

The skills that make Kenyan developers hard to replace: M-Pesa, USSD, WhatsApp, fintech, and building for the African market.

Bonaventure Ogeto

Bonaventure Ogeto

Founder, McTaba Labs

Bonaventure is the founder of McTaba Labs, a coding bootcamp in Nairobi, Kenya. He has spent years building products for the African market and mentoring the next generation of developers across the continent.