> ## Documentation Index
> Fetch the complete documentation index at: https://docs.business.blaaiz.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create virtual bank account

> Generates a new virtual bank account for the specified wallet. Supports NGN, GBP, USD, EUR.

**Important:** Virtual bank accounts are not immediately issued. Account details are usually provided within a few minutes, but can take a few days if the customer is being reviewed manually or has not passed internal checks. The initial status will be PENDING until the account is fully provisioned. In the development environment, only NGN virtual bank accounts settle. Required scope: `virtual-account:create`.



## OpenAPI

````yaml /api-reference/virtual-bank-account/create-openapi.json post /api/external/virtual-bank-account
openapi: 3.1.0
info:
  title: Blaaiz Platform API - Create Virtual Bank Account
  version: 1.0.0
  description: >-
    Create a new virtual bank account (VBA) for a wallet.


    **Note:** Virtual bank accounts are not issued immediately. Account details
    are usually provided within a few minutes, but can take a few days if the
    customer is being reviewed manually or has not passed internal checks. In
    the development environment, only NGN virtual bank accounts settle.
servers:
  - url: https://api-prod.blaaiz.com
  - url: https://api-dev.blaaiz.com
security: []
tags:
  - name: Virtual Bank Accounts
paths:
  /api/external/virtual-bank-account:
    post:
      tags:
        - Virtual Bank Accounts
      summary: Create virtual bank account
      description: >-
        Generates a new virtual bank account for the specified wallet. Supports
        NGN, GBP, USD, EUR.


        **Important:** Virtual bank accounts are not immediately issued. Account
        details are usually provided within a few minutes, but can take a few
        days if the customer is being reviewed manually or has not passed
        internal checks. The initial status will be PENDING until the account is
        fully provisioned. In the development environment, only NGN virtual bank
        accounts settle. Required scope: `virtual-account:create`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateVBARequest'
            examples:
              default:
                value:
                  wallet_id: b18ed308-5ac5-4e9e-bb16-8c03ec2d3c01
                  customer_id: 9d4c4ec5-59ea-4130-bf8a-6a5edec401ee
      responses:
        '201':
          description: Virtual bank account initiated successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateVBAResponse'
              example:
                message: Virtual bank account initiated successfully.
                data:
                  id: 33580c65-d063-4138-a875-82ff09dfaeb5
                  business_wallet_id: b18ed308-5ac5-4e9e-bb16-8c03ec2d3c01
                  currency_id: 1
                  currency: NGN
                  account_number: '7880000024'
                  account_name: John Doe
                  bank_name: 78 Finance Company Limited
                  bank_code: '123456'
                  provider: BANK78
                  account_reference: '2327323232'
                  reservation_reference: null
                  rejection_reason: null
                  status: PENDING
        '400':
          description: Bad Request
          content:
            application/json:
              examples:
                customer_not_verified:
                  value:
                    message: >-
                      Business customer is not verified. Ensure you have
                      uploaded identify docs for customer.
                customer_not_found:
                  value:
                    message: Business customer does not belong to this business.
                duplicate_account:
                  value:
                    message: >-
                      A virtual bank account already exists for this business
                      customer and wallet using the 'BANK78' provider.
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                status: false
                message: Invalid or missing access token
        '422':
          description: Validation Error
          content:
            application/json:
              example:
                message: The customer id field is required.
                errors:
                  customer_id:
                    - The customer id field is required.
      security:
        - oauth2ClientCredentials:
            - virtual-account:create
components:
  schemas:
    CreateVBARequest:
      type: object
      description: >-
        Supports NGN, GBP, USD, EUR. A verified customer is required for all
        currencies. NGN supports both `type=individual` and `type=business`
        customers — businesses must have completed the KYB flow ([Business
        customer KYB](/guides/kyb/overview)). GBP, USD, and EUR currently
        support `type=individual` only; `type=business` for those currencies is
        not yet available.
      properties:
        wallet_id:
          type: string
          description: ID of the business wallet the account will be associated with.
        customer_id:
          type: string
          description: >-
            ID of the verified customer the VBA should be created for. The
            customer must belong to your business and have
            `verification_status=VERIFIED`. NGN accepts both `type=individual`
            and `type=business`. GBP, USD, and EUR accept `type=individual` only
            — `type=business` for those currencies is not yet available.
      required:
        - wallet_id
        - customer_id
    CreateVBAResponse:
      type: object
      properties:
        message:
          type: string
        data:
          $ref: '#/components/schemas/VirtualBankAccount'
      required:
        - message
        - data
    Error:
      type: object
      properties:
        message:
          type: string
      required:
        - message
    VirtualBankAccount:
      type: object
      properties:
        id:
          type: string
        business_wallet_id:
          type: string
        currency_id:
          type: integer
          format: int32
        currency:
          type: string
        account_number:
          type: string
        account_name:
          type: string
        bank_name:
          type: string
        bank_code:
          type: string
        provider:
          type: string
        account_reference:
          type: string
        reservation_reference:
          type:
            - string
            - 'null'
        rejection_reason:
          type:
            - string
            - 'null'
          description: Reason for rejection or failure, if applicable
        status:
          type: string
          description: >-
            Status of the virtual account (e.g., SUCCESSFUL, PENDING, REJECTED,
            FAILED)
      required:
        - id
        - business_wallet_id
        - currency_id
        - currency
        - account_number
        - account_name
        - bank_name
        - status
  securitySchemes:
    oauth2ClientCredentials:
      type: oauth2
      description: >-
        Use your OAuth client credentials to obtain a short-lived Bearer token
        from POST /oauth/token.
      flows:
        clientCredentials:
          tokenUrl: /oauth/token
          scopes:
            virtual-account:create: Create virtual accounts.

````