Last checked
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.
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).
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.
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.
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).
charge.success as the only trigger that releases goods.bank.transfer.rejected, show a clear message and offer to create a fresh charge.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.
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.
STK push, C2B, B2C, callbacks and reconciliation, built in a live four-week course with code review.
See the payments course