How We Engineered Payments Across 12 African Currencies
Building a multi-currency payment system for Africa isn't just an exchange rate problem. Here's a deep dive into the technical and operational challenges we solved.
Kofi Mensah
Lead Engineer at Xtopay
When we started building Xtopay, one of the first hard decisions was how to handle currency. Africa has 54 countries and 42 active currencies. Our initial target market — West and East Africa — already spans GHS, NGN, KES, XOF, TZS, UGX, and several others. Each has different volatility profiles, settlement timelines, and float requirements.
The naive approach we avoided
The tempting path is to denominate everything in USD internally and convert at the edges. Many payment processors take this approach. The problem is that it creates a hidden cost layer for merchants: they collect in local currency, we convert to USD, then convert back to local for settlement. Two conversions, two spread charges, and the merchant has no visibility into the effective rate they received.
Our multi-currency ledger design
Instead, we built a multi-currency ledger where each merchant has isolated wallet balances per currency. A transaction in GHS settles to a GHS balance. A transaction in NGN settles to an NGN balance. Payouts are made from the matching currency balance. No implicit conversion happens unless the merchant explicitly requests it.
This design means merchants always know exactly what they earned in the currency they earned it in. Conversion becomes an explicit, opt-in operation with a transparent rate shown before confirmation.
Handling exchange rate risk
We refresh exchange rates every 15 minutes from multiple sources and use a weighted median to prevent rate manipulation. For transactions above a threshold size, we lock the rate at payment initiation and hold it for 90 seconds — enough time to complete the payment flow without the merchant facing unexpected rate shifts on large transactions.
Settlement timing differences
Mobile money settles in near-real-time. Bank transfers can take T+1 to T+3 depending on the network and country. Card transactions involve a 24-48 hour hold period. Our settlement engine unifies these into a consistent experience: funds show as 'pending' until they're truly settled, and the settlement timeline is surfaced clearly in the dashboard.
- Mobile money: T+0 (same day, usually within minutes)
- Local bank transfer: T+1 to T+2
- Card (Visa/Mastercard): T+2 with chargeback reserve
- Cross-border transfers: T+3 to T+5 depending on correspondent banking
Kofi Mensah
Lead Engineer at Xtopay
Building the high-fidelity payments infrastructure and cryptographic double-entry ledgers for emerging African business ecosystems.
