Refunding a Pesapal payment
How Pesapal refunds work for card and mobile-money payments a Kenyan business has taken: completed payments only, one request each, and merchant approval.
By Achekam · · 4 min read · For Running a business businesses in Kenya
A guest cancels a safari deposit. A customer returns one of three items bought online. Someone is charged twice because the payment page was refreshed. If the money came in through Pesapal, the way it goes back is governed by Pesapal's refund rules, and those rules differ between cards and mobile money in ways that matter.
Some refund mistakes cannot be corrected with a second attempt. This article sets out Pesapal's rules, the two-step approval that finalises a refund, and how refunds are handled at the till and on invoices in Achekam.
Only completed payments can be refunded
Pesapal says a refund can only be made on a payment with status COMPLETED, and cannot exceed the amount originally collected.
Pesapal's status codes are 0 INVALID, 1 COMPLETED, 2 FAILED and 3 REVERSED. Only the second can be refunded. A payment that shows as failed has nothing to refund through Pesapal, so check the status before promising a customer anything. The ceiling is equally firm: a goodwill gesture larger than the original payment has to be made another way.
Card refunds can be partial; mobile money in full only
Pesapal says card payments can be refunded partly or fully, but mobile money payments can only be refunded in full, and refunds are made in the currency of the original payment.
That difference shapes what you can offer. A customer who paid by card for three items and returns one can have that item's price refunded through Pesapal. A customer who paid the same order by mobile money cannot receive a partial refund through Pesapal: the choice is the whole payment or nothing. If only part is owed, agree with the customer another way to settle it, such as a credit on their account or a separate payment, and record which you chose.
The currency rule matters for businesses selling in more than one currency: the refund goes back in the currency the customer paid, whatever currency your books are kept in.
One refund request per payment
Pesapal says only one refund request is allowed per payment.
For card payments, this is where care pays off. If you refund part of a card payment, you cannot come back later and refund another part through Pesapal. Before you request a partial refund, make sure the amount is final: the customer has returned everything they are going to return, and any fees or deductions have been agreed. If in doubt, wait until the position is settled.
A worked example in words: a customer pays a deposit by card for a two-night stay, then cancels one night. The business's policy keeps a cancellation charge. Rather than refunding the night at once and the charge question later, the business works out the final amount owed back, net of the charge, and makes one refund request for exactly that. Had the customer paid the deposit by mobile money, Pesapal could only refund the whole deposit, so the business would instead agree another way to return the part that is owed.
Merchant approval before Pesapal finalises
Pesapal says a refund request needs the payment's confirmation code, the amount, the username of the person initiating it and remarks. It advises merchants to store every confirmation code returned by GetTransactionStatus for that reason.
Pesapal also says a 200 response to a refund request only means the request was received. The refund must still be approved by the merchant before Pesapal finalises it.
That gives a natural two-person control. One person, often the one dealing with the customer, initiates the refund with the confirmation code, amount and remarks. A second person, a manager or owner, reviews and approves it. A refund that was requested but never approved is still sitting there, and the customer is still waiting: check for those regularly.
Till refunds through Pesapal and invoice refunds by hand in Achekam
Achekam handles the two kinds of Pesapal payment differently.
At the till. Refunds of Paystack, Flutterwave, Stripe and Pesapal till payments are sent back through the provider. A provider refund counts as completed only on the provider's own confirmation. Refunds at the till need a supervisor or manager, so the two-person principle applies at the counter too. PayFast, Ozow, Peach and M-Pesa refunds are different: they are made in the provider's own portal and recorded at the till with a reference.
On invoices. A refund of an online invoice payment is not sent through the gateway by Achekam today. It is made in the gateway's own dashboard, here Pesapal's, and then recorded in Achekam by a person. Customer receipts can be re-allocated, and administrators can refund or reverse them, so the books follow what happened in Pesapal.
For an M-Pesa payment taken directly rather than through Pesapal, the route is the M-PESA org portal; see refunding M-Pesa payments by hand.
Keeping confirmation codes
Every refund starts with a confirmation code, so the record-keeping starts at the moment of payment. For each completed Pesapal payment, keep:
- the confirmation code from the status check;
- the payment method, which decides whether a partial refund is possible;
- the amount and currency.
For each refund, add:
- who requested it, who approved it, and when;
- the amount and the reason given in the remarks;
- Pesapal's confirmation that the refund was finalised.
Status checks and where confirmation codes come from are explained in Pesapal payment notifications and status checks. Travel businesses handling cancelled deposits will find more in taking Pesapal payments in Kenyan travel.
Pesapal's refund request guide explains how to request a refund of a completed payment using its confirmation code, the amount, the user making the request and remarks.
General guidance only, not advice on your own circumstances. Tax and payroll rules change: check the current position with the authority or your adviser.