The verdict in three sentences
Between 15 and 30% of MTN MoMo collection failures are not real declines: they are USSD or network timeouts that are recoverable. A well-tuned retry + status-poll loop (poll every 5s up to 90s, exponential backoff over 3 attempts) converts 8 to 14 points of pending collections into successful ones. The key is idempotency: a unique external reference per transaction so you never charge the customer twice.
Anatomy of a transient failure
When a customer approves an MTN MoMo payment, the operator opens a USSD prompt window of 60 to 120 seconds. If the network hiccups or the customer types slowly, the transaction stays pending, neither failed nor confirmed. Without a status poll, your system wrongly marks it failed and loses the sale, even though the money may already have moved.
| Parameter | Recommended 2026 value |
|---|---|
| MoMo USSD prompt window | 60 to 120s |
| Poll interval | Every 5s |
| Max poll duration | 90s |
| Retry attempts | 3 (exponential backoff) |
| Backoff between attempts | 5s, 15s, 45s |
| Idempotency key | Unique external reference |
Taxonomy of the 6 failure codes
| Code | Type | Recoverable? | Action |
|---|---|---|---|
| USSD timeout | Transient | Yes | Poll status then retry |
| Network error | Transient | Yes | Retry with backoff |
| Insufficient balance | Terminal | No | Nudge customer (SMS) |
| Wrong PIN | Terminal | No | New customer attempt |
| Customer cancelled | Terminal | No | Offer another method |
| Blocked account | Terminal | No | Redirect to operator |
The rule: transient codes go into the automatic retry loop, terminal codes go to a customer nudge. On the MTN MoMo Collections API this same mechanism lifts pending-to-successful conversion by 8 to 14 points.
Mini case study
Need a professional website?
Kolonell builds websites that attract clients, optimized for the Sénégalese market. Free quote in 2 minutes.
Kwame sells event tickets in Accra, 2,000 transactions/month at GHS 60 each. His raw failure rate is 22%, of which he estimates 60% are transient. Without retry he loses 440 transactions/month. Adding the retry + poll loop, he recovers ~12 points, saving 240 transactions, roughly GHS 14,400/month of added revenue, without a single extra cedi of ad spend.
FAQ
How do I avoid charging the customer twice? With an idempotency key: every attempt reuses the same unique external reference. The operator recognizes the transaction and never doubles the charge.
What poll cadence is optimal? Polling every 5 seconds up to 90 seconds covers the USSD window (60 to 120s) without hammering the API. Beyond that, switch to retry with backoff.
How many retry attempts? Three, with exponential backoff (5s, 15s, 45s). Beyond that the failure is likely terminal and a customer nudge via SMS or WhatsApp works better.
Does it also work for Orange Money? Yes, the same mechanism on the Orange Money API improves conversion by 8 to 14 points. The code taxonomy is adapted per operator.
What realistic gain should I expect? As an order of magnitude, recovering 8 to 14 points of pending collections. On a 22% failure rate at meaningful volume, that is often thousands of cedis a month.
Let's talk about your project. We audit your MoMo failure rate and wire an idempotent retry loop. 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.
