Card and mobile-money payments through Pesapal
How a Kenyan tour operator or travel agency can take card and mobile-money payments for trips through Pesapal, with each one confirmed before it counts.
By Achekam · · 4 min read · For Travel businesses in Kenya
A family in Nairobi has agreed a Maasai Mara weekend. A corporate client in Mombasa wants to pay for a team retreat. A traveller in Kampala is booking a Kenyan safari from abroad. Some of them will pay by M-Pesa, some by card, and the corporate client wants a proper invoice first.
Pesapal is one way to handle all three from a single pay link. Clients can pay a shilling invoice by card or mobile money, and the payment arrives in your books already tied to the invoice. This article walks through setting it up in Achekam, what happens behind each payment, and the other routes a Kenyan client can use.
Setting up Pesapal with your own keys
A Kenyan business can take Pesapal card and mobile-money payments in shillings, using its own Pesapal merchant account and keys. Paystack and Flutterwave can be set up the same way with their own keys if you use them as well.
The setup sits with your workspace administrator. Under Settings, in Payment Gateways & Checkout, the administrator enters the business's own Pesapal credentials and can test the connection with a real call to Pesapal. Once saved, secrets are shown only as set or by their last four characters. Other users can see the settings but cannot save them, which keeps the keys with the person responsible for them.
Run the connection test before the first client pays. A wrong key discovered by a client on a Saturday morning is a lost booking.
Shilling invoices
A workspace registered as Kenyan at sign-up uses the Kenya pack by default, and activating it sets the shilling and the Africa/Nairobi time zone unless they are already set. Pesapal settles shillings, so a shilling invoice can carry a Pesapal pay link.
Two details are worth knowing before you invoice:
- Use the invoice form under Accounting. It follows Kenya's tax codes. The New invoice form under Billing & Finance offers only 15% or 0% VAT and shows rand, so it does not follow Kenyan VAT.
- Choose a tax code per line. Each line takes a code: standard, zero-rated, exempt, out of scope or reverse charge, and only standard lines carry VAT, at the approved rate for Kenya. While Achekam's Kenyan VAT rate rule is awaiting platform approval, a standard-rated line is refused with a message asking you to choose a code without VAT or wait. Your tax adviser should confirm which code each part of a trip takes.
Once the invoice is issued, create its pay link and e-mail it with the invoice, or copy it into a message. There is no link for a draft or a voided invoice. A link lasts 14 days by default, and an open link for the same amount is reused.
Confirmed with Pesapal before it counts
Each Pesapal payment is confirmed with Pesapal before it counts. Pesapal's notifications carry no payment status of their own, so when one arrives Achekam asks Pesapal for the transaction's status before recording anything. A notification on its own never marks a booking as paid. Pesapal's developer documentation on GetTransactionStatus explains how a payment's final status is confirmed using the order tracking ID that comes back in the callback or notification.
When the payment is confirmed, it is recorded as a receipt against the invoice, debiting the Pesapal clearing account and crediting trade receivables. The invoice shows as paid, or part-paid if the client paid only the deposit. The amount is checked against what the link asked for, and a repeated notification never pays twice.
When a notification goes missing
Mobile networks drop, and sometimes a notification simply does not arrive. For Pesapal, as for M-Pesa and Paystack, a payment whose notification never arrived is still picked up: the server asks Pesapal about open payments on a schedule, and also while the client still has the pay page open.
For you this means a client who paid and then lost signal does not have to send a screenshot to prove it. The payment is checked with Pesapal and recorded against their invoice in the normal way.
Other ways to pay a shilling invoice
Pesapal is not the only route. A shilling invoice can be paid through M-Pesa, Pesapal, Paystack, Flutterwave, Peach or bank transfer. A gateway that cannot settle the invoice's currency is refused.
| Route | How it works |
|---|---|
| M-Pesa prompt | You send a payment prompt to the client's phone; the payment is confirmed with Safaricom before it counts |
| M-Pesa paybill or till | A payment quoting an open invoice number as the account number is receipted automatically; others wait for a person to allocate |
| Pesapal | Card or mobile money on the pay page, confirmed with Pesapal |
| Bank transfer | Bank details and a reference on the pay page; a staff member marks it received when it shows on the statement |
M-Pesa prompts request whole shillings only, so any cents stay due on the invoice, and production use needs Safaricom's Go-Live. For the paybill route, tell clients to use the invoice number as the account number; that one instruction saves a lot of manual allocation.
Refunds and payouts
Refunds of online invoice payments are not sent through Pesapal by Achekam. They are made in Pesapal's own dashboard and recorded by a person; refunding a cancelled trip paid online sets out the steps. Pesapal also pays you out on its own schedule, and those payouts and their fees are covered in matching gateway payouts and fees to your books.
Your first Pesapal booking
Enter the keys, test the connection, raise one shilling invoice for a real booking from the Accounting form and send the pay link. Watch it move from issued to paid. Once you have seen one payment arrive cleanly, the rest is routine.
General guidance only, not advice on your own circumstances. Tax and payroll rules change: check the current position with the authority or your adviser.