Skip to content

Dedicated Virtual Accounts ​

A dedicated virtual account is a bank account number Paystack issues to one of your customers, so they can pay you by bank transfer. Paystack's docs offer it to Nigerian and Ghanaian businesses (NGN and GHS), and it has to be enabled for your business first: until it is, every call returns an unsuccessful response with status 403 and the message "Dedicated NUBAN is not available for your business".

Create or Assign an Account ​

ruby
# Which banks can issue an account for your integration (e.g. "wema-bank", "titan-paystack")
paystack.dedicated_virtual_accounts.fetch_bank_providers

# For a customer you already created (their code or ID)
response = paystack.dedicated_virtual_accounts.create(customer: "CUS_xnxdt6s1zg1f4nx", preferred_bank: "wema-bank")

if response.success?
  puts "#{response.data.account_number} at #{response.data.bank.name}"
else
  puts "Error: #{response.error_message}"
end

# Or create the customer, validate them and assign an account in one call. Paystack's docs
# show the reply "Assign dedicated account in progress", with no account in it.
paystack.dedicated_virtual_accounts.assign(
  email: "ama@example.com",
  first_name: "Ama",
  last_name: "Mensah",
  phone: "+2348100000000",
  preferred_bank: "wema-bank",
  country: "NG"
)

List, Fetch, Requery and Deactivate ​

ruby
paystack.dedicated_virtual_accounts.list(active: true, currency: "NGN", provider_slug: "wema-bank")

# By the account's numeric ID
paystack.dedicated_virtual_accounts.fetch(dedicated_account_id: 1234553)

# Ask Paystack to check the account for transfers it has not recorded yet
paystack.dedicated_virtual_accounts.requery(account_number: "1234567890", provider_slug: "wema-bank", date: Date.new(2026, 10, 9))

paystack.dedicated_virtual_accounts.deactivate(dedicated_account_id: 1234553)

Split Payments on an Account ​

ruby
# Send payments into the account through a split (or a single subaccount:)
paystack.dedicated_virtual_accounts.add_split(account_number: "0033322211", split_code: "SPL_e7jnRLtzla")

# And stop splitting them
paystack.dedicated_virtual_accounts.remove_split(account_number: "0033322211")

create and assign also take split_code: or subaccount: to set a split when the account is made.

Unofficial community SDK. Not affiliated with or endorsed by Paystack. · MIT License · rubygems.org/gems/paystack_sdk