---
title: "Create Reserved/Dynamic Virtual Account"
method: POST
path: "/merchant-collection/merchant/virtual_account/generate_virtual_account"
tags: ["Virtual Accounts"]
---

# Create Reserved/Dynamic Virtual Account

`POST /merchant-collection/merchant/virtual_account/generate_virtual_account`

This API endpoint allows you to create dynamic virtual accounts with a duration of 30 mins and reserved/static virtual accounts that are permanent. Our virtual accounts guide can be found [here](/guides/virtual-accounts)

## Request body

- union
  - CreateDynamicAccountRequest
    - `account_name` string, required — The name assigned to the virtual account being created.
    - `account_type` string, required — Type of virtual account. **“Dynamic‶** is the default value
    - `bank_code` string, required — The code of the bank providing the virtual account. **“1067‶** for 78 FINANCE COMPANY LIMITED, **“117‶** for FIDELITY BANK LIMITED, **“140‶** for GLOBUS BANK LIMITED.
    - `has_amount_validation` string — This is used to give control on amount validation for virtual accounts being created i.e. allow underpayment or overpayment or exact amounts. This is only available for **GLOBUS BANK LIMITED** and **78 FINANCE COMPANY LIMITED**.
    - `account_reference` string, required — The unique identifier for the transaction..
    - `customer_first_name` string, required — The first name of the customer.
    - `customer_last_name` string, required — The last name of the customer.
    - `customer_email` string, email, required — The customer's email address.
    - `customer_phone_number` string — The customer's phone number.
    - `transaction_description` string — The description or narration of the transaction.
    - `transaction_amount` string, required — The amount to be paid in the transaction.
    - `expires_in_minutes` string — The number of minutes for which the virtual account will be valid. The default is 30 minutes. Minimum: 15 minutes, Maximum: 480 minutes. This is only available for **78 FINANCE COMPANY LIMITED**.
  - CreateReservedAccountRequest
    - `account_name` string, required — The name assigned to the reserved account being created.
    - `account_type` string, required — Type of virtual account. **“Static‶** is the default value
    - `bank_code` string, required — The code of the bank providing the virtual account. **“1067‶** for 78 FINANCE COMPANY LIMITED **“117‶** for FIDELITY BANK LIMITED **“140‶** for GLOBUS BANK LIMITED.
    - `bvn` string, required — Bank Verification Number (BVN) of the customer..
    - `bvn_validated` boolean, required — This indicates whether the BVN has been validated by the merchant.
    - `account_reference` string, required — The unique identifier for the account.
    - `customer_first_name` string, required — The first name of the customer..
    - `customer_last_name` string, required — The last name of the customer..
    - `customer_email` string, email, required — The email address of the customer..
    - `customer_phone_number` string — The phone number of the customer.

## Response `200`

Transfer initiated successfully

- union
  - CreateDynamicAccountResponse
    - `success` boolean — Request success status.
    - `message` string — Response message.
    - `data` object — Generated virtual account details.
      - `account_name` string — Full name on the generated account.
      - `account_number` string — The 1virtual account number.
      - `account_type` string — Type of account generated (Dynamic or Static).
      - `bank_name` string — Name of the bank provider.
      - `account_reference` string — Merchant provided reference.
      - `transaction_id` integer — Unique transaction identifier.
      - `transaction_amount_payable` number — Amount payable (if amount validation is enabled).
      - `transaction_reference` string — The unique identifier for the transaction..
      - `expires_in_minutes` integer — Duration before the account expires (for dynamic accounts).
  - CreateReservedAccountResponse
    - `success` boolean — Request success status.
    - `message` string — Response message.
    - `data` object — Reserve account details.
      - `account_name` string — The name of the reserved virtual account being created.
      - `account_number` string — The virtual account number.
      - `account_type` string — Type of account (Static).
      - `bank_name` string — Name of the bank provider.
      - `account_reference` string — The unique identifier for the account.

## Other responses

- `400` — Invalid request

---

[API](https://skmtc.net/payaza/apis/payaza-documentation.md) · [All operations](https://skmtc.net/payaza/apis/payaza-documentation/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/payaza/payaza-documentation/versions/1ecd4b94ff07/schema)
