Bank transfers are a common way for customers to pay Nigerian businesses. They are supported by banking apps, don't require card details, and allow customers to send money directly from their bank accounts. For businesses accepting these transfers, however, collecting a payment can involve more than providing an account number. The business also needs to confirm that the transfer succeeded, record it in its payment system, and identify the customer or transaction it belongs to.
For online businesses, these requirements become particularly important as payment volumes grow. A subscription business might receive transfers from recurring customers, while a platform might collect payments on behalf of several independent sellers. In both cases, the application needs a reliable way to receive payments and associate them with the correct business account without requiring someone to check a bank statement each time money arrives.
Today, we're introducing virtual accounts on Bachs, allowing businesses to create permanent NGN bank account numbers for receiving transfers. Unlike a bank-transfer Checkout, which generates a temporary account number for a particular payment, a virtual account remains available for future deposits. Payments received through these accounts are recorded on Bachs and can be processed by applications using webhooks.
Virtual accounts are also available to eligible connected accounts on Bachs Connect, making them useful for platforms that manage payments for other businesses.
A permanent account number for repeat collections
A typical online checkout begins with a transaction. The business knows what the customer is purchasing, how much they need to pay, and which order the payment should complete. Payment instructions are generated for that particular purchase, and the payment is associated with the transaction once it succeeds.
Repeat collections don't always follow this model. Some businesses receive payments from customers who already have an established relationship with them. A consulting firm might invoice the same clients every month, for example, while a business platform might need to give each of its participating merchants a dedicated destination for incoming transfers.
Creating a new checkout for every collection isn't always necessary in these situations. A permanent virtual account provides bank details that can be shared once and reused whenever a payment is due.
With Bachs, each eligible account can hold one permanent virtual account per supported currency. The account has a bank name and account number that customers can use through their existing banking apps. When a deposit succeeds, Bachs records it as a payment on the receiving account, deducts the applicable processing fee, and makes the funds available according to the account's balance and settlement rules.
For a business collecting regular transfers, this creates a straightforward payment experience. Customers can retain the same bank details, while the business receives payment records and notifications through Bachs rather than relying exclusively on manual checks of its bank account.
Dedicated collections for businesses on your platform
Platforms and marketplaces face a slightly different challenge. Their payment infrastructure needs to distinguish not only between individual transactions, but also between the businesses receiving them.
Consider a platform that provides software for independent service providers. Each provider operates their own business, serves their own customers, and needs to receive payments. The platform may provide a shared application experience, but the money being collected belongs to different businesses.
With Bachs Connect, the platform can create a virtual account for each eligible connected account. The bank details are associated with that business, and customers making a transfer see the connected business's name, rather than the platform's name, subject to the issuing bank's account-name format.
When a customer pays into the account, Bachs records the deposit against the connected account that owns the number. The platform can use the corresponding payment events to update its application and maintain records for each participating business.
This approach allows platforms to provide dedicated collection accounts without maintaining a separate bank-transfer integration for every business they support.
There's an important distinction in how these accounts are assigned. Bachs currently issues one virtual account per connected account per currency, not an unlimited number of accounts for every customer or invoice. A platform can provide individual account numbers to its connected businesses, but a business receiving multiple payments into its own virtual account still needs to reconcile those payments against its records.
Choosing between virtual accounts and bank-transfer Checkout
Permanent virtual accounts and transaction-specific bank transfers address different collection requirements. The distinction comes down to how much information is known about a payment before the customer sends it.
With Bachs bank-transfer Checkout, a business creates a payment for a particular order or invoice. The checkout has an expected amount and references that connect the incoming transfer to the transaction. The bank account number is temporary, and the application knows which purchase the payment is supposed to complete.
A permanent virtual account works differently. It can receive transfers without an existing checkout, and the customer controls when the transfer is sent and how much to send. Because the account number remains the same, it doesn't identify an individual order.
This flexibility is useful for ongoing collection relationships, but it also changes how developers need to approach reconciliation.
Suppose a business issues two invoices to the same customer, and the customer makes a single transfer covering both. The receiving virtual account identifies the business collecting the money, but the deposit doesn't automatically specify which invoices have been settled. Similarly, a payment made from an unfamiliar bank account may require additional information before the business can confidently associate it with a customer.
Bachs makes available sender details provided by the originating bank, including information such as the sender's name, bank account number, narration, and bank session ID. These details can help an application match deposits against its own records, although they aren't guaranteed to be present in every transfer.
For businesses that need payments to be automatically associated with individual purchases, bank-transfer Checkout is generally the more appropriate option. Virtual accounts are better suited to situations where a permanent collection destination is useful and the business can manage the relationship between deposits and its own invoices, customers, or balances.
Both approaches are available on Bachs, allowing businesses to choose the collection method appropriate to their payment flows.
Receiving and reconciling payments programmatically
When a virtual account receives a successful deposit, Bachs sends a collection.succeeded webhook containing the payment information. Developers can use this event to record the collection, update customer balances, or initiate application-specific reconciliation workflows.
Virtual account deposits can be distinguished from checkout payments through the event payload. A permanent virtual account deposit has a null checkout_id and includes virtual account information within the bank-transfer payment details.
These events make it possible to automate the parts of collection processing that would otherwise require someone to inspect incoming transfers. They don't, however, eliminate the need for application-level reconciliation.
An application might match a deposit using a previously verified sender account, an invoice number supplied in the transfer narration, or other information maintained in its database. Where the available details are insufficient, it should retain the deposit for review rather than assume that a matching amount necessarily identifies the correct invoice.
As with other webhook-driven payment integrations, developers should verify incoming events and handle repeated deliveries safely. Bachs provides an event ID that can be used to prevent the same collection from being processed more than once.
For detailed implementation examples, including webhook payloads, sender information, and deposit matching, see the virtual accounts developer guide.
Availability, pricing, and getting started
Virtual accounts are launching with support for NGN bank transfers in Nigeria. Each eligible business or connected account can create one permanent NGN account number following the required verification and capability approval.
Bachs charges 1.5% per successful virtual account deposit, capped at ₦300. For example, a ₦250,000 deposit incurs a ₦300 processing fee, leaving ₦249,700 to be credited to the receiving account.
Individual deposits and daily collection totals are subject to account limits. Deposits exceeding these limits may be held for manual review before the funds become available. Virtual account deposits also cannot currently be refunded through the API; payment returns are handled through Bachs support.
Virtual accounts are being enabled progressively for eligible Nigerian accounts. Businesses need to complete their account verification requirements and receive approval before creating a number. Developers can use the sandbox to test account creation and webhook handling, although sandbox account numbers cannot receive real bank transfers.
Businesses can access virtual accounts through the Bachs dashboard or API, while platforms can provision them for eligible connected accounts using Bachs Connect.
For setup instructions, supported requirements, and integration details, visit the Bachs virtual accounts documentation.
Virtual accounts are now rolling out on Bachs, giving businesses and platforms another way to accept bank transfers alongside Checkout, with permanent collection details and programmatic payment notifications.
