---
title: "Create Virtual Account"
method: POST
path: "/v1/virtual/accounts"
tags: ["Virtual Accounts"]
---

# Create Virtual Account

`POST /v1/virtual/accounts`

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

## Headers

- `x-on-behalf-of` string
- `x-idempotency-key` string, uuid
- `x-request-id` string

## Request body

- object
  - `currency` string, required — Multiple currencies are joined using commas. Currency code [ISO_4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes).
  - `payment_method` union — The payment method details to confirm the PaymentIntent. The PaymentIntent will be confirmed automatically when `payment_method` is set.
    - object
      - `type` 'card', required
      - `card` object, required
        - `card_name` string, required — Card holder name. Maximum length is 128.
        - `card_number` string, required — Card number.
        - `expiry_month` string, required — Two digit number representing the card's expiration month.
        - `expiry_year` string, required — Four digit number representing the card's expiration year.
        - `cvc` string, required — The CVC code of this card is mandatory for all transactions, except for those initiated by the merchant or involving network tokenization.
        - `network` 'visa' | 'mastercard' | 'unionpay', required — The card network. The card networks listed are accepted values for this field. Availability is evaluated at the account level.
        - `billing` CardBilling, required — Billing information of the customer.
          - `first_name` string, required — First name of the customer. Maximum length is 128.
          - `last_name` string, required — Last name of the customer. Maximum length is 128.
          - `email` string, email, required — Email address of the customer.
          - `phone_number` string — Phone number of the customer.
          - `address` Address, required
            - `country_code` string, required — The two-letter country code in ISO 3166-1 alpha-2 format.
            - `state` string — State or province of the address. Maximum of 100 characters. - Required when `country_code` is "US" or "CA".
            - `city` string, required — City of the address. Maximum of 100 characters.
            - `street` string, required — Street of the address. Maximum of 100 characters.
            - `postcode` string, required — Postcode of the address. Maximum of 10 characters.
        - `auto_capture` boolean — Specifies whether the funds should be requested automatically after the payment is authorized. Set it to `false` if you want to capture the funds sometimes later.
        - `authorization_type` 'authorization' | 'pre_authorization', required — The authorization type for the card payment. Options are `authorization` (default) and `pre_authorization`. Use `pre_authorization` to hold funds for more than 7 days, available only for Visa and Mastercard. `auto_capture` must be `false` for pre-authorization.
        - `three_ds_action` 'enforce_3ds' | 'skip_3ds', required — Controls 3D Secure behavior for this payment: - `enforce_3ds`: Always trigger 3DS authentication, regardless of issuer risk assessment. - `skip_3ds`: Skip 3DS authentication. The liability for chargebacks remains with the merchant.
        - `three_ds` CardThreeDS
          - `return_url` string — Return URL for 3ds callbacks (in case 3ds is triggered).
          - `acs_response` string — 3DS ACS response (application/x-www-form-urlencoded).
          - `device_data_collection_res` string — Device data collection response.
          - `ds_transaction_id` string — 3DS transactionId.
    - object
      - `type` 'card_present', required
      - `card_present` object, required
        - `card_number` string, required — Card number.
        - `expiry_month` string, required — MM
        - `expiry_year` string, required — YYYY
        - `cardholder_verification_method` 'online_pin' | 'manual_signature' | 'skipped' — Method used to verify the cardholder's identity at the point of sale. - `online_pin`: Cardholder entered a PIN that was verified online by the issuer. - `manual_signature`: Cardholder provided a handwritten signature. - `skipped`: Cardholder verification was not performed (e.g., contactless under floor limit).
        - `encrypted_pin` string — Encrypted personal identification number.
        - `pan_entry_mode` 'manual_entry' | 'chip' | 'magstripe' | 'contactless_chip' | 'contactless_magstripe', required — The way the terminal reads the card information: - `manual_entry`: Manually keyed into POS terminal - `chip`: Read from direct contact with a chip card - `magstripe`: Read from direct contact with magnetic stripe card - `contactless_chip`: Read from a contactless interface using chip data - `contactless_magstripe`: Read from a contactless interface using magnetic stripe data (MSD)
        - `fallback` boolean — The default is false. Set to true when: - Chip card at a chip-capable terminal was unable to process transactions using data on the chip or magnetic strip and use entry mode manual - Chip card at a chip-capable terminal was unable to process transactions using data on the chip and use entry mode `contact_magnetic_stripe_card`
        - `fallback_reason` 'chip_read_failure' — Fallback reason applicable when fallback is true. Set to `chip_read_failure` when all of the following conditions are met: - The transaction is initiated at a chip-capable terminal - `pan_entry_mode` is `magstripe` - The previous transaction initiated by the terminal was an unsuccessful chip read
        - `emv_tags` string — Tag-length-value (TLV)-encoded data read from a chip card.
        - `track1` string — Track 1 read from magnetic stripe card
        - `track2` string — Track 2 is read from a magnetic stripe card or is track 2 equivalent data get from the chip card. Track 2 is required when pan_entry_mode is not `manual_entry`.
        - `terminal_info` object
          - `terminal_id` string — An up to 8 digit alphanumeric ID used to identify the terminal at the card acceptor location of the user's POS system.
          - `mobile_device` boolean — Indicate whether the POS terminal is a mobile POS device.
          - `system_trace_audit_number` string — System Trace Audit Number. A 6-digit numeric sequence that uniquely identifies each transaction processed by a terminal. Critical for transaction reconciliation and dispute resolution.
          - `use_embedded_reader` boolean — Indicate whether the reader is embedded in a mobile POS device.
    - object
      - `type` 'applepay', required
      - `applepay` object, required — Apple Pay payment information. Required when `type` is set to `applepay`.
        - `flow` 'redirect' | 'mobile_web' | 'mobile_app' | 'contactless', required — Specifies the checkout flow type: - `redirect`: Redirect-based online payment - `mobile_web`: Mobile browser (H5) payment - `mobile_app`: Native app payment - `contactless`: In-person NFC contactless payment
        - `os_type` 'ios' — Required when `flow` is `mobile_web` or `mobile_app`. Fixed value `ios` for Apple Pay.
        - `is_present` boolean — Whether the customer is physically present during payment. Set to `true` for in-person (contactless) payments, `false` for online payments.
        - `network` 'visa' | 'mastercard' | 'amex' | 'discover' | 'jcb', required — The card network (lowercase).
        - `card_type` 'debit' | 'credit' — The type of the card.
        - `token_type` 'decrypted' | 'encrypted', required — The token data format: - `decrypted`: Merchant has decrypted the Apple Pay token and provides structured DPAN + Cryptogram data - `encrypted`: Raw encrypted Apple Pay token (reserved for future use)
        - `auth_method` 'cryptogram_3ds' | 'pan_only', required — The authentication method used by Apple Pay: - `cryptogram_3ds`: Token includes a cryptogram, 3DS is already applied. No additional 3DS required. - `pan_only`: Token contains only PAN data. Additional 3DS verification may be triggered.
        - `network_token` object, required — The decrypted Network Token data. Required when `token_type` is `decrypted`.
          - `number` string, required — Device Primary Account Number (DPAN), 12-52 characters.
          - `expiry_month` string, required — Two-digit expiration month (01-12).
          - `expiry_year` string, required — Four-digit expiration year.
          - `cryptogram` string, required — Online Payment Cryptogram (Base64 encoded). Only required when `auth_method` is `cryptogram_3ds`.
          - `eci` string — Electronic Commerce Indicator. Only required when `auth_method` is `cryptogram_3ds`. Typical value: `07`.
        - `billing_contact` object — Billing contact information from Apple Pay.
          - `first_name` string — Given name (first name).
          - `last_name` string — Family name (last name).
          - `email` string, email — Email address.
          - `phone` string — Phone number.
          - `address` object — Billing address.
            - `street` string — Street address.
            - `city` string — City.
            - `state` string — State or province.
            - `postal_code` string — Postal code.
            - `country_code` string — Country code (ISO 3166-1 alpha-2).
    - object
      - `type` 'googlepay', required
      - `googlepay` object, required — Google Pay payment information. Required when `type` is set to `googlepay`.
        - `flow` 'redirect' | 'mobile_web' | 'mobile_app' | 'contactless', required — Specifies the checkout flow type: - `redirect`: Redirect-based online payment - `mobile_web`: Mobile browser (H5) payment - `mobile_app`: Native app payment - `contactless`: In-person NFC contactless payment
        - `os_type` 'ios' | 'android' — Required when `flow` is `mobile_web` or `mobile_app`. One of `ios`, `android`.
        - `is_present` boolean — Whether the customer is physically present during payment. Set to `true` for in-person (contactless) payments, `false` for online payments.
        - `network` 'visa' | 'mastercard' | 'amex' | 'discover' | 'jcb', required — The card network (lowercase).
        - `card_type` 'debit' | 'credit' — The type of the card.
        - `token_type` 'decrypted' | 'encrypted', required — The token data format: - `decrypted`: Merchant has decrypted the Google Pay token and provides structured DPAN + Cryptogram data - `encrypted`: Raw encrypted Google Pay token (reserved for future use)
        - `auth_method` 'cryptogram_3ds' | 'pan_only', required — The authentication method used by Google Pay: - `cryptogram_3ds`: Token includes a cryptogram, 3DS is already applied. No additional 3DS required. - `pan_only`: Token contains only PAN data. Additional 3DS verification may be triggered.
        - `network_token` object, required — The decrypted Network Token data. Required when `token_type` is `decrypted`.
          - `number` string, required — Device Primary Account Number (DPAN), 12-52 characters.
          - `expiry_month` string, required — Two-digit expiration month (01-12).
          - `expiry_year` string, required — Four-digit expiration year.
          - `cryptogram` string — Online Payment Cryptogram (Base64 encoded). Only required when `auth_method` is `cryptogram_3ds`.
          - `eci` string — Electronic Commerce Indicator. Only required when `auth_method` is `cryptogram_3ds`. Typical value: `05`.
        - `billing_address` object — Billing address information from Google Pay.
          - `first_name` string — First name.
          - `last_name` string — Last name.
          - `email` string, email — Email address.
          - `phone` string — Phone number.
          - `address1` string — Address line 1.
          - `address2` string — Address line 2.
          - `locality` string — City or locality.
          - `administrative_area` string — State, province, or administrative area.
          - `postal_code` string — Postal code.
          - `country_code` string — Country code (ISO 3166-1 alpha-2).
    - object
      - `type` 'alipaycn', required
      - `alipaycn` object, required — AlipayCN payment information. Required when `type` is set to `alipaycn`
        - `flow` 'qrcode', required — The specific payment flow to use.
        - `os_type` 'ios' | 'android' — Required when flow is `mobile_web` or `mobile_app`. One of `ios`, `android`.
        - `is_present` boolean — Whether the customer is physically present during payment.
        - `payment_code` string — The customer presents a payment code (generated from a payment app like an e-wallet) to the merchant for scanning.
    - object
      - `type` 'alipayhk', required
      - `alipayhk` object, required — AlipayHK payment information. Required when `type` is set to `alipayhk`
        - `flow` 'qrcode', required — The specific payment flow to use.
        - `os_type` 'ios' | 'android' — Required when flow is `mobile_web` or `mobile_app`. One of `ios`, `android`.
        - `payment_code` string — The customer presents a payment code (generated from a payment app like an e-wallet) to the merchant for scanning.
        - `is_present` boolean — Whether the customer is physically present during payment.
    - object
      - `type` 'unionpay', required
      - `unionpay` object, required — UnionPay payment information. Required when `type` is set to `unionpay`
        - `flow` 'qrcode' | 'securepay', required — The UnionPay checkout flow: - `qrcode`: Merchant-presented QR code for the customer to scan with the UnionPay app. - `securepay`: Server-to-server secure payment (redirect-based online checkout).
        - `os_type` 'ios' | 'android' — Required when flow is `mobile_app`. One of `ios`, `android`.
        - `is_present` boolean — Whether the customer is physically present during payment.
        - `payment_code` string — The customer presents a payment code (generated from a payment app like an e-wallet) to the merchant for scanning.
    - object
      - `type` 'wechatpay', required
      - `wechatpay` object, required — WeChat Pay payment information. Required when `type` is set to `wechatpay`.
        - `flow` 'qrcode' | 'mini_program' | 'mobile_app' | 'mobile_web' | 'official_account', required — The WeChat Pay checkout flow: - `qrcode`: Merchant-presented QR code for the customer to scan. - `mini_program`: Payment inside a WeChat Mini Program. - `mobile_app`: Payment triggered from a native mobile app via WeChat SDK. - `mobile_web`: Payment triggered from a mobile browser (H5), redirects to WeChat. - `official_account`: Payment inside a WeChat Official Account (JSAPI).
        - `os_type` 'ios' | 'android' — Required when flow is `mobile_web` or `mobile_app`. One of `ios`, `android`.
        - `payment_code` string — The customer presents a payment code (generated from a payment app like an e-wallet) to the merchant for scanning.
        - `is_present` boolean — Whether the customer is physically present during payment.
        - `open_id` string — Required when `flow` is `mini_program`, `mobile_app` or `official_account`.
    - object
      - `type` 'grabpay', required
      - `grabpay` object, required — GrabPay payment information. Required when `type` is set to `grabpay`.
        - `flow` 'qrcode', required — Specifies the checkout flow type.
        - `os_type` 'ios' | 'android' — Required when flow is `mobile_web`.
        - `is_present` boolean — Whether the customer is physically present during payment.
        - `payment_code` string — The customer presents a payment code (generated from a payment app like an e-wallet) to the merchant for scanning.
        - `shopper_name` string — The name of the shopper.
    - object
      - `type` 'crypto', required
      - `crypto` object, required — Cryptocurrency payment information. Required when `type` is set to `crypto`. **Important:** Currency must be `USD`. **Legal Notice:** This API Reference is issued and published by UQPAY PTY LTD (UQPAY Australia), a member of the UQPAY Group. As the sole publishing entity, UQPAY Australia assumes full and exclusive responsibility for the content, versioning, and maintenance of this document. Unless expressly stated otherwise, no other entity within the UQPAY Group shall be considered a publisher or held liable for the information contained herein.
        - `flow` 'redirect' | 'qrcode', required — The specific payment flow to use: - `redirect`: Redirects customer to a crypto payment gateway - `qrcode`: Generates a QR code for direct blockchain payment
        - `network` 'ETH' | 'TRON' — Blockchain network for the transaction. Required when `flow` is `qrcode`. - `ETH`: Ethereum network - `TRON`: TRON network
        - `is_present` false, required — Whether the customer is physically present during payment. Must be `false` for crypto payments.
        - `payer_info` object — Payer compliance information collected to satisfy the AML/CTF Travel Rule for virtual asset transfers. **Conditional requirement:** Required when the order amount reaches the compliance threshold configured by UQPAY for the merchant; otherwise this object can be omitted entirely.
          - `name` string, required — Full legal name of the payer (individual or entity).
          - `email` string, email — Payer email address. Validated for standard email format when provided.
          - `identifier` object, required — A unique identifier for the payer. Exactly one identifier must be provided, selected via the `type` field. The structure of `value` varies based on `type`.
            - `type` 'document_number' | 'birth_info' | 'address', required — The category of identifier provided: - `document_number`: A government-issued identification document - `birth_info`: Date and place of birth - `address`: Structured residential or business address
            - `value` union, required — The identifier payload. Structure depends on `type`.
              - …
    - object
      - `type` 'paynow', required
      - `paynow` object, required — PayNow payment information. Required when `type` is set to `paynow`.
        - `flow` 'qrcode', required — The checkout flow. Only `qrcode` (merchant-presented QR code) is supported.
        - `is_present` boolean — Whether the customer is physically present during payment.
    - object
      - `type` 'truemoney', required
      - `truemoney` object, required — Truemoney payment information. Required when `type` is set to `truemoney`.
        - `flow` 'qrcode', required — The specific payment flow to use.
        - `os_type` 'ios' | 'android' — Required when flow is `mobile_web` or `mobile_app`. One of `ios`, `android`.
        - `payment_code` string — The customer presents a payment code (generated from a payment app like an e-wallet) to the merchant for scanning.
        - `is_present` boolean — Whether the customer is physically present during payment.
    - object
      - `type` 'tng', required
      - `tng` object, required — Touch'n Go payment information. Required when `type` is set to `tng`.
        - `flow` 'qrcode', required — The specific payment flow to use.
        - `os_type` 'ios' | 'android' — Required when flow is `mobile_web` or `mobile_app`. One of `ios`, `android`.
        - `payment_code` string — The customer presents a payment code (generated from a payment app like an e-wallet) to the merchant for scanning.
        - `is_present` boolean — Whether the customer is physically present during payment.
    - object
      - `type` 'gcash', required
      - `gcash` object, required — GCash payment information. Required when `type` is set to `gcash`.
        - `flow` 'qrcode', required — The specific payment flow to use.
        - `os_type` 'ios' | 'android' — Required when flow is `mobile_web` or `mobile_app`. One of `ios`, `android`.
        - `payment_code` string — The customer presents a payment code (generated from a payment app like an e-wallet) to the merchant for scanning.
        - `is_present` boolean — Whether the customer is physically present during payment.
    - object
      - `type` 'dana', required
      - `dana` object, required — Dana payment information. Required when `type` is set to `dana`.
        - `flow` 'qrcode', required — The specific payment flow to use.
        - `os_type` 'ios' | 'android' — Required when flow is `mobile_web` or `mobile_app`. One of `ios`, `android`.
        - `payment_code` string — The customer presents a payment code (generated from a payment app like an e-wallet) to the merchant for scanning.
        - `is_present` boolean — Whether the customer is physically present during payment.
    - object
      - `type` 'kakaopay', required
      - `kakaopay` object, required — KakaoPay payment information. Required when `type` is set to `kakaopay`.
        - `flow` 'qrcode', required — The specific payment flow to use.
        - `os_type` 'ios' | 'android' — Required when flow is `mobile_web` or `mobile_app`. One of `ios`, `android`.
        - `payment_code` string — The customer presents a payment code (generated from a payment app like an e-wallet) to the merchant for scanning.
        - `is_present` boolean — Whether the customer is physically present during payment.
    - object
      - `type` 'toss', required
      - `toss` object, required — Toss Pay payment information. Required when `type` is set to `toss`.
        - `flow` 'qrcode', required — The specific payment flow to use.
        - `os_type` 'ios' | 'android' — Required when flow is `mobile_web` or `mobile_app`. One of `ios`, `android`.
        - `payment_code` string — The customer presents a payment code (generated from a payment app like an e-wallet) to the merchant for scanning.
        - `is_present` boolean — Whether the customer is physically present during payment.
    - object
      - `type` 'naverpay', required
      - `naverpay` object, required — Naver Pay payment information. Required when `type` is set to `naverpay`.
        - `flow` 'qrcode', required — The specific payment flow to use.
        - `os_type` 'ios' | 'android' — Required when flow is `mobile_web` or `mobile_app`. One of `ios`, `android`.
        - `payment_code` string — The customer presents a payment code (generated from a payment app like an e-wallet) to the merchant for scanning.
        - `is_present` boolean — Whether the customer is physically present during payment.

## Response `200`

VA Account creation successfully.

- object
  - `message` 'SUCCESS', required
  - `request_id` string — Echoes the x-request-id supplied by the client and can be used to correlate the asynchronous Virtual Account workflow.

---

[API](https://skmtc.dev/uqpay/apis/authentication-api.md) · [All operations](https://skmtc.dev/uqpay/apis/authentication-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/uqpay/authentication-api/revisions/cef532a10777/schema)
