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. Pay with Pesalink on Paystack: Developer Guide
Bonaventure OgetoBy Bonaventure Ogeto|Updated July 20, 2026

Pay with Pesalink on Paystack: Developer Guide

Pesalink is Kenya's instant bank-to-bank transfer network, run by IPSL under the Kenya Bankers Association. On Paystack, you enable it by including bank_transfer in the channels array when initializing a transaction. The customer selects Pesalink at checkout, picks their bank, and authorizes payment from their banking app or USSD. You receive the same charge.success webhook as any other payment method.

In this article

  1. 1. What Is Pesalink and Why Should Developers Care
  2. 2. Supported Banks
  3. 3. The Customer Experience at Checkout
  4. 4. Integration Code: Enabling Pesalink in Paystack
  5. 5. Verifying Pesalink Payments
  6. 6. Transaction Limits and Amounts
  7. 7. When to Prioritize Pesalink Over Other Methods
  8. 8. Pesalink vs Card Payments in the Kenyan Context
  9. 9. Troubleshooting Pesalink Payments
  10. 10. Next Steps

What Is Pesalink and Why Should Developers Care

Pesalink is Kenya's real-time interbank payment network. It is operated by Integrated Payment Services Limited (IPSL), a company owned by the Kenya Bankers Association. When a customer pays via Pesalink, the money moves directly from their bank account to the merchant's bank account in real time. No cards, no mobile money, no float.

For most Kenyan developers, M-Pesa is the default payment method. And for good reason. More Kenyans have M-Pesa than have bank accounts. But there are transactions where M-Pesa is not the right fit:

  • High-value payments. M-Pesa has a per-transaction limit (currently around KES 150,000 for most users). School fees, rent, wholesale orders, and equipment purchases often exceed that. Pesalink handles larger amounts.
  • Corporate buyers. Businesses and institutions often prefer to pay from their bank account. Their finance departments work in bank statements and ERP systems, not M-Pesa statements.
  • Float constraints. M-Pesa agents and users can run into float limits. Bank accounts do not have the same constraint. The money is in the account or it is not.
  • Real-time settlement. Pesalink transfers settle in real time, 24 hours a day, 7 days a week. This includes weekends and holidays. For time-sensitive transactions, this matters.

Pesalink is not going to replace M-Pesa for everyday transactions. But for the use cases listed above, it fills a gap that M-Pesa cannot. And through Paystack, you get it as part of the same integration you already have. No separate API to learn.

Supported Banks

Pesalink is available at most major banks in Kenya. The network currently includes over 40 banks and microfinance institutions. The banks your customers are most likely to use include:

  • KCB Bank
  • Equity Bank
  • Co-operative Bank
  • NCBA (formerly CBA and NIC)
  • Absa Bank Kenya (formerly Barclays)
  • Standard Chartered
  • Stanbic Bank
  • Diamond Trust Bank (DTB)
  • I&M Bank
  • Family Bank
  • Bank of Africa
  • KWFT (Kenya Women Finance Trust)

The full list of participating banks is maintained by IPSL and can change as new institutions join the network. When a customer selects Pesalink at Paystack's checkout, Paystack presents the list of available banks. The customer picks their bank and is redirected to authorize the payment.

In practice, KCB, Equity, and Co-op Bank cover the majority of banked Kenyans. If Pesalink works with those three, you are reaching most of the addressable audience for bank transfer payments.

Get weekly developer tips

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

No spam. Unsubscribe anytime.

The Customer Experience at Checkout

Here is what the customer sees when they choose Pesalink at a Paystack-powered checkout:

  1. Payment method selection. The Paystack checkout popup or inline form shows available payment methods. If you have enabled bank_transfer, the customer sees a bank transfer option alongside M-Pesa and card.
  2. Bank selection. The customer selects their bank from a list of supported institutions.
  3. Authorization. Depending on the bank, the customer is either redirected to their bank's online banking portal, prompted via their banking app, or given a USSD code to dial. They review the payment details (amount, merchant name) and authorize it.
  4. Confirmation. Once the bank processes the transfer, Paystack receives confirmation and redirects the customer back to your callback URL. The payment is complete.

The entire flow takes a minute or two. It is not as fast as M-Pesa STK push (which takes seconds), but it is significantly faster than manual bank transfers where the customer has to type account numbers and references.

One thing to communicate clearly to your users: Pesalink requires the customer to have an account at a participating bank and access to their banking app or USSD banking. This is obvious to developers but not always obvious to end users. A brief note like "Pay directly from your bank account" in your checkout UI helps set expectations.

Integration Code: Enabling Pesalink in Paystack

On the Paystack side, Pesalink is part of the bank_transfer channel. You enable it by including bank_transfer in the channels array when you initialize a transaction.

Option 1: Transaction Initialize (server-side redirect)

const initializeWithPesalink = async (email, amountKes) => {
  const response = await fetch('https://api.paystack.co/transaction/initialize', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer sk_live_YOUR_SECRET_KEY',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      email: email,
      amount: amountKes * 100, // Convert to cents
      currency: 'KES',
      channels: ['bank_transfer', 'mobile_money', 'card'],
      callback_url: 'https://yourapp.com/payment/callback',
    }),
  });

  const data = await response.json();
  // Redirect the customer to data.data.authorization_url
  return data.data.authorization_url;
};

// Accept a KES 250,000 school fees payment
const checkoutUrl = await initializeWithPesalink(
  'parent@example.com',
  250000
);
// Redirect the user to checkoutUrl

Option 2: Paystack Inline (client-side popup)

// In your frontend JavaScript
const handler = PaystackPop.setup({
  key: 'pk_live_YOUR_PUBLIC_KEY',
  email: 'parent@example.com',
  amount: 25000000, // KES 250,000 in kobo/cents
  currency: 'KES',
  channels: ['bank_transfer', 'mobile_money', 'card'],
  callback: function (response) {
    // Verify the transaction on your server
    verifyTransaction(response.reference);
  },
  onClose: function () {
    console.log('Checkout closed');
  },
});
handler.openIframe();

The key line is channels: ['bank_transfer', 'mobile_money', 'card']. This tells Paystack to show all three payment method options at checkout. If you want to offer only Pesalink (for example, on a page specifically for high-value payments), you can pass channels: ['bank_transfer'] alone.

Your backend does not need to know which channel the customer chose. When the payment completes, you receive the same charge.success webhook regardless of the method. The webhook payload includes a channel field that tells you how the customer paid, which is useful for analytics and reconciliation but does not change your processing logic.

Verifying Pesalink Payments

Verification works the same way as any other Paystack payment. You verify using the transaction reference, either through the webhook or by calling the verify endpoint directly.

const verifyTransaction = async (reference) => {
  const response = await fetch(
    `https://api.paystack.co/transaction/verify/${reference}`,
    {
      headers: {
        Authorization: 'Bearer sk_live_YOUR_SECRET_KEY',
      },
    }
  );

  const data = await response.json();

  if (data.data.status === 'success') {
    const { amount, currency, channel } = data.data;
    console.log(`Payment of ${amount / 100} ${currency} via ${channel}`);
    // channel will be 'bank_transfer' for Pesalink payments
    return true;
  }

  return false;
};

The channel field in the response will be bank_transfer for Pesalink payments. You can use this information for reporting (e.g., "45% of our payments over KES 100,000 come through Pesalink") but your fulfillment logic should not branch on it. A successful payment is a successful payment regardless of the channel.

Always verify on your server. Never rely on the client-side callback alone. This applies to Pesalink just as it applies to M-Pesa and card payments. The webhooks guide covers the full verification and webhook handling pattern.

Transaction Limits and Amounts

One of the main reasons to offer Pesalink is its higher transaction limits compared to M-Pesa. Here is how the limits compare at a high level:

FactorM-PesaPesalink
Per-transaction limitVaries by user tier, generally up to KES 150,000Higher limits, varies by bank
Daily limitKES 300,000 for most usersDepends on bank account type
Availability24/724/7
Settlement to merchantThrough Paystack settlement cycleThrough Paystack settlement cycle

Important caveats:

  • These limits are approximate and change. Safaricom adjusts M-Pesa limits periodically. Banks set their own Pesalink limits based on account type and customer profile. Do not hard-code limits into your application. Instead, handle limit-related failures gracefully.
  • Paystack may impose its own limits on top of the underlying payment method limits. Check the Paystack documentation and dashboard for the maximum transaction amount they support for bank_transfer in Kenya.
  • The customer's bank account balance is the real limit. Unlike M-Pesa where float can be an issue, bank transfers just need the funds to be in the account. For high-value B2B transactions, this is usually not a problem.

If your product regularly handles payments above KES 100,000, Pesalink should be a prominent option in your checkout. For school fees portals, rent collection platforms, and wholesale order systems, it is often the most practical payment method. See Building a School Fees Portal for a Kenyan School for a concrete example.

When to Prioritize Pesalink Over Other Methods

Not every checkout needs Pesalink prominently featured. Here is when it matters and when it does not.

Prioritize Pesalink when:

  • Your average transaction value exceeds KES 50,000. At these amounts, M-Pesa limits become a friction point.
  • Your customers are businesses or institutions that operate through bank accounts.
  • You need payment confirmation for high-value transactions before releasing goods or services.
  • You are building for sectors like education, real estate, healthcare, or wholesale where large payments are the norm.

Pesalink is less important when:

  • Your typical transaction is under KES 5,000. At small amounts, M-Pesa is faster and more convenient for most Kenyans.
  • Your users are primarily mobile-first consumers who may not have active bank accounts or banking apps.
  • Speed of checkout matters more than payment flexibility. M-Pesa STK push completes in seconds. Pesalink takes a minute or two.

The smart approach is to offer all available methods and let the customer choose. Use the channels array to include ['mobile_money', 'bank_transfer', 'card']. Paystack's checkout will present them in a sensible order. If you know your audience leans toward bank transfers (e.g., a B2B platform), you can adjust the UI to feature Pesalink more prominently. For guidance on payment method placement, see Why Kenyan Checkout Conversion Depends on Mobile Money Placement.

Pesalink vs Card Payments in the Kenyan Context

Cards (Visa, Mastercard) are another option for payments above M-Pesa limits. So when does Pesalink beat cards, and when do cards win?

Pesalink advantages over cards:

  • More Kenyans have bank accounts than have debit or credit cards. Pesalink reaches those customers.
  • No 3D Secure friction. Card payments require the customer to enter card details and go through 3D Secure authentication. Pesalink uses the bank's existing authentication (app PIN, fingerprint, USSD).
  • No card fraud risk. Pesalink is an authenticated bank transfer. The customer authorizes it directly with their bank. There are no chargebacks in the card sense.
  • No card decline issues. Kenyan debit cards sometimes get declined for online transactions due to daily limits, international transaction blocks, or insufficient card limits (which can be different from the account balance).

Card advantages over Pesalink:

  • International customers cannot use Pesalink. It is a Kenya-only network. If you serve customers outside Kenya, you need cards.
  • Recurring payments. Cards can be tokenized for automatic recurring charges. Pesalink requires the customer to authorize each payment individually.
  • Some customers simply prefer cards. Corporate credit cards, travel cards, and reward cards are used by a segment of Kenyan professionals.

The takeaway: offer both. Let the customer decide. Your backend code does not change either way.

Troubleshooting Pesalink Payments

Common issues you will encounter with Pesalink payments and how to handle them:

  • Customer's bank not listed. If a customer's bank is not yet on the Pesalink network, they will not see it as an option. Direct them to M-Pesa or card payment instead. Your checkout should always offer at least two payment methods.
  • Authorization timeout. The customer selects their bank but does not complete the authorization within the allowed window. The transaction expires. Display a clear message and let them try again with a new transaction.
  • Bank app not set up. Some customers have bank accounts but have never activated their mobile banking app. They cannot complete a Pesalink payment through the app flow. USSD-based authorization (where supported) is the fallback, but not all banks support it for Pesalink.
  • Amount exceeds bank limit. The customer's bank may have daily or per-transaction limits that are lower than the Pesalink network limit. The payment will be rejected by the bank. The customer needs to check with their bank or split the payment.
  • Weekend and holiday processing. While Pesalink itself works 24/7, some banks may have limited processing windows for certain types of transactions. This is rare but worth knowing about if you see intermittent failures on weekends.

For network-level issues that affect all payment methods in Kenya, see Building for Kenyan Network Conditions: Retries and Timeouts.

Next Steps

Pesalink gives you a high-value payment method with minimal additional code. Here is where to go next:

  • Paystack in Kenya: M-Pesa, Pesalink, and the Daraja Question for the full picture of payment methods in Kenya.
  • Accepting M-Pesa Payments Through Paystack Checkout if you have not set up M-Pesa alongside Pesalink yet.
  • Building a Kenyan E-Commerce Checkout for a complete checkout implementation that includes all payment methods.
  • Apple Pay for Kenyan Merchants on Paystack for another payment method you can add to your checkout.

If you are building payment systems for the Kenyan market, the McTaba 26-week Full-Stack Software and AI Engineering bootcamp covers payment integration as part of a complete engineering education. You build and ship products that handle real money from real Kenyan customers.

Key Takeaways

  • ✓Pesalink is an instant interbank payment network operated by IPSL (Integrated Payment Services Limited) under the Kenya Bankers Association. It enables real-time bank-to-bank transfers 24/7.
  • ✓On Paystack, Pesalink falls under the bank_transfer channel. You include it in the channels array when initializing a transaction, and Paystack handles the bank selection and authorization flow.
  • ✓Pesalink supports higher transaction amounts than M-Pesa, making it suitable for rent, school fees, wholesale orders, and other high-value payments where mobile money limits are a constraint.
  • ✓Most major Kenyan banks support Pesalink, including KCB, Equity, Co-op Bank, NCBA, Absa, Stanbic, DTB, and I&M. The customer authorizes the payment through their bank's app or USSD.
  • ✓From your backend, the integration is identical to other Paystack payment methods. You receive the same charge.success webhook regardless of whether the customer paid via M-Pesa, card, or Pesalink.
  • ✓Pesalink is not a replacement for M-Pesa. It is a complement. Offer it alongside M-Pesa and cards to capture customers who prefer or need to pay from their bank account.

Frequently Asked Questions

Is Pesalink the same as a bank transfer?
Pesalink is a specific type of bank transfer. It uses the IPSL (Integrated Payment Services Limited) network to move money between banks in real time. On Paystack, Pesalink falls under the bank_transfer channel. When a customer selects bank transfer at Paystack checkout and chooses a participating bank, the payment goes through the Pesalink network.
Do I need a separate integration for Pesalink?
No. Pesalink is part of the standard Paystack integration. You enable it by including bank_transfer in the channels array when initializing a transaction. No additional API endpoints, credentials, or configurations are needed beyond your normal Paystack setup.
Can customers pay via Pesalink using USSD on feature phones?
Some banks support Pesalink authorization via USSD, which works on feature phones. However, the availability of USSD-based Pesalink depends on the customer bank. The more common flow uses the bank mobile app. If your audience includes feature phone users, M-Pesa is the more reliable option for that segment.
What happens if the customer closes the browser during Pesalink authorization?
If the customer closes the browser before completing authorization, the transaction remains pending until it expires. The customer is not charged. You can check the transaction status via the Paystack verify endpoint. If it shows as abandoned or expired, prompt the customer to try again.
Does Pesalink work for international payments?
No. Pesalink is a domestic Kenyan interbank network. It only works between Kenyan bank accounts. For international customers, offer card payments (Visa, Mastercard) or Apple Pay through Paystack.

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 in Kenya: M-Pesa, Pesalink and the Daraja Question

The complete guide to using Paystack in Kenya. Covers every supported payment method, the Daraja question, M-Pesa charge code, transfers to mobile wallets and paybills, Pesalink, settlement, and Kenya-specific regulatory considerations.

Read more

Accepting M-Pesa Payments Through Paystack Checkout

A step-by-step implementation guide for accepting M-Pesa payments through Paystack Checkout. Covers Initialize Transaction with the mobile_money channel, what the customer sees, webhook handling, timeout management, testing in Paystack test mode, and a complete Express.js code example from initialization to verification.

Read more

Building a Kenyan E-Commerce Checkout That Accepts M-PESA and Cards

A complete build guide for a Kenyan e-commerce checkout that accepts M-Pesa and card payments through Paystack. Covers cart management, transaction initialization with multiple channels, webhook handling for both payment types, order status updates, shipping considerations, and M-Pesa-first UX design.

Read more

Building a School Fees Portal for a Kenyan School

A complete guide to building a school fees collection system for Kenyan schools with Paystack. Student registration, term-based billing, M-Pesa and card payments, receipt generation, fee balance tracking, bulk reminders, and reconciliation with school accounts.

Read more

Why Kenyan Checkout Conversion Depends on Mobile Money Placement

In Kenya, M-Pesa is how people pay. If your checkout page shows card fields first and buries M-Pesa below the fold, you are losing customers at the point of purchase. This article covers how to prioritize mobile money in your checkout, how the Paystack channels array controls payment method ordering, mobile-first design patterns for Kenyan users, and what to do when the M-Pesa STK push fails.

Read more

Accept Payments with Paystack in Nuxt

Accept Paystack payments in a Nuxt 3 application using server routes for backend logic and Vue components for the frontend. This guide covers initializing transactions, inline popup checkout, redirect checkout, and server-side verification in a single full-stack project.

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.