Bonaventure OgetoBy Bonaventure Ogeto|

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.

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.

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.

Ready to build real-world apps?

Join the McTaba Labs full-stack marathon (4 months full-time · 6 months part-time). Learn M-Pesa, USSD, and WhatsApp engineering while shipping 8 production apps.

Apply to the McTaba Marathon