---
title: "Create Virtual Account"
method: POST
path: "/payments/va"
---

# Create Virtual Account

`POST /payments/va`

The following endpoint creates a new virtual account

## Request body

- object
  - `bank_code` string, required — The bank code for the Virtual Account. Supported Bank Codes: "BRI", "BCA", "MANDIRI", "PERMATA", "CIMB", "BNI", "NOBU"
  - `name` string, required — The name of the virtual account which will appear in ATM/Banking app. Example: "John's Virtual Account"
  - `is_closed` boolean — Whether account can accept open(any amount) or closed(specific amount). Example: true or false
  - `amount` string — Specify amount to be paid to va when is_closed=true. Example: "12000.12"
  - `customer` object, required — Object containing fields (id, email, mobile, given_name). One of (id, mobile, email) is mandatory field and given_name is mandatory.
    - `id` string — Durianpay's customer ID
    - `given_name` string — Customer's name
    - `mobile` string — Customer's mobile number in Indonesia's phone number format (+62xxxxxxxxxx or 08xxxxxxxxxx), with a length of 8 to 14 digits.
    - `email` string — Customer's email address in a valid email format (e.g., jane.doe@gmail.com) without invalid special characters (¢, £, §, ©, etc.)
    - `customer_ref_id` string — A unique reference ID from the merchant to identify the customer
  - `expiry_minutes` integer — Number of minutes left till expiry from now. maximum: 15768000 minutes
  - `account_suffix` string — Account suffix for the Virtual Account. If not provided, a random suffix will be automatically generated for the virtual account number.
  - `is_reusable` boolean — Whether multiple payments can be used for a particular VA. Example: true or false
  - `va_ref_id` string — A reference ID which the merchant wants to use for a specific VA. Example: "VA_XYZ_1234"
  - `auto_disable_after_payment` boolean — Disable a reusable VA temporarily after a payment. Patch API can be used to enable it again after changing some parameters. Example: true or false

## Response `200`

200

- object
  - `data` object
    - `customer_id` string
    - `virtual_account` object
      - `id` string
      - `bank_code` string
      - `account_number` string
      - `name` string
      - `is_closed` boolean
      - `amount` integer
      - `currency` string
      - `customer_id` string
      - `is_sandbox` boolean
      - `created_at` string
      - `expiry_at` string
      - `metadata` object
      - `is_disabled` boolean
      - `is_paid` boolean
      - `is_reusable` boolean
      - `min_amount` unknown
      - `max_amount` unknown
      - `va_ref_id` string
      - `auto_disable_after_payment` boolean

## Other responses

- `401` — 401
- `500` — 500

---

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