The verdict in three sentences
In 2026, a non-hardened mobile money checkout shows an 8 to 15 % failure rate: that is not normal, it is fixable. Most failures come from three mechanical causes: USSD/STK window timeouts, insufficient balance, and lost callbacks between the provider and your server. By instrumenting each error code and adding retry logic, you often halve the failure rate and recover already-lost sales.
Mapping the causes of failure
Every failure has a signature. Here is a 2026 order of magnitude of observed frequencies across providers, with the matching fix:
| Cause | Frequency | Fix |
|---|---|---|
| USSD / STK push timeout (30-60 s) | 30 % | Extend window, in-app nudge, push reminder |
| Insufficient balance | 22 % | Clear message + top-up link + D+1 retry |
| Lost provider callback | 16 % | Reconciliation via status polling |
| Wrong PIN / cancellation | 14 % | Allow 2 attempts, visual guide |
| Unstable network | 10 % | Automatic retry, queue mode |
| Invalid number / wallet | 8 % | Format validation before sending |
The most insidious is the lost callback: the customer paid, but your server never received the confirmation. The order stays "pending", the customer is charged, and you think it failed. Without status polling reconciliation, you lose sales you already collected.
Validity windows and codes per provider
Each provider imposes its own delays and returns its own codes. Knowing them avoids blaming the wrong cause.
| Provider | Validation window | Typical failure behaviour |
|---|---|---|
| MTN MoMo | ~60 s, callback API | Callbacks sometimes delayed/lost |
| M-Pesa (STK push) | 60 s expiry | STK expires fast, re-trigger the prompt |
| Wave | ~60 s deep-link | Status via webhook, polling advised |
| Orange Money | 30-60 s USSD | Frequent timeout, retry recommended |
| Flutterwave / Paystack | Varies | Log response codes per channel |
The 2026 rule: never trust a single signal. Combine webhook (fast when it arrives) and status polling (safety net). A job that checks status at 15 s, 45 s then 2 min catches most lost callbacks.
Need a professional website?
Kolonell builds websites that attract clients, optimized for the Sénégalese market. Free quote in 2 minutes.
Mini case study
Kwame runs an online grocery in Accra. He processes 1,500 payment attempts per month with an average order of GHS 260. His failure rate is 13 %, or 195 failed payments and GHS 50,700 in sales that never complete.
After instrumentation: status polling (recovers lost callbacks), an insufficient-balance message with a top-up link, and an automatic D+1 retry. His failure rate drops to 6 %. He recovers 105 payments, or GHS 27,300 per month in sales previously lost, for a technical fix shipped in one week.
FAQ
A customer was charged but the order is "pending", what do I do? That is a lost callback. Add server-side status polling: your system re-queries the provider and confirms the order automatically, with no manual work and no double charge.
Why does M-Pesa STK push fail so often? The STK prompt expires in 60 seconds. If the customer hesitates or switches screens, it disappears. Provide a "resend payment request" button to re-trigger the prompt immediately.
Can insufficient-balance failures be recovered? Partly, yes. A clear top-up message plus an automatic D+1 retry with a WhatsApp nudge often recovers 20 to 35 % of these failures.
What failure rate is acceptable in 2026? A well-hardened checkout targets 5 to 7 % failures. Above 10 %, there is almost always an unhandled callback or timeout-window issue.
Should I log error codes? Absolutely. Without logging codes per provider, you fly blind. A failure-by-cause dashboard is the first tool to reduce the failure rate for good.
Let's talk about your project. We instrument your failures, add polling and retries, and recover sales you already collected. WhatsApp +221 77 596 93 33.
Mohamed Bah
Fondateur, Kolonell
Passionate about digital and entrepreneurship in Africa, Mohamed has been helping Sénégalese businesses with their digital transformation since 2020. Founder of Kolonell, he believes every SME deserves a professional and accessible online présence.

