Paystack operates in six African countries: Nigeria, Ghana, South Africa, Kenya, Rwanda, and Cote d'Ivoire. Each market offers different payment channels, settles in a different local currency, and has unique compliance and onboarding requirements. The API surface is the same everywhere, but the checkout experience your customers see changes significantly by country.
Paystack launched in Nigeria in 2016. Since then, it has expanded to five more African countries: Ghana, South Africa, Kenya, Rwanda, and Cote d'Ivoire. All six markets are live and accepting payments. If you are building a product for African customers, understanding what each country offers (and what it does not) will save you weeks of integration surprises.
The core API is identical across all six countries. You call POST /transaction/initialize the same way whether the customer is in Lagos or Nairobi. The response structure is the same. The webhook format is the same. What changes is the set of payment channels available at checkout, the settlement currency, the onboarding documents Paystack asks for, and the regulatory environment your business sits inside.
This guide walks through each country individually, then covers the strategic questions: where to launch first, how to handle multi-country checkouts, and how compliance and onboarding differ across borders.
For the full technical reference on how Paystack works under the hood, see Paystack: The Complete Engineering Guide for African Developers.
Nigeria is where Paystack started, and it remains the most feature-complete market. If a feature exists anywhere in Paystack, it almost certainly exists in Nigeria first.
NGN (Nigerian Naira). Paystack settles to your Nigerian bank account. Settlement timelines are typically next-business-day for established accounts, though this can vary. [TODO: verify on paystack.com/pricing]
To go live in Nigeria, Paystack requires your CAC (Corporate Affairs Commission) certificate, the BVN (Bank Verification Number) of a director, and your bank account details. Sole proprietors can also register, but the documents differ slightly. Expect the review process to take a few business days.
Nigeria has the highest transaction volume on Paystack. The bank transfer channel alone can account for 40-60% of checkout completions for consumer-facing products. If you only enable cards, you are leaving money on the table. Build your checkout to surface bank transfer prominently.
For the full breakdown, read Paystack in Nigeria: Complete Developer Guide. For payment channel details, see Payment Methods Available on Paystack in Nigeria.
Get weekly developer tips
Join 25,000+ developers. Practical guides, job tips, and new content — straight to your inbox.
No spam. Unsubscribe anytime.
Ghana is Paystack's second-largest market, and mobile money dominates here. If you are building for Ghanaian customers and you do not support mobile money, you are ignoring how most people actually pay.
GHS (Ghanaian Cedi). Paystack settles to your Ghanaian bank account. [TODO: verify on paystack.com/pricing]
You need a Ghana Revenue Authority TIN (Tax Identification Number), your business registration certificate, and a Ghanaian bank account. Paystack may also request the ID of a director. The onboarding process is similar in length to Nigeria.
Mobile money is not just popular in Ghana. It is the default. Many Ghanaian users do not have bank accounts or debit cards. Your checkout flow should present mobile money as the first option. The user experience is slightly different from card payments: the customer enters their number, waits for a prompt on their phone, enters their PIN, and the payment confirms. This takes 10 to 30 seconds, which means your UI needs to handle the waiting state gracefully.
For the full breakdown, read Paystack in Ghana: Complete Developer Guide.
South Africa has the most developed banking infrastructure on the continent, and the checkout experience reflects that. Card penetration is high, and electronic fund transfers (EFT) are a well-established payment rail.
ZAR (South African Rand). Paystack settles to your South African bank account. [TODO: verify on paystack.com/pricing]
South Africa has strict financial regulation. You need a CIPC (Companies and Intellectual Property Commission) registration, a South African bank account, the ID of a director, and your tax registration. The Financial Intelligence Centre Act (FICA) requirements mean Paystack may ask for additional KYC documents depending on your business type and expected transaction volumes.
South African customers are accustomed to card payments in a way that customers in other African markets are not. You do not need to push bank transfer as aggressively here. However, the regulatory environment is more demanding. Plan for a longer onboarding process and more documentation than you would need in Nigeria or Ghana.
For the full breakdown, read Paystack in South Africa: Complete Developer Guide.
Kenya is the birthplace of mobile money. M-Pesa is so deeply embedded in daily life that many Kenyans use it more often than their bank accounts. This shapes everything about how you accept payments in Kenya through Paystack.
KES (Kenyan Shilling). Paystack settles to your Kenyan bank account. For details on settlement timelines and payout mechanics, see Settlement and Payouts on Paystack in Kenya. [TODO: verify on paystack.com/pricing]
You need a KRA (Kenya Revenue Authority) PIN, your business registration certificate (from the Registrar of Companies), a Kenyan bank account, and the national ID of a director. Kenya's data protection law (the Data Protection Act, 2019) also applies, so you need to handle customer data carefully.
The biggest question developers in Kenya ask is: should I use Paystack for M-Pesa, or should I integrate with Safaricom's Daraja API directly? The tradeoff is real. Paystack gives you a unified API and handles compliance, but the M-Pesa experience goes through Paystack's checkout page, which adds a step compared to a direct STK Push. Direct Daraja gives you full STK Push control (the payment prompt appears directly on the user's phone without any browser step), but you take on the compliance, callbacks, and reconciliation yourself.
If you are building a multi-country product and want one API for everything, Paystack makes sense. If you are building a Kenya-only product where M-Pesa checkout speed is critical, you may want Daraja directly or a hybrid approach.
For the full breakdown, read Paystack in Kenya: Complete Developer Guide. For checkout UX patterns, see Building a Local Checkout Experience for Kenya.
Rwanda is one of Paystack's newer markets. The payment landscape here is shaped by mobile money adoption and the government's push toward a cashless economy.
RWF (Rwandan Franc). Paystack settles to your Rwandan bank account. [TODO: verify on paystack.com/pricing]
You need an RDB (Rwanda Development Board) business registration, a Rwandan bank account, a TIN from the Rwanda Revenue Authority, and the ID of a director. Rwanda's regulatory environment is relatively streamlined compared to some other African markets, but the documentation requirements are still real.
Rwanda's market is smaller than Nigeria, Ghana, or Kenya, but transaction volumes are growing. If you are expanding into East Africa, Rwanda pairs well with Kenya. The mobile money infrastructure is solid, and the business registration process is famously efficient (Rwanda consistently ranks high on ease of doing business indices). However, the smaller market size means your transaction volumes may take longer to scale.
For the full breakdown, read Paystack in Rwanda: Complete Developer Guide.
Cote d'Ivoire is Paystack's first francophone market. This matters more than you might think, because the currency, the banking system, and the regulatory framework are all different from anglophone West Africa.
XOF (West African CFA Franc). The CFA franc is pegged to the Euro, which means the exchange rate is stable. Paystack settles to your Ivorian bank account. [TODO: verify on paystack.com/pricing]
You need a RCCM (Registre du Commerce et du Credit Mobilier) registration, a local bank account, a tax identification number, and the ID of a director. Documentation is typically in French. If your team operates in English, factor in time for translation and navigation of French-language regulatory processes.
Cote d'Ivoire gives you access to the broader UEMOA (West African Economic and Monetary Union) zone, which shares the CFA franc. If you plan to expand into Senegal, Burkina Faso, Mali, or other UEMOA countries, starting with Cote d'Ivoire builds familiarity with the currency and regulatory patterns you will encounter across the region.
The language barrier is real. Your checkout experience should be in French. Your customer support should handle French. Your compliance documentation will be in French. If your team is entirely anglophone, budget extra time for this market.
For the full breakdown, read Paystack in Cote d'Ivoire: Complete Developer Guide.
Here is a side-by-side view of what is available where. This table saves you from reading six different documentation pages when you are deciding which channels to support.
| Channel | Nigeria | Ghana | South Africa | Kenya | Rwanda | Cote d'Ivoire |
|---|---|---|---|---|---|---|
| Visa / Mastercard | Yes | Yes | Yes | Yes | Yes | Yes |
| Verve | Yes | No | No | No | No | No |
| Bank transfer / EFT | Yes | Yes | Yes | Pesalink | No | No |
| Mobile money | No | MTN, Vodafone, AirtelTigo | No | M-Pesa | MTN MoMo | Orange, MTN |
| USSD | Yes | No | No | No | No | No |
| Dedicated virtual accounts | Yes | No | No | No | No | No |
| QR code | Yes | No | No | No | No | No |
| Apple Pay | Yes | No | Yes | No | No | No |
| Settlement currency | NGN | GHS | ZAR | KES | RWF | XOF |
A few things stand out. Nigeria is the only country with USSD, dedicated virtual accounts, QR, and Verve card support. Mobile money is available in four countries (Ghana, Kenya, Rwanda, Cote d'Ivoire) but the specific providers differ. Cards are universal, but they are not the primary payment method in most of these markets.
Check Paystack's documentation for the most current channel availability, as new channels are added periodically.
If you are building a product that could serve multiple African markets, you need to pick a starting point. Here is how to think about it.
This sounds obvious, but it is the most common mistake. Founders pick Nigeria because it has the most payment channels, or South Africa because it has the highest GDP per capita. That is backwards. Pick the country where you already have users, or where your first 100 paying customers will come from. Payment infrastructure is only useful if there are people on the other end.
If your product serves university students in Accra, mobile money is not optional. It is the whole game. If you are selling B2B software to South African companies, card payments and EFT will cover 95% of your transactions. If you are building a ride-hailing app in Nairobi, M-Pesa is the expected payment method. The country choice and the channel choice are the same decision.
Some countries are faster to get live in than others. Nigeria and Rwanda have relatively straightforward onboarding. South Africa has FICA requirements that can add time. Cote d'Ivoire requires French-language documentation. If speed to market matters, pick the country where you can get through compliance fastest.
You will receive settlements in the local currency of each country. If you are a Kenyan company collecting payments in Nigeria, your NGN settlements go to a Nigerian bank account. You then need to move that money to Kenya, which means foreign exchange and cross-border transfer costs. If you do not have a bank account in the country, you cannot receive settlements there at all. This is a hard constraint, not a preference.
The practical advice: start with one country. Get your integration solid, your webhook handlers reliable, your reconciliation clean. Then expand. Multi-country from day one is a recipe for bugs in production and money sitting in bank accounts you cannot access.
Once you are live in more than one country, you need to think about how your checkout handles multi-country scenarios. Paystack does not have a single "multi-country" mode. You manage it yourself.
This is how Paystack works. Each country has its own business profile, its own API keys (public and secret), its own settlement account, and its own webhook URL (or you can share a webhook URL and route by examining the payload). There is no unified multi-country account.
In your backend, this means you store multiple sets of Paystack credentials. When a customer initiates a payment, your system needs to know which country they are paying in and use the corresponding secret key.
// Example: selecting the right Paystack key by country
const paystackKeys = {
NG: process.env.PAYSTACK_SECRET_KEY_NG,
GH: process.env.PAYSTACK_SECRET_KEY_GH,
ZA: process.env.PAYSTACK_SECRET_KEY_ZA,
KE: process.env.PAYSTACK_SECRET_KEY_KE,
RW: process.env.PAYSTACK_SECRET_KEY_RW,
CI: process.env.PAYSTACK_SECRET_KEY_CI,
};
function getPaystackKey(countryCode) {
const key = paystackKeys[countryCode];
if (!key) {
throw new Error('Paystack not configured for country: ' + countryCode);
}
return key;
}
You have a few options. You can let the customer select their country explicitly (a dropdown on your pricing page or during signup). You can infer it from their phone number format. You can use IP geolocation as a hint (but never as the sole determinant, because VPNs and diaspora users exist). The most reliable approach is to ask. If someone is paying in KES, they should have actively selected Kenya.
Each country uses a different currency with a different smallest unit. NGN uses kobo (1 NGN = 100 kobo). GHS uses pesewas. KES uses cents. ZAR uses cents. RWF is already the smallest unit (no subdivision). XOF is also the smallest unit. Getting this wrong means you charge your customer 100x too much or 100x too little.
// Currency multipliers for Paystack amount conversion
const currencyMultipliers = {
NGN: 100, // kobo
GHS: 100, // pesewas
ZAR: 100, // cents
KES: 100, // cents
RWF: 1, // no subdivision
XOF: 1, // no subdivision
};
function toSmallestUnit(amount, currency) {
const multiplier = currencyMultipliers[currency];
if (!multiplier) {
throw new Error('Unknown currency: ' + currency);
}
return Math.round(amount * multiplier);
}
If you use a single webhook endpoint for all countries, you need to verify the signature with the correct secret key. The signature is generated using the secret key of the Paystack account that processed the transaction. One approach: try verifying against each key until one matches. A better approach: use a different webhook path per country (e.g., /webhooks/paystack/ng, /webhooks/paystack/ke) so you know which key to use before you verify.
Every country has its own compliance requirements, and they are not just checkboxes. The documents you need, the review timelines, and the ongoing obligations differ in ways that affect your launch schedule.
| Country | Business Registration | Tax ID | Director ID | Bank Account | Additional |
|---|---|---|---|---|---|
| Nigeria | CAC certificate | TIN (optional for some) | BVN | Nigerian bank | BVN verification |
| Ghana | RGD certificate | GRA TIN | National ID | Ghanaian bank | |
| South Africa | CIPC registration | SARS tax number | SA ID or passport | South African bank | FICA compliance |
| Kenya | Registrar certificate | KRA PIN | National ID | Kenyan bank | Data Protection Act |
| Rwanda | RDB registration | RRA TIN | National ID | Rwandan bank | |
| Cote d'Ivoire | RCCM registration | Tax ID | National ID or passport | Ivorian bank | French-language docs |
The bottom line: treat compliance as a project, not a form. Assign someone on your team to own it. They will spend more time on email and document uploads than you expect.
If you are going multi-country, a few architectural decisions made early will save you from painful refactors later.
Wrap your Paystack calls behind an interface. Your application code should call something like paymentService.initializePayment(country, amount, currency, email). The implementation picks the right key, converts the amount to the right smallest unit, and calls Paystack. This abstraction also makes it easier to swap in a different provider for a specific country if needed (for example, using Daraja directly for M-Pesa in Kenya while using Paystack for everything else).
When you record a transaction in your database, store the country code alongside the amount, currency, and Paystack reference. You will need it for reconciliation, for generating country-specific financial reports, and for debugging when a settlement is missing.
Use country-specific webhook paths. This simplifies signature verification and makes your logs easier to read. If your Nigerian webhook handler is failing, you do not want to wade through Kenyan and Ghanaian events to find it.
Run your reconciliation jobs per country. Each country has its own settlement schedule, its own bank account, and its own currency. A single reconciliation job that mixes NGN and KES transactions will create confusion. Build country-level reconciliation from the start, even if you only have one country today.
The Rwandan Franc and the West African CFA Franc do not have subdivision units. One RWF is one RWF, not 100 of something smaller. If your amount conversion code assumes every currency has a 100x multiplier, you will charge Rwandan and Ivorian customers 100x too much. Test this explicitly.
This guide gives you the lay of the land. For the deep dive into any specific country, read the individual country guides:
For the overarching technical reference that covers the API regardless of country, see Paystack: The Complete Engineering Guide for African Developers.
If you are specifically interested in the M-Pesa angle in Kenya, and whether to use Paystack or integrate with Daraja directly, the Kenya guide and Building a Local Checkout Experience for Kenya cover that decision in detail.
And if you want to learn Paystack integration hands-on with projects and mentorship, McTaba's Full-Stack Software and AI Engineering program covers payment integration as part of the curriculum. You build real checkout flows, handle real webhooks, and ship to production.
KES 2,999
The definitive guide to building payment systems with Paystack — from your first transaction to production-grade payment infrastructure across Africa. 9 modules, 47 lessons. Free preview available.
Start Paystack Course