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

# Provision a virtual account

> Provisions a persistent Quidax NGN static account (BVN-linked; Quidax has no customer onboarding). For USD/EUR use `POST /v1/customers/{customerId}/virtual-accounts`, which requires an approved onboarding case.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/virtual-accounts
openapi: 3.0.3
info:
  title: XentFi API
  version: 1.0.0
  description: >-
    API documentation for XentFi.The XentFi API gives you access to pretty much
    all the features you can use on our dashboard and lets you extend them for
    use in your application. It strives to be RESTful and is organized around
    the main resources you would be interacting with - with a few notable
    exceptions.
servers:
  - url: https://api.xentfi.com
    description: Production server
security: []
tags: []
paths:
  /v1/virtual-accounts:
    post:
      tags:
        - NGN Virtual Accounts
      summary: Provision a virtual account
      description: >-
        Provisions a persistent Quidax NGN static account (BVN-linked; Quidax
        has no customer onboarding). For USD/EUR use `POST
        /v1/customers/{customerId}/virtual-accounts`, which requires an approved
        onboarding case.
      operationId: createVirtualAccount
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - currency
                - accountHolderName
                - customerEmail
                - bvn
                - bankCode
                - destination
              properties:
                currency:
                  type: string
                  enum:
                    - NGN
                  example: NGN
                accountHolderName:
                  type: string
                customerEmail:
                  type: string
                  format: email
                bvn:
                  type: string
                  description: Quidax NGN static account only
                bankCode:
                  type: string
                  description: Quidax NGN static account only, e.g. 035
                destination:
                  type: object
                  required:
                    - walletType
                  description: >
                    Where funds converted by this virtual account should be
                    delivered. Use `walletType` to discriminate which of
                    `walletId` / `address` is required.
                  properties:
                    walletType:
                      type: string
                      enum:
                        - MASTER_WALLET
                        - CHILD_WALLET
                        - EXTERNAL_WALLET
                      description: >
                        Which kind of wallet a payout/delivery destination
                        points at.
                          * MASTER_WALLET   → organisation's MasterWallet (any chain)
                          * CHILD_WALLET    → child wallet created under a MasterWallet
                          * EXTERNAL_WALLET → any external address (wallet or exchange)
                    walletId:
                      type: string
                      format: uuid
                      nullable: true
                      description: >
                        Required when `walletType` is MASTER_WALLET or
                        CHILD_WALLET. Must belong to the calling organisation.
                    address:
                      type: string
                      nullable: true
                      description: >
                        Required when `walletType` is EXTERNAL_WALLET. An EVM or
                        Solana address that will receive the settlement.
                    assetId:
                      type: string
                      format: uuid
                      nullable: true
                      description: >
                        Asset (token) to be delivered. Determines both the chain
                        and the token (e.g. USDC on Base, USDT on Tron).
                        Required for EXTERNAL_WALLET; optional for MASTER_WALLET
                        / CHILD_WALLET (defaults to the wallet's primary asset
                        when omitted).
                  oneOf:
                    - required:
                        - walletType
                        - walletId
                      properties:
                        walletType:
                          enum:
                            - MASTER_WALLET
                            - CHILD_WALLET
                    - required:
                        - walletType
                        - address
                        - assetId
                      properties:
                        walletType:
                          enum:
                            - EXTERNAL_WALLET
              description: >-
                Standalone persistent account — Quidax NGN only (BVN-linked).
                USD/EUR accounts are created per customer via
                /v1/customers/{customerId}/virtual-accounts.
      responses:
        '201':
          description: Virtual account provisioned
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                      provider:
                        type: string
                        enum:
                          - QUIDAX
                          - BRIDGE
                      currency:
                        type: string
                      accountNumber:
                        type: string
                        nullable: true
                      accountName:
                        type: string
                        nullable: true
                      bankName:
                        type: string
                        nullable: true
                      iban:
                        type: string
                        nullable: true
                      swiftCode:
                        type: string
                        nullable: true
                      isPersistent:
                        type: boolean
                      status:
                        type: string
                        enum:
                          - ACTIVE
                          - DISABLED
                      createdAt:
                        type: string
                        format: date-time
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        example: NOT_FOUND
                      message:
                        type: string
                        example: Wallet not found
                      timestamp:
                        type: string
                        format: date-time
                      requestId:
                        type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        example: NOT_FOUND
                      message:
                        type: string
                        example: Wallet not found
                      timestamp:
                        type: string
                        format: date-time
                      requestId:
                        type: string
      security:
        - ApiKeyAuth: []
          OrgIdAuth: []
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: apiKey
    OrgIdAuth:
      type: apiKey
      in: header
      name: orgId

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.