Virtual Bank Accounts

How to create and manage Virtual Bank Accounts for receiving payments

What are Virtual Bank Accounts?

Virtual Bank Accounts are dedicated bank account numbers that allow your business and your customers to receive money. When someone sends funds to a Virtual Bank Account, the money is automatically credited to the associated wallet, and you are notified via a webhook.

They are available in NGN, GBP, EUR, and USD.

How to create a Virtual Bank Account

  • Endpoint: /virtual-bank-account
  • Method: POST
  • Purpose: Generate a new Virtual Bank Account linked to a wallet.

For NGN, the Virtual Bank Account is typically activated immediately and the response will return with a SUCCESSFUL status along with the account details.

For GBP, EUR, and USD, the account is created asynchronously. The response will return with a PENDING status. Once the account is fully activated, you will receive a virtual_account.ready webhook with the account details (account number, bank name, etc.). If the account creation fails or is rejected, you will receive a virtual_account.failed or virtual_account.rejected webhook instead.

Customer type restrictions by currency. NGN Virtual Bank Accounts work for both type=individual and type=business customers (Minimal and Full). Business customers must complete the KYB flow (/submit) before the customer is VERIFIED. GBP, EUR, and USD Virtual Bank Accounts are available only for verified type=individual customers. They are not available for type=business customers on any kyb_scope.

Development environment. NGN and USD account creation works in the development environment. GBP and EUR account creation is on hold there, but works fully in production. To test GBP or EUR, do a controlled live test in production. Only NGN deposits settle in the development environment.

Understanding identification types (TIN)

When creating a Virtual Bank Account (particularly for USD), your customer needs a tin (Tax Identification Number) value on their profile. However, "TIN" is a generic term — what it actually represents depends on the customer's country and whether they are an individual or a business.

For example:

CountryCustomer typeWhat to collectExample label
USIndividualSocial Security NumberSSN
USBusinessEmployer Identification NumberEIN
NGIndividualBank Verification NumberBVN
GBIndividualNational Insurance NumberNINO
CAIndividualSocial Insurance NumberSIN

How to use this in your integration:

  1. Call Get identification type with the customer's country and type (or their customer_id if you already have one).
  2. Use the returned label to display the correct field name in your UI (e.g. "Enter your Social Security Number" instead of "Enter your TIN").
  3. Save the value your customer provides as the tin field when creating or updating the customer.
  4. Proceed to create the Virtual Bank Account.

Individual and business customers in the same country often require different identification types. Always pass the correct type parameter when looking up the identification type.

Quick answers

  • Which Virtual Bank Accounts can I test in development? NGN and USD account creation works in the development environment. GBP and EUR account creation is on hold there. Only NGN deposits settle. See Can I test virtual bank accounts in the development environment?
  • Should the customer's country match the identity document? Yes. The customer's country must match the identity document submitted for KYC.
  • How long does customer verification take? See the warning below.

Verification is not instant. After you upload identity documents for a customer, those documents go through a review process. The customer's status will remain PENDING (or, for business customers after /submit, PROCESSING) until that review is complete.

For individual customers, the review finishes within a few minutes in most cases; up to 2 hours under additional screening. Do not raise support tickets within that window. Escalate to support@blaaiz.com only if verification has been pending for 5 hours or more.

For business customers, business KYB review typically takes 1–5 business days. Do not raise tickets within that window. Escalate only if the customer has been PROCESSING for more than 5 business days. See Business customer KYB.

Listen for the customer.verified or customer.rejected webhook to know when the review is complete.

Before creating a Virtual Bank Account, ensure the following prerequisites are in place. Requirements vary depending on the currency.

Wallet must exist

You must have a wallet in the currency you want to create a Virtual Bank Account for. Pass a valid wallet_id in your request.

Customer is always required

You must provide a customer_id for all currencies. The customer must belong to your business and must have verification_status of VERIFIED before you can create a Virtual Bank Account. For NGN, both type=individual (verified through KYC) and type=business (verified through the KYB flow) are accepted. For GBP, USD, and EUR, only type=individual is supported.

No duplicate accounts

You cannot create a second Virtual Bank Account for the same customer and wallet combination. If one already exists, the request will be rejected.

Customer country and identity document must match

The customer's country must match the country on the identity document submitted for KYC.

Accepted identity documents

Only a Driver's License, Passport, or Resident Permit is accepted for individual customers. Business customers identify via registration_number + incorporation_country and supply a Certificate of Incorporation (or equivalent formation document) through the KYB document collection. ID cards (National Identity Cards) are not accepted. No other document types are supported.

Document quality

All uploaded documents must be clear, legible, and authentic. Blurry, cropped, obscured, or otherwise unclear images will not be reviewed and will be rejected. Fraudulent or falsified documents will not be tolerated — repeated attempts to submit false or invalid documents will result in the customer being permanently blacklisted from the platform. There are no exceptions or compromises.

Customer is required

You must provide a customer_id. The customer must be verified and belong to your business.

Immediate activation

NGN Virtual Bank Accounts are typically activated immediately and the response will return with a SUCCESSFUL status along with the account details.

Customer is required

You must provide a customer_id. The customer must be verified and of type individual.

Customer information must be complete

The following fields must be present on the customer's profile and KYC data before creating a GBP Virtual Bank Account:

  • First Name
  • Last Name
  • Email
  • Country
  • ID Type
  • ID Number
  • Date of Birth
  • ID Expiry Date
  • Zip Code
  • City
  • Street

If any of these are missing, the request will fail and the response will tell you which fields are missing.

Name format

The customer's first name and last name must contain only letters, hyphens, periods, apostrophes, and spaces. Names with numbers or special characters will be rejected.

Street address format

The customer's street address must contain only alphanumeric characters and the following: - / # ( ) ' , .

ID must not be expiring soon

The customer's identity document must have an expiry date at least one month from today.

Valid postal code

The customer's zip code must be a valid postal code for their country.

Customer is required

You must provide a customer_id. The customer must be verified and of type individual.

Customer information must be complete

The following fields must be present on the customer's profile and KYC data before creating an EUR Virtual Bank Account:

  • First Name
  • Last Name
  • Email
  • Country
  • ID Type
  • ID Number
  • Date of Birth
  • ID Expiry Date
  • Zip Code
  • City
  • Street

If any of these are missing, the request will fail and the response will tell you which fields are missing.

Name format

The customer's first name and last name must contain only letters, hyphens, periods, apostrophes, and spaces. Names with numbers or special characters will be rejected.

Street address format

The customer's street address must contain only alphanumeric characters and the following: - / # ( ) ' , .

ID must not be expiring soon

The customer's identity document must have an expiry date at least one month from today.

Valid postal code

The customer's zip code must be a valid postal code for their country.

Customer is required

You must provide a customer_id. The customer must be verified and of type individual.

Identity document must be uploaded

The customer must have an identity document file uploaded before you can create a USD Virtual Bank Account.

Driver's License, Passport, or Resident Permit only

All individual customers must have a Driver's License, Passport, or Resident Permit as their identity document. ID cards (National Identity Cards) are not accepted. No other document types are accepted. All document images must be clear and legible — unclear images will be rejected. Repeated submission of fraudulent or invalid documents will result in the customer being permanently blacklisted.

Customer information must be complete

USD Virtual Bank Accounts require the most customer information. The following fields must all be present:

  • First Name
  • Last Name
  • Email
  • Phone
  • Country
  • ID Type
  • ID Number
  • TIN (Tax Identification Number)
  • Date of Birth
  • ID Expiry Date
  • Street
  • City
  • State
  • Zip Code

If any of these are missing, the request will fail and the response will tell you which fields are missing.

TIN label lookup

The tin field is required for USD customers, but the actual identification type varies by country (e.g. SSN for US individuals, BVN for Nigerian individuals). See Understanding identification types for the full workflow, or call the Get identification type endpoint to look up the correct label before creating or updating the customer.

ID must not be expiring soon

The customer's identity document must have an expiry date at least one month from today.

Valid postal code

The customer's zip code must be a valid postal code for their country.

Errors when you create a Virtual Bank Account

POST /api/external/virtual-bank-account returns these common errors. Each error response also contains a request_id. Send the request_id to support@blaaiz.com if you need help.

StatusMessageCause and fix
403The Create Virtual Account feature is not enabled for this business.Your business does not have the feature. Contact support@blaaiz.com.
403A scope errorYour access token does not have the virtual-account:create scope. Get a token with this scope.
404Please create a wallet in this currency first.The wallet_id does not match a wallet of your business. Use a wallet ID from your business.
422The wallet id field is required.Send wallet_id and customer_id in the request body.
400Business customer does not belong to this business.Use a customer_id from your business.
400Business customer is not verified. Ensure you have uploaded identify docs for customer.Wait for the customer.verified webhook. Then send the request again.
400Business customer must be of type individual to create a virtual bank account.GBP and EUR accounts are available only for type=individual customers.
400Business customer must be of type individual to create a USD virtual bank account.USD accounts are available only for type=individual customers.
400A virtual bank account already exists for this business customer …The customer already has an account on this wallet. Use List Virtual Bank Accounts to get it.
400Cannot process virtual account creation for business customer. Missing fields: …GBP or EUR. Add the listed fields with Update customer.
400Cannot process USD virtual account creation for business customer. Missing fields: …USD. Add the listed fields with Update customer.
400The ID expiry date must be at least one month from today.The identity document of the customer expires in less than one month. See Customer data corrections.
400Postcode - Invalid postal code or countryzip_code is not valid for the country of the customer. See Customer data corrections.
400Invalid First name format. Only letters, hyphens, periods, apostrophes, and spaces are allowed.GBP or EUR. The same message can name Last name. See Customer data corrections.
400There's an issue with the identity document. Please ensure identity documents are uploaded.USD. Upload id_file with Upload files for a customer.
400The identity document provided is not sufficient to generate a USD Virtual Account. …USD. A US customer must have a Driver's License or a Passport.
400We are unable to create a virtual account for this customer. Please contact support.Blaaiz cannot create an account for this customer. Contact support@blaaiz.com with the request_id.
400Failed to create virtual account. Please verify customer details and try again.GBP or EUR. The bank partner did not accept the request. In the development environment, this error is expected. See Can I test virtual bank accounts in the development environment? In production, send the request_id to support.

For GBP and EUR, the bank partner can also return a message that names a customer field, for example the postal code. Correct that field, and then send the request again.

Managing Virtual Bank Accounts

Once created, you can manage your Virtual Bank Accounts using the following endpoints:

On this page