If you build a payment product in Kenya using Paystack, Paystack holds the PSP license from CBK, not you. You do not need your own license to accept payments through their API. However, you still have obligations around data protection, record-keeping, and anti-money laundering depending on the nature of your product. This article is not legal advice. Consult a lawyer for your specific situation.
This article is not legal advice. It provides general information about the regulatory environment for payment systems in Kenya to help developers understand the landscape. The Central Bank of Kenya regulations are complex, subject to change, and depend on the specific details of your product and business.
Before making decisions about licensing, compliance, or regulatory obligations:
The regulatory details in this article are based on publicly available information and may have changed since publication.
Most developers building payment features do not think about regulation. They integrate an API, test it, ship it, and move on. That works until it does not.
Here is why this matters:
The good news: for most developers using Paystack to accept payments in a straightforward e-commerce or SaaS product, the regulatory burden is light. Paystack carries the heavy compliance load. But you need to know where the boundaries are.
Get weekly developer tips
Join 25,000+ developers. Practical guides, job tips, and new content — straight to your inbox.
No spam. Unsubscribe anytime.
The Central Bank of Kenya regulates payment service providers under the National Payment System Act and the National Payment System Regulations. A PSP license is required for businesses that provide payment services, which generally includes processing, transmitting, or switching payment instructions.
What requires a license:
What does not require a license (in the context of using Paystack):
The distinction is straightforward: if you are building the payment rails, you need a license. If you are using someone else's licensed payment rails to accept money for your business, you do not.
The grey area: Some products blur this line. If you build a platform where money sits in your system before being disbursed to sellers (like a marketplace with a holding period), you might be holding funds. If you build a wallet feature where users deposit money that they spend later, you might be issuing electronic money. These activities may require a license or at minimum a formal arrangement with a licensed entity.
If your product does anything more than straightforward "accept payment, deliver product," get legal advice before launch.
Paystack operates in Kenya as a licensed payment aggregator. Their license covers the core payment processing activities:
What Paystack's license does not cover for you:
Kenya's Proceeds of Crime and Anti-Money Laundering Act sets obligations for businesses that handle financial transactions. While Paystack has its own AML program, you may have obligations depending on what your product does.
What Paystack handles:
What may be your responsibility:
For a standard e-commerce store or SaaS product, your AML obligations are minimal. You know who your customers are (they sign up with an email and name), and the transaction patterns are predictable (subscription payments, product purchases).
For a marketplace, a lending platform, a remittance service, or any product where money flows between users, the obligations are more significant. Get legal advice early.
Know Your Customer (KYC) in the Paystack context works at two levels.
Level 1: Paystack KYC on you (the merchant). When you sign up for a Paystack account, they verify your identity, your business registration, and your bank details. This is Paystack doing its regulatory duty. You provide documents, Paystack verifies them, and you get approved to receive payments. This is done once during onboarding.
Level 2: Your KYC on your customers. Whether you need to verify your customers' identities depends on your product. For most products, you do not need formal KYC beyond what is normal for your business (email verification, phone number confirmation). But some products require more:
For a typical Paystack integration (e-commerce, SaaS, event ticketing, service booking), you collect the customer's name, email, and phone number. Paystack handles the payment processing KYC. That is usually sufficient.
If you collect government ID numbers, copies of IDs, or other sensitive identity documents as part of your own KYC process, you have additional data protection obligations under Kenya's Data Protection Act. Store these securely, limit access, and have a retention and deletion policy.
Transaction limits in Kenya come from multiple sources, and they interact in ways that affect your application design.
M-Pesa limits (set by Safaricom):
Paystack limits:
CBK regulatory limits:
What this means for your code:
// Handle transaction limit errors gracefully
async function initiatePayment(amount, phone, email) {
try {
const response = await fetch('https://api.paystack.co/charge', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.PAYSTACK_SECRET_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
email,
amount: amount * 100,
currency: 'KES',
mobile_money: { phone, provider: 'mpesa' },
}),
});
const data = await response.json();
if (!data.status) {
// Check if the error is related to limits
const msg = data.message?.toLowerCase() || '';
if (msg.includes('limit') || msg.includes('maximum')) {
return {
success: false,
userMessage: 'This amount exceeds mobile money limits. '
+ 'Try paying with a card or Pesalink for larger amounts.',
suggestAlternative: true,
};
}
return { success: false, userMessage: 'Payment could not be initiated. Please try again.' };
}
return { success: true, data: data.data };
} catch (error) {
return { success: false, userMessage: 'Network error. Please try again.' };
}
}
When a customer hits a limit, do not just show a generic error. Tell them what happened and suggest an alternative. "This amount exceeds M-Pesa limits. Try paying with a card or Pesalink" is far more useful than "Payment failed."
For high-value products (rent payments, school fees, vehicle purchases), design your checkout to suggest Pesalink or card payments for amounts that approach M-Pesa limits. See Pay with Pesalink on Paystack: Developer Guide for integrating Pesalink as an alternative for large transactions.
Kenyan law requires businesses handling financial transactions to maintain records for a specified period. The exact retention period depends on the regulation (tax law, AML law, and company law may each specify different periods).
For developers, this translates to practical requirements:
// Store raw webhook payloads for audit trail
async function storeWebhookPayload(event) {
await db.collection('webhook_audit_log').insertOne({
eventType: event.event,
reference: event.data?.reference,
payload: JSON.stringify(event), // Store the full raw payload
receivedAt: new Date(),
processedAt: null,
processingResult: null,
});
}
This is a pattern you should have from day one, not something you bolt on after an audit request. It costs almost nothing in storage and saves you when you need to prove what happened six months ago.
Kenya's Data Protection Act (2019) governs how you collect, process, and store personal data. Payment-related data is personal data. Phone numbers, email addresses, names, transaction histories, and purchase records all fall under the Act.
What this means for your payment integration:
Paystack handles card data and is PCI DSS compliant. If you use Paystack correctly (through their API, not by collecting card numbers yourself), card data never touches your servers. But every other piece of customer data in your database is your responsibility.
Before launching a payment-enabled product in Kenya, have a conversation with a lawyer or compliance advisor about these specific questions:
Do not treat this as a one-time conversation. Have it before launch, then revisit it annually or whenever you add significant new features that change how money flows through your product.
For related regulatory and compliance topics:
For building payment integrations with the technical and business skills to do it right, the McTaba 26-week Full-Stack Software and AI Engineering bootcamp covers payment systems, security, and deployment for the African market.
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