McTaba Labs logo
Software EngineeringThe WhiteboardProjectsEventsMasterclassesWebinarsLearn
Book Call

500+ developers already in the community

Get answers, find accountability partners, and stay ahead

Join Discord →
McTaba Labs logo

Educating 1 million students in tech by 2030.

Programs

  • HighSchool Graduates Launchpad
  • AI & Business Automation
  • Corporate Training
  • McTaba Story & Mission
  • Full-Stack Curriculum
  • Course Pricing & Plans
  • Frequently Asked Questions

Resources

  • Join Discord Community
  • Tech Events in Nairobi
  • Masterclasses
  • Free Resources
  • Learn
  • Campus
  • Africa Tech Talent Report
  • Partner With Us
  • Start a Project
  • Our Work

Contact Us

  • 124 Manyani East Road, Lavington, Nairobi
  • +254727795603
  • Book a Discovery Call

Office Hours:

Mon-Fri: 9am - 2pm EAT

Sat: 10am - 12pm EAT

© 2027 McTaba Labs - A product of Edtech Industries. All rights reserved.

Privacy PolicyTerms of ServiceRefund Policy
  1. Learn
  2. Paystack for African Developers
  3. Paystack Payment Channels: Card, Bank, USSD, Mobile Money, QR
Bonaventure OgetoBy Bonaventure Ogeto|Updated July 20, 2026

Paystack Payment Channels: Card, Bank, USSD, Mobile Money, QR

Paystack payment channels include card (Visa, Mastercard, Verve), bank transfer (customer transfers to a temporary account), USSD (customer dials a code on their phone), mobile money (MTN MoMo, AirtelTigo, Vodafone Cash), QR code, and Apple Pay. Availability depends on your business country and currency. Card works everywhere. Other channels are market-specific.

In this article

  1. 1. Card Payments
  2. 2. Bank Transfer
  3. 3. USSD Payments
  4. 4. Mobile Money
  5. 5. QR Code Payments
  6. 6. Apple Pay
  7. 7. Choosing Channels for Your Business
  8. 8. Channel-Specific Webhook Differences
  9. 9. Stay Up to Date

Card Payments

Card payments are the baseline channel. They work in every Paystack market (Nigeria, Ghana, South Africa, Kenya) and support Visa, Mastercard, and Verve (Nigeria-only) cards. International cards are also accepted on accounts enabled for international payments.

When a customer pays by card through Paystack checkout, the flow is:

  1. Customer enters card number, expiry, and CVV on the Paystack checkout form
  2. Paystack sends the card details to the card network for authorization
  3. If the card requires 3D Secure (3DS), the customer is redirected to their bank's verification page
  4. Some Nigerian cards require a PIN entry and/or an OTP sent to the cardholder's phone
  5. Once authorized, Paystack returns a charge.success event

Card payments settle based on your account's settlement schedule. The customer sees the charge on their statement immediately (or as a pending charge), but the funds reach your Paystack balance according to the settlement cycle.

From a developer perspective, card payments require no special handling when using Initialize Transaction. Paystack's checkout manages the entire card collection, 3DS flow, and OTP flow. If you use the Charge API directly, you need to handle send_pin, send_otp, and open_url responses. See OTP and PIN flows in custom checkout for details.

Bank Transfer

Bank transfer is available in Nigeria and has become the most popular payment channel for many businesses. Instead of entering card details, the customer is shown a bank account number and transfers money from their banking app or USSD banking.

How it works:

  1. You initialize a transaction with channels: ['bank_transfer'] (or include it alongside other channels)
  2. Paystack generates a temporary bank account number and shows it on the checkout page
  3. The customer opens their banking app and transfers the exact amount to that account
  4. Paystack confirms the transfer and fires a charge.success webhook
  5. The temporary account expires after the transaction window closes

Bank transfers are popular because they work without a card, do not require the customer to share card details, and many Nigerian customers are comfortable with bank transfers from their mobile banking apps.

For ongoing collections where you want a permanent account number per customer, see dedicated virtual accounts.

For a deeper look at bank transfer implementation, see accepting bank transfer payments.

Get weekly developer tips

Join 25,000+ developers. Practical guides, job tips, and new content — straight to your inbox.

No spam. Unsubscribe anytime.

USSD Payments

USSD payments are available in Nigeria and let customers pay by dialing a code on their phone. This works on feature phones and does not require a data connection, which makes it valuable for reaching customers without smartphones.

The flow:

  1. The customer selects USSD as their payment method on the Paystack checkout page
  2. Paystack shows a USSD code specific to the customer's bank (e.g., *737*000*AMOUNT# for GTBank)
  3. The customer dials the code on their phone
  4. The bank's USSD system prompts the customer to confirm the payment
  5. Once confirmed, Paystack receives confirmation and fires a charge.success webhook

USSD payments are asynchronous. The customer dials the code on a separate device (their phone), and the confirmation can take anywhere from seconds to minutes. Your checkout flow needs to handle this wait time gracefully. The Paystack checkout page shows a waiting indicator and updates when the payment is confirmed.

USSD is supported by major Nigerian banks including GTBank, UBA, Zenith Bank, and First Bank, each with their own USSD format. Paystack handles the bank-specific code generation. For implementation details, see accepting USSD payments.

Mobile Money

Mobile money is available in Ghana and is the dominant payment method in that market. It works with MTN Mobile Money (MoMo), AirtelTigo Money, and Vodafone Cash.

The flow:

  1. The customer selects mobile money on the Paystack checkout and enters their mobile money number
  2. Paystack sends a payment prompt to the customer's phone
  3. The customer approves the payment on their phone (by entering their PIN or confirming a prompt)
  4. The mobile money provider deducts the amount and notifies Paystack
  5. Paystack fires a charge.success webhook

Like USSD, mobile money is asynchronous. The customer acts on a separate device, and there can be a delay between the prompt being sent and the customer approving. Timeout handling is important: if the customer does not approve within the provider's timeout window, the transaction fails.

Mobile money transactions are denominated in GHS (pesewas for the smallest unit). You need a Paystack account registered in Ghana to accept mobile money payments. For implementation details, see accepting mobile money payments.

QR Code Payments

QR code payments are available in Nigeria. The customer scans a QR code with a supported banking app to complete the payment.

The flow:

  1. You initialize a transaction with QR included in the channels array
  2. Paystack checkout shows a QR code image
  3. The customer opens a supported banking app and scans the QR code
  4. The banking app shows the payment amount and the customer confirms
  5. Paystack receives confirmation and fires a charge.success webhook

QR payments are well-suited for point-of-sale scenarios where a physical device displays the QR code and the customer scans it with their phone. For online checkout, QR is less common because it requires the customer to use a second device to scan the screen. Still, some customers prefer it because they do not need to enter card details.

QR adoption is growing as more Nigerian banks add QR scanning to their mobile apps. For implementation details, see accepting QR payments.

Apple Pay

Apple Pay is available across Paystack markets for customers on Apple devices (iPhone, iPad, Mac with Safari). It lets customers pay with a card stored in their Apple Wallet, authenticated by Face ID, Touch ID, or device passcode.

Setting up Apple Pay requires domain verification: you host a verification file on your domain so Apple can confirm you control the site. Once verified, Apple Pay appears as a payment option on Paystack checkout for customers on supported devices.

The user experience is fast because the customer does not type card numbers. They tap the Apple Pay button, authenticate with biometrics, and the payment completes. This can improve conversion rates on Apple devices.

Apple Pay only appears for customers on compatible devices and browsers. Other customers simply do not see the option, so it works as an additive improvement without affecting anyone else's checkout experience. For setup instructions, see Apple Pay setup and domain verification.

Choosing Channels for Your Business

You do not have to support all channels. Paystack checkout shows all available channels by default, but you can restrict which ones appear using the channels parameter when initializing a transaction:

// Only show card and bank transfer
var response = await fetch('https://api.paystack.co/transaction/initialize', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer ' + process.env.PAYSTACK_SECRET_KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    email: 'customer@example.com',
    amount: 500000,
    currency: 'NGN',
    channels: ['card', 'bank_transfer'],
  }),
});

Valid channel values: card, bank, ussd, mobile_money, bank_transfer, qr, apple_pay.

Reasons to restrict channels:

  • Immediate confirmation needed: Card payments confirm instantly. Bank transfer, USSD, and mobile money can take minutes. If your flow requires instant confirmation (like a live event ticket), you might restrict to card only.
  • Amount limits: Some USSD channels have per-transaction limits. For high-value transactions, restrict to card or bank transfer.
  • Simpler support: Fewer channels means fewer support edge cases. Start with one or two channels and add more as your team learns the patterns.

For detailed guidance on channel restriction strategy, see restricting payment channels at checkout.

Channel-Specific Webhook Differences

All channels fire the charge.success webhook when a payment completes. However, the channel field in the webhook payload tells you which method the customer used. This can be useful for analytics, reconciliation, or channel-specific post-payment logic.

// In your webhook handler
app.post('/webhooks/paystack', function(req, res) {
  var event = req.body;

  if (event.event === 'charge.success') {
    var channel = event.data.channel;
    // channel is one of: 'card', 'bank', 'ussd', 'mobile_money', 'bank_transfer', 'qr'

    console.log('Payment via: ' + channel);
    console.log('Amount: ' + event.data.amount);
    console.log('Currency: ' + event.data.currency);

    // Fulfill the order regardless of channel
    fulfillOrder(event.data.reference);
  }

  res.sendStatus(200);
});

Your fulfillment logic should be channel-agnostic. Whether the customer paid by card, bank transfer, or mobile money, the order gets the same fulfillment. The channel field is for logging and analytics, not for branching your business logic.

One exception: if you are building dashboards or reports, knowing the channel breakdown helps you understand your customers' preferences and optimize accordingly.

Stay Up to Date

Paystack regularly adds new payment channels and expands existing ones to new markets. We update these guides when new channels become available.

Sign up for the McTaba newsletter to stay informed about new Paystack payment channels and market expansions.

Key Takeaways

  • ✓Card payments (Visa, Mastercard, Verve) are available in all Paystack markets. They are the most widely supported channel.
  • ✓Bank transfer is the fastest-growing channel in Nigeria. The customer transfers to a temporary or dedicated virtual account and Paystack confirms the payment via webhook.
  • ✓USSD is available only in Nigeria and works for customers without smartphones or data. The customer dials a bank-specific code from their phone.
  • ✓Mobile money (MTN MoMo, AirtelTigo, Vodafone Cash) is the dominant channel in Ghana and works through the Charge API or Paystack checkout.
  • ✓QR code payments are available in Nigeria and work with supported banking apps that can scan QR codes.
  • ✓You do not need to build separate integrations for each channel. Paystack checkout handles all available channels automatically. You can restrict which channels appear using the channels parameter.

Frequently Asked Questions

Do I need to build a separate integration for each payment channel?
No. If you use Initialize Transaction (redirect or popup checkout), Paystack handles all channels in one checkout experience. The customer chooses their preferred channel on the checkout page. You only need separate integration code if you use the Charge API to build a custom checkout UI.
Which channel has the lowest transaction fees?
Transaction fee structures can vary by channel and are subject to change. Check your Paystack dashboard or contact Paystack support for the current fee schedule for your account. In general, the fees are competitive across channels.
Can a customer use a channel that is not available in their country?
No. Channels are tied to the transaction currency and the market it represents. A Nigerian customer cannot pay via mobile money (Ghana only), and a Ghanaian customer cannot use USSD (Nigeria only). Paystack checkout only shows channels available for the transaction currency.
How do I know which channels my Paystack account supports?
Check your Paystack dashboard under Settings. The available channels depend on your business country, account type, and what Paystack has enabled. You can also test by initializing a transaction without the channels parameter and seeing which options appear on the checkout page.
What happens if a bank transfer customer sends the wrong amount?
Paystack validates the transfer amount against the initialized transaction amount. If the customer sends less than the required amount, the payment is not confirmed and the transaction remains pending. Paystack checkout instructs the customer to send the exact amount. Overpayments are handled according to Paystack policy, which may involve refunding the excess.

Learn Paystack Integration

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

Not ready? Create Free Account

Keep reading

Accepting Payments with Paystack: Complete Guide

Everything you need to accept your first payment with Paystack: choosing between Initialize Transaction and the Charge API, handling amounts in kobo, attaching metadata, setting callback URLs, and designing transaction references that keep your system clean.

Read more

Using Paystack Custom Fields to Collect Extra Checkout Information

Paystack custom fields let you attach structured, human-readable data to a transaction that shows up on the checkout page, in your dashboard, and in webhook payloads. This guide covers display_name vs variable_name, common field patterns, and how to extract custom field data when the webhook arrives.

Read more

Paystack Customer Objects: Create, Fetch, Update, Whitelist

Paystack creates a customer object every time a new email hits your checkout. You can also create customers explicitly, update their details, fetch their transaction history, and whitelist or blacklist them for risk control. This guide covers every operation with working Node.js code.

Read more

Building a Wallet Top-Up Flow on Paystack

A step-by-step guide to building wallet top-up flows with Paystack. Initialize payment, handle webhooks, credit wallets safely, enforce minimum amounts, and prevent double-crediting in production.

Read more

Paystack Webhooks and CSRF Protection in Laravel

A focused guide on fixing the 419 Page Expired error when Paystack webhooks hit your Laravel application. Covers the VerifyCsrfToken middleware exception for Laravel 10 and below, the new bootstrap/app.php approach in Laravel 11, webhook route setup, and a complete controller with HMAC signature verification.

Read more

Explore related topics

M-Pesa & African Stack

M-Pesa Daraja API tutorials, USSD development, and WhatsApp Business API guides. The African Stack that global bootcamps do not teach.

Learn to Code in Kenya

Everything a Kenyan needs to know before writing their first line of code. Career paths, real costs, hardware requirements, and honest answers about what it takes.

Learning to Code

Roadmaps, language guides, and practical advice for learning to code and launching a programming career.

Breaking Into Tech

Practical, no-nonsense guides for anyone looking to start or change their career in tech. From choosing your first language to acing interviews.

The African Stack: Skills for This Market

The skills that make Kenyan developers hard to replace: M-Pesa, USSD, WhatsApp, fintech, and building for the African market.

Bonaventure Ogeto

Bonaventure Ogeto

Founder, McTaba Labs

Bonaventure is the founder of McTaba Labs, a coding bootcamp in Nairobi, Kenya. He has spent years building products for the African market and mentoring the next generation of developers across the continent.