Skip to main content
Version: Next

Create VA

POST /openapi/v1/va/va-account/create

Create a Virtual Account (VA) for the Merchant to receive bank transfer payments.
Call Get Services first to obtain service_code (used as x-service-code header). Passing qr-pay will trigger the QR Pay creation flow.

Payload before encryption:

{
"request_id": "8bd13901-b0f1-42c1-b38f-59cd0d8faff8",
"bank_account_no": "31052426",
"internal_code": "KH_0000024",
"qr_type": "qrpay"
}

internal_code is the Merchant CIF — it usually equals the Partner-Code (sandbox: KH_0000024), not a random number. va_type is auto-assigned "M" for x-service-code="qr-pay"; fixed_amount is optional (omit for a dynamic VA).

FieldRequiredDescription
request_id✅Unique identifier for each VA creation request
bank_account_no✅Merchant's underlying bank account number
internal_code✅Merchant CIF — the merchant's customer identifier at the bank (usually equals Partner-Code)
va_type✕Virtual account type (optional, auto-assigned "M" when x-service-code="qr-pay")
fixed_amount✕Fixed payment amount (if any)
qr_type✕QR type ("qrpay" if QR Pay, default "ibft")
curl --location '<base_url>/openapi/v1/va/va-account/create' \
--header 'Partner-Code: YOUR_PARTNER_CODE' \
--header 'x-service-code: SERVICE_CODE' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1…' \
--data '{
"data": ENCRYPTED_PAYLOAD
}'

Request​

Headers​

NameRequiredDescription
Partner-Code✅Merchant identifier code (provided by TCONNECT)
x-service-code✅Bank service code (from Get Services API). Passing qr-pay triggers QR Pay creation.
Content-Type✅application/json
Authorization✅Bearer <access_token> from Login

Body​

FieldTypeRequiredDescription
datastring✅AES-256-CBC encrypted payload as Hexadecimal

Response​

200 — VA created successfully​

FieldTypeDescription
va_account_nostringCreated virtual account number (e.g. VA100023312)
request_idstringRequest ID
ref_idintVirtual account reference ID

[!NOTE] System Data & Storage Notes:

  • Data sent to the processing system: Supplemented with qr_type ("qrpay" if QR Pay / default "ibft"), va_type (always set to "M" if x-service-code="qr-pay"), and fixed_amount (if present).
  • MMS DB Storage (res_partner_bank): When x-service-code="qr-pay", column acc_type in DB is stored as 'qr_pay' instead of 'va', and duplicate VA/QR check query applies to both types.