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

# Create Virtual Account

> Create a virtual bank account for a customer in the specified currency. Requires customer_id and currency. For NGN, id_number (BVN) may be required.

## Overview

Create a virtual account for a customer. Virtual accounts allow customers to receive payments directly into their account. This endpoint creates a bank account that can be used for receiving funds.  To generate USD virtual accounts, ensure a default USD settlement wallet is set on your [dashboard settings](https://business.platnova.com/settings?section=settlements). This wallet will be billed for USD account creation fees if applicable. For NGN virtual accounts, you can optionally specify an `id_number` parameter in the request body, which corresponds to a valid BVN.


## OpenAPI

````yaml POST /v1/virtual-accounts/create
openapi: 3.1.0
info:
  title: API
  version: 1.0.0
  description: >-
    Platnova's Business API allows businesses to issue virtual accounts and
    cards to their employees, vendors, or retail customers. It allows businesses
    to streamline the process of issuing cards, manage spending, and track
    transactions. The API documentation provides information on how to integrate
    our virtual card issuing system into a business's existing systems and
    outlines the features and functionalities of the API, including card and
    account creation, management, and reporting. It also provides technical
    specifications, such as API requests, responses, and authentication
    processes.


    The API documentation is intended for developers and IT teams to use in
    order to effectively implement Platnova solutions into their business
    processes.


    # Authentication/Authorization


    To access any of the resources on the `{BaseUrl}/v1/`, the client has to
    pass pre-defined headers for authentication and authorization.


    The API is secure and only authorized clients can consume the service. There
    are API keys assigned to every business and JWT tokens assigned to every
    account for authentication/authorization.


    ## Bearer Token


    Requests may accept jwt tokens as below.


    ``` json

    Authorization: Bearer <jwt token>

     ```

    ## API Key


    Requests may acccept an api key either in the request headers or as a query
    parameter. Some requests cannot be authorized using an API key.


    ``` json

    X-API-KEY: <api key>

     ```

    OR


    ``` json

    ?api-key=<api key>

     ```

    # Base URL


    [https://sandbox.api.platnova.co](https://sandbox.api.platnova.co)


    # Errors


    Unauthorized API key


    ``` json

    {
        "status": false,
        "data": {},
        "error": [],
        "message": "unauthorized access"
    }

     ```

    Permission Denied


    ``` json

    {
        "status": false,
        "data": {},
        "error": [],
        "message": "unauthorized access: permission denied"
    }

     ```
servers:
  - url: https://api.platnova.com
    description: Production server
  - url: https://sandbox.api.platnova.co
    description: Development server
security:
  - apiKeyAuth: []
tags:
  - name: Customer
    description: Create and manage customers
  - name: Virtual Account
    description: Create and manage virtual accounts
  - name: Card
    description: Create and manage cards
  - name: Wallet
    description: List and manage wallets
  - name: Payment
    description: Send and verify payments
  - name: Transaction
    description: List transactions and generate receipts
  - name: Checkout
    description: Create and retrieve checkout sessions
  - name: Payment Link
    description: Create and manage payment links
  - name: Invoice
    description: Create and manage invoices
paths:
  /v1/virtual-accounts/create:
    post:
      tags:
        - Virtual Account
      summary: Create virtual account (customer)
      description: >-
        Create a virtual bank account for a customer in the specified currency.
        Requires customer_id and currency. For NGN, id_number (BVN) may be
        required.
      operationId: createUserVirtualAccount
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateUserVirtualAccountRequest'
            example:
              currency: NGN
              customer_id: 43a2b75e-5c59-429e-872a-2a54c7b17e34
              id_number: '22123456789'
              codes:
                - '058'
      responses:
        '200':
          description: Virtual account created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  data:
                    type: object
                    properties:
                      customer_id:
                        type: string
                      reference:
                        type: string
                      currency:
                        type: string
                      email:
                        type: string
                        format: email
                      first_name:
                        type: string
                      last_name:
                        type: string
                      created_on:
                        type: string
                        format: date-time
                      accounts:
                        type: array
                        items:
                          type: object
                          properties:
                            account_number:
                              type: string
                            account_name:
                              type: string
                            bank_name:
                              type: string
                            bank_code:
                              type: string
                            ach_routing_number:
                              type: string
                            rtp_routing_number:
                              type: string
                            wire_routing_number:
                              type: string
                            swift_code:
                              type: string
                            bank_address:
                              type: string
                  error:
                    type: array
                    items: {}
                  message:
                    type: string
        '400':
          description: Bad request (e.g. customer not found, account already exists)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    CreateUserVirtualAccountRequest:
      type: object
      required:
        - currency
        - customer_id
      properties:
        currency:
          type: string
          description: Account currency (e.g. USD, NGN)
        customer_id:
          type: string
          description: Customer ID
        id_number:
          type: string
          description: BVN for NGN accounts
        codes:
          type: array
          items:
            type: string
          description: Bank codes
    Error:
      type: object
      properties:
        status:
          type: boolean
        data:
          type: object
        error:
          type: array
          items: {}
        message:
          type: string
          description: Error message
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY
      description: API key for authentication.

````