The verdict in three sentences
The Collections API collects a payment without leaving your site: you trigger a request, the customer approves on their phone (USSD or app), and your server receives the status. In Ghana, MTN MoMo applies a 1 % merchant fee with a GHS 5,000 per-transaction cap; the OAuth token expires in 3,600 s, forcing clean refresh handling. The key decision: a dynamic OAuth token (recommended) over a static key, plus a disciplined move from sandbox to production.
OAuth, sandbox and retry: the server architecture
Authentication happens in two steps: your credentials (API user + key) exchange for an access token valid one hour, which you then attach to every collection request. Never hardcode this token: cache it with an expiry and regenerate it as it nears 3,600 s.
| Parameter | MTN MoMo Ghana | Orange Money Benin |
|---|---|---|
| Merchant fee | 1 % | 1.5 % |
| Per-transaction cap | GHS 5,000 | Per KYC |
| Merchant KYC delay | 24-72 h | 48 h |
| Token lifetime | 3,600 s | 3,600 s |
| Test environment | Dedicated sandbox | Dedicated sandbox |
| Collection request TTL | 30 s | 30 s |
The retry strategy is non-negotiable: a collection request can fail on a network timeout while the payment actually succeeds on the customer side. Plan for a maximum of 3 attempts with exponential backoff (2 s, 4 s, 8 s) and an idempotency key so you never charge twice.
From sandbox to production without breakage
The sandbox mirrors the API but with test numbers and fake amounts. Validate these scenarios before switching over.
| Scenario to test | Expected | Where |
|---|---|---|
| Successful payment | SUCCESS status + webhook | Sandbox |
| Customer cancels on phone | FAILED status | Sandbox |
| Network timeout (>30 s) | Retry then PENDING | Sandbox |
| Expired token | Auto regeneration | Sandbox |
| Over-cap amount | Clean rejection | Sandbox |
| First real payment | SUCCESS < 30 s | Prod (small amount) |
In production, run a first real low-value collection (GHS 1) to validate the full chain before opening to the public.
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, who runs an airtime top-up platform in Kumasi, collected via an external link: customers left the site, got lost, rarely returned. Wiring in the MoMo Collections API, payment now happens on-site in under 30 seconds. On 900 transactions/month at an average GHS 30, his volume of GHS 27,000 now completes at a far higher rate. On that volume the 1 % fee is GHS 270, but cutting abandoned baskets brings back the equivalent of 150 extra transactions per month, i.e. GHS 4,500 in recovered revenue.
FAQ
Static key or OAuth token? The dynamic OAuth token is recommended: it expires in 3,600 s and regenerates automatically, limiting exposure if leaked. A static key is simpler but riskier.
How long is the merchant KYC in Ghana? MTN MoMo typically validates in 24-72 h with company documents (registration, director's ID, merchant details).
What if the collection request times out? You retry with exponential backoff (max 3 attempts) and an idempotency key. Status stays PENDING until the final webhook, never blindly confirmed.
Can you test without real collections? Yes — the sandbox reproduces every scenario (success, cancel, timeout) with fake numbers and amounts before the production switch.
What fee does MTN MoMo charge? In Ghana, budget 1 % per merchant collection (2026 order of magnitude), versus 1.5 % for Orange Money in Benin.
Let's talk about your project. We integrate the MTN MoMo Collections API with OAuth, retry and webhooks tested in sandbox then prod. 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.

