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

# Virtual accounts

> Learn how to use virtual to easily collect payments from your customers

Virtual accounts provide a straightforward, efficient, and flexible method for accepting bank transfer payments. This solution eliminates the need for complicated integrations or a dedicated website, making it accessible to businesses of all sizes and technical capabilities.
This guide will walk you through everything you need to know about using virtual accounts effectively.

## What are Virtual Accounts?

Virtual accounts are temporary digital bank account details (account number and bank name) that allow you to receive payments via bank transfer.
They function like regular bank accounts but are managed through Monieswitch Checkout and have a limited lifespan.

### Key Features

* Available for Nigerian Naira (NGN) transactions
* Can be created through our dashboard or via API
* Allow customers to pay you using familiar bank transfer methods
* Temporary nature: accounts have a configurable lifespan

<Note>
  Note: All virtual accounts are temporary. The lifespan can be configured, but
  after this time, the account will no longer be available for receiving
  payments.
</Note>

### Handling Expired Accounts

When a virtual account expires:

* The account immediately stops accepting payments
* Any attempted transfers will be rejected by our system
* You could also have a system in place to handle these rejected payments (e.g., notifying the customer, offering alternative payment methods) through our webhooks.

## How Virtual Accounts Work

<Tabs>
  <Tab title="Dashboard">
    <Steps>
      <Step title="Access Virtual Accounts">
        * Navigate to the dashboard
        * Click on "Virtual Accounts" in the main menu
        * Select the "Create Virtual Account" button

        <Frame>
          <img src="https://mintcdn.com/monieswitch-a80c7231/k8Ftg8fWbVmRIvyJ/images/create-virtual-acc.png?fit=max&auto=format&n=k8Ftg8fWbVmRIvyJ&q=85&s=7469813cb2642521cab83aba3b5b64fb" width="1992" height="1604" data-path="images/create-virtual-acc.png" />
        </Frame>
      </Step>

      <Step title="Complete Account Configuration">
        In the modal that appears, fill out the following fields:

        * **Account Name:** Enter a name for the virtual account (for your reference or to show the payer).
        * **Amount:** Enter the amount to be paid. If you want the payer to enter any amount, enable the checkbox "I don't specify a fixed amount"—the amount field will disappear.
        * **Email Address:** Enter the payer's email address (for notifications or receipts).
        * **Charge Bearer:** Select who will bear the transaction charges: customer, merchant, or subaccount.
        * **Subaccount:** If you select subaccount as the charge bearer, choose the specific subaccount from your list.

        <Note>
          - The amount field is only visible if you want to specify a fixed amount.
          - If you select subaccount as the charge bearer, you must select which subaccount will bear the fee.
        </Note>
      </Step>

      <Step title="Account Generation">
        Upon successful submission:

        * Your virtual account details will be generated
        * A usage timer will be displayed
        * The account is now ready for transactions

        <Frame>
          <img src="https://mintcdn.com/monieswitch-a80c7231/b9VCGopr8ctPliW8/images/virtual-acc-created.png?fit=max&auto=format&n=b9VCGopr8ctPliW8&q=85&s=8725ac317f38d2fc48f6ee66f2019c92" width="1766" height="1674" data-path="images/virtual-acc-created.png" />
        </Frame>

        <Info> The timer indicates the duration of account validity and when its elapses, a regeneration can be requests while on the screen </Info>
      </Step>
    </Steps>
  </Tab>

  <Tab title="API">
    <Steps>
      <Step title="Create virtual account">
        Use the API to create a virtual account. You can specify the details in the request body. Learn more about the API in the \[API reference.

        ```bash theme={"system"}
              curl --request POST \
              --url `https://${BASE_URL}/v1/virtual-accounts` \
              --header 'Content-Type: application/json' \
              --data '{
              "accountName": "Omar Marmoush",
              "amount": 200,
                 "metadata": {
                    "reason": "testing"
                 },
              }
        ```

        <Note> If selecting subaccount, you'll need to choose from your existing subaccounts. </Note>
      </Step>
    </Steps>
  </Tab>
</Tabs>

<Snippet file="api-reference-link.mdx" />
