Skip to main content
Dedicated Virtual Accounts (DVAs) allow you to assign unique bank account numbers to your customers. This enables direct bank transfers and automatic payment reconciliation.

Overview

Virtual accounts provide:
  • Unique account numbers for each customer
  • Automatic payment reconciliation
  • Support for multiple banks
  • Real-time payment notifications via webhooks
  • Custom split configurations
Virtual accounts are available in Nigeria (NGN) and Ghana (GHS). Contact Paystack for availability in other regions.

Create a Virtual Account

Assign a dedicated account number to a customer.
1

Initialize the SDK

2

Create the virtual account

3

Display to customer

Create Parameters

string
required
Customer code or email address
string
Slug of preferred bank provider (e.g., wema-bank, titan-paystack)
string
Subaccount code for routing payments
string
Split code for payment splitting
string
Customer’s first name (for account name generation)
string
Customer’s last name (for account name generation)
string
Customer’s phone number

List Virtual Accounts

Retrieve all virtual accounts on your integration.

List Parameters

number
default:"50"
Number of accounts per page
number
default:"1"
Page number to retrieve
boolean
Filter by active status
string
Filter by currency: NGN or GHS

Fetch Single Virtual Account

Get details of a specific virtual account.

Assign Virtual Account

Assign a dedicated virtual account to a customer.
Use the assign method when you want Paystack to handle customer creation automatically. Use create when you already have a customer code.

Requery Virtual Account

Manually check for new transactions on a virtual account.
Requerying is useful when you suspect a payment was made but not automatically detected. Most payments are detected automatically.

Deactivate Virtual Account

Deactivate a virtual account when it’s no longer needed.
Deactivating an account prevents it from receiving payments. This action cannot be undone through the API.

Split Configuration

Add or remove split configurations from virtual accounts.

Add Split

Route payments to multiple accounts automatically.

Remove Split

Remove split configuration from a virtual account.

Available Banks

Fetch list of available bank providers for virtual accounts.
Use the provider_slug when creating virtual accounts with a specific bank preference.

Webhook Integration

Listen for payments to virtual accounts:

Best Practices

  1. Store account details in your database with customer records
  2. Verify customer identity before creating virtual accounts
  3. Display account info prominently to customers
  4. Handle webhook events for automatic payment processing
  5. Monitor account status and reactivate when needed
  6. Use split configurations for automatic payment routing
  7. Provide payment instructions to customers
  8. Test thoroughly in test mode before going live

Common Scenarios

Wallet Funding

Invoice Payments

Subscription Renewals

Error Handling