> ## 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.

# Generate Dynamic Virtual Account

> Generate a dynamic, single-use virtual account for a customer with a fixed amount and configurable expiry. The account automatically expires after the specified lifespan and can only receive a payment matching the exact amount.

## Overview

Generate a dynamic, single-use virtual account for a customer with a fixed receivable amount and a configurable expiry window. The account is tied to an exact amount - it will only accept a payment matching that value - and automatically becomes inactive once the lifespan elapses or the payment is received.

This is ideal for checkout flows, invoice payments, or any scenario where you need a guaranteed, one-time payment collection without reusing a permanent account.


## OpenAPI

````yaml POST /v1/virtual-accounts/dynamic
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/dynamic:
    post:
      tags:
        - Virtual Account
      summary: Generate single-use virtual account
      description: >-
        Generate a dynamic, single-use virtual account for a customer with a
        fixed amount and configurable expiry. The account automatically expires
        after the specified lifespan and can only receive a payment matching the
        exact amount.
      operationId: createDynamicVirtualAccount
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDynamicVirtualAccountRequest'
            example:
              customer_id: aad8aff0-00db-48b0-9bb0-9b399c313438
              amount: 200
              lifespan_minutes: 20
      responses:
        '200':
          description: Dynamic virtual account created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  data:
                    type: object
                    properties:
                      account_name:
                        type: string
                      account_no:
                        type: string
                      amount:
                        type: number
                      currency:
                        type: string
                      bank_name:
                        type: string
                      reference:
                        type: string
                      email:
                        type: string
                        format: email
                      expires_at:
                        type: string
                        format: date-time
                      payment_session_id:
                        type: string
                      usage:
                        type: string
                      created_at:
                        type: string
                        format: date-time
                      customer_id:
                        type: string
                  error:
                    type: array
                    items: {}
                  message:
                    type: string
              example:
                status: true
                data:
                  account_name: 'PLATNOVA TECHNOLOGIES LTD/PLATNOVA '
                  account_no: '9000043059'
                  amount: 200
                  currency: ngn
                  bank_name: BEAMER (GABSYN) MICROFINANCE BANK
                  reference: BDEPSTbdpLERjSmvg2XbF9iTA0bXxrX8E88BOI
                  email: emmrysjonathan@gmail.com
                  expires_at: '2026-03-19T23:13:03.140476016Z'
                  payment_session_id: ''
                  usage: integration
                  created_at: '2026-03-19T22:53:03.140476016Z'
                  customer_id: aad8aff0-00db-48b0-9bb0-9b399c313438
                error: []
                message: operation was successful
        '400':
          description: Bad request (e.g. customer not found, invalid amount)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    CreateDynamicVirtualAccountRequest:
      type: object
      required:
        - customer_id
        - amount
        - lifespan_minutes
      properties:
        customer_id:
          type: string
          description: Unique ID of the customer to generate the account for
        amount:
          type: number
          description: The exact amount the account will accept
        lifespan_minutes:
          type: integer
          description: How long the account remains active, in minutes
    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.

````