Payment Methods

Create a virtual account payment method

Creates a new virtual account for the resolved customer-or-owner and currency. Pass customerId to mint the VA for a specific end-user; omit it to mint one for the business owner.

Supported currencies. A virtual account for one of your customers (customerId supplied) can be created in NGN or GHS. Any other currency returns 422 UNSUPPORTED_VIRTUAL_ACCOUNT_CURRENCY; create it for the business itself by omitting customerId, which is how KES and USD accounts are created.

Subject to a per-(business, customer, currency) limit. Requests that would exceed the limit return 403 VIRTUAL_ACCOUNT_LIMIT_REACHED.

NGN and BVN. A permanent NGN account (no amount) is opened against the account holder's BVN. If the holder has none, the request returns VIRTUAL_ACCOUNT_BVN_REQUIRED; pass amount to get a one-time account instead, which does not need a BVN.

Compliance review: every currency requires a compliance-approved application before issuance. The first request for a not-yet-approved business/currency starts that review and returns VIRTUAL_ACCOUNT_PENDING_COMPLIANCE_REVIEW; retry once approved.

Accounts opened asynchronously: for some currencies the issuing bank opens the account after the request returns. The response is then 201 with an empty data object, and the account is delivered through the PAYMENT_METHOD.CREATED webhook once it is open.

Label vs amount: label groups static virtual accounts by purpose (e.g. SALES, OPERATIONS). It is mutually exclusive with amount, which routes to a dynamic (ephemeral) virtual account. Supplying both is rejected at validation.

post/api/v1/payment-method/virtual-account

Request

Request body

currency'NGN' | 'GHS' | 'KES' | 'USD' required

The 3-letter ISO 4217 currency code for the virtual account. The listed values are the supported currencies; other valid currency codes pass validation and fail later in the request.

customerIdstring

Optional customer ID. When supplied, the VA is created for that customer. When omitted, it is created for the business owner.

amountnumber

Optional amount for a dynamic (ephemeral) virtual account. Mutually exclusive with label.

label'SALES' | 'OPERATIONS' | 'PAYROLL' | 'COLLECTIONS' | 'VENDOR_PAYMENTS' | 'TAX' | 'REFUNDS' | 'MARKETING' | 'TREASURY' | 'GENERAL'

Optional label that groups static virtual accounts by purpose. Mutually exclusive with amount.

Response

Virtual account created successfully, or (empty data) requested and pending with the issuing bank.

Changes

No recorded changes to this operation across all 1 revision of this API.