The verdict in three sentences
In Senegal, most "failed" payments are not declines: they are *pending* states the code wrongly marks as lost. About 60% of these pendings resolve on their own within 30 to 180 seconds if you poll the provider instead of abandoning the transaction. The right reflex is not blind retrying, but applying a decision tree by error code.
The decision tree by error code
Each code calls for a precise action. Confusing a network timeout with insufficient funds loses recoverable sales (2026 order of magnitude).
| Error code | Share of failures | Real cause | Correct action |
|---|---|---|---|
| USSD timeout | 25-35% | Customer too slow / network | Poll then push reminder |
| Insufficient funds | ~30% | Genuinely low balance | Offer another method / later |
| Invalid PIN | 10-15% | Entry mistake | Immediate retry |
| Network error | 3-8% | Operator outage | Auto retry after delay |
| Unresolved pending | remainder | Status in transit | Poll 10s for 3 min |
The golden rule: never mark "failed" before polling. A misclassified pending is a lost sale and a customer who may already have been charged.
The delays and thresholds to wire
Mobile money debugging is a matter of timing. These 2026 values frame the polling strategy.
| Parameter | 2026 benchmark | Role |
|---|---|---|
| USSD timeout | 120s | Customer entry window |
| Self-resolving pending | ~60% | Wait, don't retry |
| Provider resolution delay | 30-180s | Polling window |
| Polling frequency | Every 10s | For 3 min |
| Network failure rate | 3-8% | Auto retry |
| Insufficient funds | ~30% of failures | Not directly recoverable |
Key point: polling every 10 seconds for 3 minutes covers 95% of natural resolutions. Beyond that, the status is genuinely stuck and you switch to reminders.
Mini case study
Moussa runs a top-up platform in Dakar: 1,000 payments/day, 12% of which show up as "failed," i.e. 120 transactions. Auditing the logs, he finds 60% of those failures were unpolled pendings, i.e. 72 transactions per day. At a 5,000 FCFA average ticket, that was 360,000 FCFA/day falsely lost. By wiring a 10s / 3 min poll, he recovers the bulk: over 10 million FCFA of volume saved per month.
Need a professional website?
Kolonell builds websites that attract clients, optimized for the Sénégalese market. Free quote in 2 minutes.
FAQ
Why does a payment stay "pending" so long?
Because the confirmation travels between the operator, the provider and your server. That trip takes 30 to 180 seconds; 60% of pendings resolve on their own in that window if you poll instead of abandoning.
Should I automatically retry a failed payment?
Only for network errors (retry after a delay). For insufficient funds, retrying is pointless; for an invalid PIN, let the customer re-enter immediately.
How long should I poll before concluding failure?
Query the provider every 10 seconds for 3 minutes. That window catches 95% of natural resolutions; beyond it, the status is genuinely stuck.
Can the customer be charged while I see a failure?
Yes, that is the danger of a misclassified pending: the debit goes through but your system believes it failed. Hence the duty to reconcile by polling before any refund or reminder.
What is the top real cause of failure in 2026?
Insufficient funds, about 30% of failures. It is the only case not immediately recoverable; offer another method or a later reminder.
Let's talk about your project. We audit your payment logs and wire the polling that turns your false failures into sales. 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.

