Skip to main content

Create a virtual account (VA)

Use this API to create a new virtual account (VA) for a Merchant, so you can receive balance notifications and manage cash flows separately.

tip

This API registers for credit notifications (money in). To receive debit notifications (money out) on an ACB account, use the Register for debit notifications API.

PUBLIC SANDBOX — BANK LINKING

Try the full account linking and OTP verification flow with simulated data.

POST
URLhttps://open-api.tingee.vn/v1/create-va

Start a request to create or link a virtual account with the bank. The result returns a confirmId to use in the next confirmation step.

Header Request​

HeaderRequiredDescription
Content-Type✓application/json
x-client-id✓Partner identifier issued by TINGEE.
x-signature✓HMAC SHA512 authentication signature. See How to generate the signature.
x-request-timestamp✓Time the request is sent (format: yyyyMMddHHmmssSSS, UTC+7)
Important note for VIB (applies to all 3 account types)

For VIB (bankBin: "970441"), the customer must register for the payment speaker on VIB iBusiness before you call the create VA API. See the steps in VIB account linking requirements or the VIB tab in Sample Request Body.

Body Parameter​

1. Bank & general account information​

FieldTypeRequiredDescription
bankBinstring✓Bank BIN (6 digits). See Supported banks. Examples: 970418 (BIDV), 970436 (VCB), 970422 (MBB), 970415 (VietinBank)...
accountTypestring~Account type (BankAccountTypeEnum):
- personal-account: personal account.
- business-account: business account.
- business-household-account: household business account.
Required for all banks except BAOKIM.
accountNumberstring~Original bank account number to link.
Not required for: TPBank, VCB, MSB and BAOKIM.
accountNamestring~Bank account holder name (uppercase, without diacritics).
Not required for TPBank, PGBank, BAOKIM and business accounts of BIDV, OCB, VIB, SHINHAN, VietinBank (CTG).
identitystring~Customer's identity document (ID card / citizen ID or tax code).
Not applicable to VCB, ACB and business accounts.
mobilestring~Phone number registered to receive the OTP / for linking.
Format: 10 digits, starting with 0.
Required for most banks (including Vietcombank personal accounts and all ACB account types).
Not required for: VPBank, VietinBank (CTG), VIB, BAOKIM, TPBank, Vietcombank (except personal accounts) and business accounts of BIDV, Shinhan, OCB.
isNotifyAccountNumberboolean✕Link type:
- false (default): create a virtual account.
- true: link the original account number (receive balance notifications for the original account number).
For VIB, the system always sets this to false.
Only applies to supported banks. See Important notes for details.
appTypestring~Integration app type; pass baas.
Required for Vietcombank (VCB) personal accounts.

2. Virtual account & shop information​

FieldTypeRequiredDescription
vaPrefixstring✕Virtual account (VA) prefix.
The VA number (vaPrefix + vaSuffix) must not contain the string QRD.
vaSuffixstring~Virtual account (VA) suffix.
Required for BIDV business accounts (used to build the VA number ${vaPrefix}${vaSuffix}) and OCB business accounts (when isNotifyAccountNumber = false).
For VietinBank (CTG) business accounts: pass vaSuffix to build the VA number.
For personal accounts (e.g. BIDV, OCB, VietinBank), if left empty, the system generates the suffix automatically.
vaAccountNumberstring~Existing virtual account number to link (at least 4 characters).
Required for MSB: the VA number already registered at MSB for the Merchant's account.
merchantNamestring~Name displayed at payment (VA account holder).
Required for BIDV business accounts and OCB business accounts (when isNotifyAccountNumber = false).
For BIDV and VietinBank (CTG) business accounts, the name must start with the registered business name.
For other banks, the value is used as the shop name when the system automatically creates a new shop.
merchantIdnumber~ID of the sub-merchant to create the VA for
(required if you connect with a Master Merchant account).
shopIdnumber✕ID of the shop to assign the VA to.
If you pass this parameter, the system assigns the created VA to that shop. If left empty, the system automatically creates a new shop when creating the VA and assigns the VA to it.
(The shop ID is returned in the response).
merchantAddressstring✕Shop/merchant address (used when a new shop is created automatically).
namestring✕Cash flow name / cash flow identifier for internal management.
taxCodestring✕Tax code of the business / household business.

3. Bank-specific parameters​

BankFieldTypeRequiredDescription
Vietcombank (VCB)redirectUrlstring~URL that takes the customer back to the partner's system after completing verification in the VCB Digibank app.
Required for Vietcombank personal accounts.
Vietcombank (VCB) & TPBankwebhookUrlstring~URL that receives the account registration/cancellation result from the bank.
Required for TPBank (all account types) or Vietcombank (personal, household business).
See the data structure in Account link status webhook.
TPBank (TPB)requestIdstring~Unique request identifier from the partner.
Required for TPBank.
ACBacbUserIdstring~Login user ID on ACB Online / Biz.
Required for ACB business or household business accounts.
Bảo Kim (BAOKIM)walletIdstring~ID of the Bảo Kim e-wallet to create the virtual account number for.
Required when bankBin = BAOKIM.
Notes on linking the original account number (isNotifyAccountNumber = true)
  • Banks that support linking the original account number:
    • ACB, TPBank: Support all account types (personal, household business, business). (Note: for TPBank, only business accounts have a VA; personal and household business accounts do not.)
    • VPBank: Supports business and personal accounts.
    • OCB: Supports business and household business accounts.
    • VietinBank: Supports personal and household business accounts.
    • PGBank, Co-opBank: Only support linking the original account number (no VA; the system handles this automatically).
  • How transaction webhooks work by account type:
    • For accounts linked by original account number (isNotifyAccountNumber = true): only transfers to the original account number trigger a webhook from Tingee.
    • For accounts that do not support original account linking (VA only, isNotifyAccountNumber = false): transfers must go to the virtual account (VA) number. If money is transferred to the original account number, the bank does not send the transaction to Tingee → Tingee does not receive the transaction from the bank → no webhook.
  • For all other banks, the system only supports creating virtual accounts (VA) by default; set isNotifyAccountNumber = false or omit it.
  • See Original account number linking support table for details.

Sample Request Body by bank​

Use this to link personal accounts at standard banks (MB Bank, Sacombank, OCB, Shinhan, BIDV personal...):

{
"bankBin": "970422",
"accountType": "personal-account",
"accountNumber": "0935926988",
"accountName": "NGUYEN THI HUYEN",
"identity": "040191014068",
"mobile": "0123456789",
"isNotifyAccountNumber": false
}

Code samples​

curl --location --request POST 'https://open-api.tingee.vn/v1/create-va' \
--header 'accept: application/json' \
--header 'x-client-id: YOUR_CLIENT_ID' \
--header 'x-request-timestamp: 20240509154004003' \
--header 'x-signature: YOUR_SIGNATURE' \
--header 'Content-Type: application/json' \
--data '{
"bankBin": "970418",
"accountType": "personal-account",
"accountNumber": "0935926988",
"accountName": "NGUYEN THI HUYEN",
"identity": "040191014068",
"mobile": "0123456789",
"isNotifyAccountNumber": false
}'

Sample Response​

The fields in data depend on the bank and the account type. There are 2 main result types:

The bank sends an OTP to the account holder. Use the confirmId to call the Confirm account number API:

{
"code": "00",
"message": "Success",
"data": {
"confirmId": "886b05e9-2d94-4b41-9839-138c941fd1d9"
}
}
FieldTypeDescription
codestringResult code (00 = success).
messagestringResponse message.
data.confirmIdstringConfirmation ID to use with the Confirm account number API.
Only returned when the bank requires OTP verification. For Vietcombank personal accounts, the linking result is sent via webhookUrl instead of calling confirm-va.
data.merchantAccountNumberIdnumberAccount ID on the TINGEE system.
Only returned when the account is created immediately (no OTP needed).
data.bankNamestringBank code (e.g. BIDV, CTG, MSB). Returned when the account is created immediately.
data.shopIdnumberID of the shop the account is assigned to (the shop you passed or the one the system created). Returned when the account is created immediately.
data.statusstringAccount status: active, inactive, lock. Returned when the account is created immediately.
data.vaAccountNumberstringVirtual account (VA) number.
Returned when the account is created immediately; for OCB and Vietcombank personal accounts, it is returned together with confirmId (the expected VA number, only valid after confirmation).
data.authorizeLinkstringTPBank BIZ web login link where the customer verifies the link
(TPBank only; in this case there is no confirmId and the result is sent via webhookUrl).
data.deepLinkstringLink that opens the Vietcombank Digibank app
(Vietcombank personal accounts only).
data.otpMethodstringOTP verification method set by the bank: SMSTTT, SmartOTP, mCode
(Sacombank only).
note

Some special cases return only part of the information: linking the original account number of an OCB business account returns only shopId. Use the List account numbers API to check the account after creation.


Common error codes​

CodeDescriptionHow to handle
1021Bank or account type not supportedCheck bankBin and accountType against Supported banks.
1083Invalid VA creation detailsThis bank/account type does not allow passing vaSuffix. See Body Parameter.
1084Virtual account number contains invalid charactersCheck vaPrefix and vaSuffix.
1013Business account not configuredComplete the Business account configuration before creating a VA for a business account.
1082Invalid display namemerchantName must start with the registered business name (BIDV, VietinBank).
1022, 1048Account / VA number already existsThe account number or VA has already been linked / registered. Use List account numbers to check.
1081Account number already linked to another MerchantEach account number can only be linked to one Merchant.
1031, 1085Shop does not exist or is inactiveCheck that shopId belongs to the Merchant and is active, or leave it empty so the system creates a shop.
1037, 1103The shop's TingeeBox device does not support this bankChoose another shop or a bank that matches the device configuration.
1133Not authorizedLinking VPBank or Vietcombank business / household business accounts must be done with the Merchant's API key, not the Master Merchant API key.
1087, 1088Bảo Kim wallet not configured / syncedCheck walletId and the Bảo Kim wallet sync status.
90, 91, 92, 97Request authentication error (timestamp, client-id, signature)See System error codes.
OthersOther errorsSee Error codes.