Mctaba Labs logo
BootcampThe WhiteboardProjectsEventsMasterclassesWebinarsLearn
Book CallApply

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

  • Coding Bootcamp in Nairobi
  • Software Engineering Bootcamp
  • Data Science to AI Engineering
  • HighSchool Graduates Launchpad
  • AI & Business Automation
  • Corporate Training
  • Kids & Teens
  • McTaba Story & Mission
  • Full-Stack Curriculum
  • Course Pricing & Plans
  • Frequently Asked Questions

Resources

  • Join Discord Community
  • Tech Events in Nairobi
  • Masterclasses
  • Free Resources
  • Learn
  • Data Science Guides
  • African Payments Reference
  • Campus
  • Africa Tech Talent Report
  • Partner With Us
  • Start a Project
  • Software & AI Studio
  • Our Work
  • Outcomes

Contact Us

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

Office Hours:

Mon-Fri: 9am - 2pm EAT

Sat: 10am - 12pm EAT

© 2026 Mctaba Labs - A product of Edtech Industries. All rights reserved.

Privacy PolicyTerms of ServiceRefund Policy
  1. Learn
  2. African Payments Developer Reference
  3. Paystack Pesalink in Kenya: How the Bank Transfer Charge Works, Step by Step
Bonaventure OgetoBy Bonaventure Ogeto|Updated November 3, 2026

Last checked 3 November 2026

Paystack Pesalink in Kenya: How the Bank Transfer Charge Works, Step by Step

Pesalink is a Paystack bank transfer channel for registered Kenyan businesses, enabled by contacting Paystack support. A charge returns a temporary account number valid for 25 minutes and a transaction reference the customer must use as narration. A wrong amount triggers bank.transfer.rejected and an automatic refund. Checked on 3 November 2026.

In this article

  1. 1. Who can use Pesalink on Paystack, and where it sits
  2. 2. The charge request
  3. 3. What the customer must see on screen
  4. 4. Wrong amounts: bank.transfer.rejected and the automatic refund
  5. 5. When Pesalink is the right channel, and when it is not

Who can use Pesalink on Paystack, and where it sits

Imagine a furniture shop in Ngong Road. The buyer wants to pay KES 85,000 for a sofa, and an M-Pesa limit or a card decline stands in the way. A bank transfer is the natural fallback. Pesalink is the Kenyan instant bank transfer rail, and Paystack exposes it as a channel.

Paystack's channels page lists Pesalink for Kenya only, "registered businesses" only, and says it needs enablement (Paystack payment channels docs, checked on 3 November 2026). You do not turn it on in code. You contact Paystack support first.

That fits the wider picture on the African payment rails matrix: Kenya has cards, mobile money and Pesalink, while Pay with Transfer is listed for Nigeria and Ghana instead (Paystack payment channels docs, checked on 3 November 2026).

A Starter business, meaning an individual trader, is not in the "registered businesses" group. To see what registering needs in Kenya, Paystack asks for a certificate from the Business Registration Service and a KRA PIN (Paystack Kenya compliance, checked on 3 November 2026).

The charge request

You call the Charge endpoint with an email, an amount and a bank_transfer object. The object carries account_expires_at, which you set to null or to a UTC time less than 25 minutes away. Anything beyond 25 minutes defaults to 25 minutes (Paystack payment channels docs, checked on 3 November 2026).

POST https://api.paystack.co/charge
{
  "email": "buyer@example.com",
  "amount": 8500000,
  "bank_transfer": { "account_expires_at": null }
}

For example, the amount above is KES 85,000 expressed in the smallest unit; confirm the unit for your currency in the Paystack API reference before you copy it.

The response holds an account_number, a bank, the amount and a transaction_reference (Paystack payment channels docs, checked on 3 November 2026).

To practise charge requests like this against a test account, the Payment Integration for Developers course has a lab for each channel.

Get weekly developer tips

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

No spam. Unsubscribe anytime.

What the customer must see on screen

Paystack gives two instructions worth repeating. Always show the transaction_reference, because customers must use it as the narration when they transfer (Paystack payment channels docs, checked on 3 November 2026). And tell them the account lasts 25 minutes, to avoid reconciliation trouble (Paystack payment channels docs, checked on 3 November 2026).

A good screen for the sofa buyer shows four lines: bank name, account number, exact amount and the reference to type in the narration box of their banking app. Add a visible countdown. A buyer who pays at minute 26 pays into an account that has expired.

One bank exception is documented. Customers with accounts at Diamond Trust Bank (DTB) cannot make transfers through this channel (Paystack payment channels docs, checked on 3 November 2026). Offer M-Pesa or a card on the same screen so a DTB customer is not stuck.

Wrong amounts: bank.transfer.rejected and the automatic refund

The webhook charge.success confirms a good payment. If the buyer sends the wrong amount, Paystack sends bank.transfer.rejected instead, so you should ask them to retry, and Paystack refunds the invalid amount automatically (Paystack payment channels docs, checked on 3 November 2026).

  • Listen for both events. Treat charge.success as the only trigger that releases goods.
  • On bank.transfer.rejected, show a clear message and offer to create a fresh charge.
  • Verify the signature on every event. Paystack signs with HMAC SHA512 in the x-paystack-signature header (Paystack webhooks docs, checked on 3 November 2026).

Rejected amounts are a customer experience problem as much as a code problem. People round numbers in their heads, so display the exact figure and disable copy errors where you can.

When Pesalink is the right channel, and when it is not

Pick Pesalink for large orders where the buyer already has a bank app open, such as a deposit on a car hire. Pick M-Pesa for small, quick purchases, because the customer approves on a phone within 180 seconds (Paystack payment channels docs, checked on 3 November 2026). Cards cover buyers abroad.

Before you build, confirm Pesalink is enabled on your account and test it. The channel needs a registered business, so a Starter account cannot use it.

Related reading: the Paystack mobile money provider codes, what changes from sandbox to production, and how to verify a payment API in your country. To have a checkout built with all three channels, see payments integration at Mctaba Labs, or learn it yourself in the Payment Integration for Developers course.

Key Takeaways

  • ✓Pesalink on Paystack is for registered Kenyan businesses and needs enabling by Paystack support.
  • ✓Each charge returns a temporary account valid for at most 25 minutes.
  • ✓Always show the transaction reference; the customer uses it as the narration.
  • ✓A wrong amount fires bank.transfer.rejected and an automatic refund.

Frequently Asked Questions

Is Paystack Pesalink available to everyone in Kenya?
No. Paystack lists it for registered Kenyan businesses and says you contact support to enable it. Checked on 3 November 2026.
How long does a Pesalink account number last?
Twenty five minutes. You can set account_expires_at to null or to a UTC time less than 25 minutes away; later times default to 25 minutes. Checked on 3 November 2026.
What happens if a customer sends the wrong amount?
You receive a bank.transfer.rejected event and should ask the customer to retry. Paystack refunds the invalid amount automatically. Checked on 3 November 2026.
Which customers cannot pay through Pesalink on Paystack?
Paystack says customers with accounts at Diamond Trust Bank cannot make transfers through this channel. Checked on 3 November 2026.

Learn M-Pesa Daraja properly

STK push, C2B, B2C, callbacks and reconciliation, built in a live four-week course with code review.

See the payments course

Need it live by next month? Our studio builds it

Related guides

  • How to Check Whether a Payment API Really Supports Your Country

Keep reading

African Payment Rails by Country: APIs, Sandboxes and Onboarding (Checked November 2026)

A dated matrix of M-Pesa Daraja, Paystack, MTN MoMo and Airtel Money: public API, sandbox, who can onboard, official docs link, and what we could not confirm.

Read more

Paystack Mobile Money Provider Codes: mtn, atl, vod, mpesa, orange and wave by Country

Which Paystack provider code to send for each mobile money network in Ghana, Kenya and Côte d'Ivoire, with the M-Pesa variants and the 180-second rule.

Read more

Payment API Sandbox to Production in Africa: What Changes on Paystack, Daraja and MTN MoMo

A side by side look at the go-live step on Paystack, Daraja and MTN MoMo, with who approves you, what you submit and what behaves differently once money is real.

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.

Paystack for African Developers

Complete Paystack engineering resource. 653 articles covering every API, every error, and every integration pattern African developers actually need.

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 and CEO, Mctaba Labs

Software engineer for 8+ years. He runs a Nairobi studio that ships products on M-Pesa, WhatsApp and AI, and teaches what the studio ships.

More about the author