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

# Create Virtual Account

> Virtual Accounts are foreign currency accounts that function as local bank accounts. They can be used to collect funds from around the world. You get account details that enable you to collect funds from various platforms. Global Accounts can also be used to top up your UQPAY balance.

### Notes on Account Creation Behavior
Currently, the API response to a successful request will always return a status of `SUCCESS`, regardless of whether the Virtual Account (VA) has actually been created.

The actual status of the VA can be tracked through [Webhooks](/global-account/v1.6/webhooks/virtual-account-create-update):

- `virtual.account.create`: Indicates that the request to create a VA has been initiated for the specified currency.
- `virtual.account.update` with `status = Active`: Indicates that the VA has been successfully created and is now available for use.

> **No webhook will be sent in the event of a failure to create the Virtual Account.**




## OpenAPI

````yaml /global-account/v1.6/banking.yaml post /v1/virtual/accounts
openapi: 3.0.2
info:
  title: Banking API
  version: 0.0.1
  description: >
    UQPAY Banking API provides comprehensive banking and payment solutions for
    global money movement.


    ## Key Features

    - International payments and transfers

    - Multi-currency account management

    - Real-time currency conversion

    - Virtual account services

    - Fund deposit and withdrawal


    ## Authentication

    Use API keys to authenticate your client requests when utilizing UQPAY APIs.

    API keys are unique data strings used to authenticate users and enable
    access to privileged operations.

    Your API key should be kept confidential and secure at all times.


    ## Service Components

    - **Payout**: Create and manage international fund transfers to
    beneficiaries

    - **Payer**: Manage entities making payments and authorizing fund transfers

    - **Beneficiary**: Handle recipient information and bank details

    - **Balance**: View and manage multi-currency account balances

    - **Deposit**: Process incoming fund transfers

    - **Virtual Accounts**: Utilize local bank accounts in foreign currencies

    - **Conversion**: Execute currency exchange at competitive rates


    ## Getting Started

    1. Obtain API credentials

    2. Set up test environment using sandbox URL

    3. Implement authentication

    4. Start with basic operations


    ## Support

    For technical support and integration assistance, contact UQPAY support
    team.
  contact:
    name: UQPAY Support
    url: https://www.uqpay.com/support
    email: banking.tech@uqpay.com
  license:
    name: Proprietary
    url: https://www.uqpay.com/legal/api-terms
  termsOfService: https://www.uqpay.com/legal/terms
  x-api-id: banking-api-v1.6.0
  x-logo:
    url: https://uqpay.com/img/UQPAY_LogoAnimv2.gif
    backgroundColor: '#FFFFFF'
    altText: UQPAY Logo
  x-categories:
    - Banking
    - Payment Processing
    - Foreign Exchange
servers:
  - url: https://api-sandbox.uqpaytech.com/api
    description: Sandbox base URL.
  - url: https://api.uqpay.com/api
    description: Production base URL.
security: []
tags:
  - name: Balances
    description: >-
      View and manage available funds across different currencies in your
      account.
  - name: Transfers
    description: >-
      A wallet transfer resource is used for sending funds directly from your
      UQPAY account to a connected account.
  - name: Deposits
    description: >-
      Deposits are bank transfers made into your UQPAY Global Accounts for
      adding funds or collecting funds from third parties.
  - name: Virtual Accounts
    description: >-
      Virtual Accounts function as local bank accounts in foreign currencies.
      They enable worldwide fund collection with account details that allow you
      to receive funds from various platforms. Virtual Accounts can also be used
      to top up your UQPAY balance.
  - name: Payout
    description: >-
      A Payout resource is created when you send funds to a beneficiary. It
      details the beneficiary, bank details, the amount being paid, its status,
      and other relevant information. You can create the payout using either
      direct beneficiary details or a previously created beneficiary ID.
  - name: Payers
    description: >-
      The payer is the party making the payout and authorizing the transfer of
      funds from their account to the beneficiary's account.
  - name: Beneficiaries
    description: >-
      The beneficiary is the recipient of the funds and is typically the party
      who will ultimately benefit from the payout.
  - name: Conversion
    description: Manage currency conversions and exchange rates for your transactions.
  - name: Exchange Rates
    description: >-
      Retrieve real-time exchange rates for a specified currency pair or all
      available pairs.
  - name: Global Accounts
    description: >-
      ⚠️ WARNING This API version is deprecated. Eventually, a deprecated API
      version becomes unsupported. Global Accounts are foreign currency accounts
      that function as local bank accounts.
  - name: Simulator
    description: Simulate deposit transactions on the sandbox environment.
paths:
  /v1/virtual/accounts:
    post:
      tags:
        - Virtual Accounts
      summary: Create Virtual Account
      description: >
        Virtual Accounts are foreign currency accounts that function as local
        bank accounts. They can be used to collect funds from around the world.
        You get account details that enable you to collect funds from various
        platforms. Global Accounts can also be used to top up your UQPAY
        balance.


        ### Notes on Account Creation Behavior

        Currently, the API response to a successful request will always return a
        status of `SUCCESS`, regardless of whether the Virtual Account (VA) has
        actually been created.


        The actual status of the VA can be tracked through
        [Webhooks](/global-account/v1.6/webhooks/virtual-account-create-update):


        - `virtual.account.create`: Indicates that the request to create a VA
        has been initiated for the specified currency.

        - `virtual.account.update` with `status = Active`: Indicates that the VA
        has been successfully created and is now available for use.


        > **No webhook will be sent in the event of a failure to create the
        Virtual Account.**
      operationId: create-virtual-account
      parameters:
        - $ref: '#/components/parameters/XOnBehalfOf'
        - $ref: '#/components/parameters/XIdempotencyKey'
        - $ref: '#/components/parameters/XRequestId'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - currency
              properties:
                currency:
                  type: string
                  description: >-
                    Multiple currencies are joined using commas. Currency code
                    [ISO_4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).
                  example: USD,SGD
                payment_method:
                  $ref: '#/components/schemas/PaymentMethod'
      responses:
        '200':
          headers:
            x-response-id:
              $ref: '#/components/headers/XResponseId'
          description: VA Account creation successfully.
          content:
            application/json:
              schema:
                title: AccountCreateResponse
                type: object
                additionalProperties: false
                properties:
                  message:
                    type: string
                    example: SUCCESS
      security:
        - XAuthToken: []
components:
  parameters:
    XOnBehalfOf:
      in: header
      name: x-on-behalf-of
      schema:
        type: string
      required: false
      description: >
        Specifies the sub-account on whose behalf the request is made. This
        should be set to the `account_id`, which can be retrieved via the [List
        Connected
        Accounts](/account-center/v1.6/api-reference/list-connected-accounts-1).
        If omitted or empty, the request is executed using the master account.

        More information at [Connected
        Accounts](/account-center/v1.6/guide/connected-accounts).
      example: 18523f72-f4de-4f9c-bb8e-ec7d1c4f32be
    XIdempotencyKey:
      in: header
      name: x-idempotency-key
      schema:
        type: string
        format: uuid
      required: true
      description: >-
        A unique identifier (UUID) used to maintain operation idempotency,
        ensuring that repeated executions of the same operation do not result in
        unintended effects or duplication. It helps preserve data consistency in
        the face of network errors, retries, or failures.
      example: 2adesf8e-9d63-44bc-b975-9b6ae3440dde
    XRequestId:
      in: header
      name: x-request-id
      schema:
        type: string
        maxLength: 64
      required: false
      description: >-
        A custom identifier for the request, up to 64 characters. If provided,
        this value is returned in the associated webhook event as `request_id`.
      example: my-va-request-001
  schemas:
    PaymentMethod:
      type: string
      example: LOCAL
      description: >
        The payment method needs to be specified to ensure that accurate banking
        details are captured and validated for the specified payment method.


        - `LOCAL`: Payment processed through domestic payment networks with
        local clearing systems.

        - `SWIFT`: International payment processed through the SWIFT network for
        cross-border transfers.
      enum:
        - LOCAL
        - SWIFT
  headers:
    XResponseId:
      description: >-
        Universally unique identifier (UUID v4) for the response. Helpful for
        identifying a request when communicating with UQPAY support.
      schema:
        type: string
        format: uuid
        example: 2adba88e-9d63-44bc-b975-9b6ae3440dde
  securitySchemes:
    XAuthToken:
      type: apiKey
      in: header
      name: x-auth-token
      description: The API token for login provided by UQPay.

````