Skip to main content
Version: 1.2.1 (Latest)

Tạo tài khoản ảo (VA)

API này dùng để tạo mới tài khoản ảo (Virtual Account - VA) cho Merchant, cho phép nhận thông báo biến động số dư và quản lý dòng tiền tách biệt.

PUBLIC SANDBOX — LIÊN KẾT NGÂN HÀNG

Trải nghiệm toàn bộ quy trình liên kết tài khoản và xác thực OTP với dữ liệu giả lập.

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

API khởi tạo yêu cầu tạo hoặc liên kết tài khoản ảo với ngân hàng. Kết quả trả về confirmId cần được dùng cho bước xác nhận tiếp theo.

Header Request​

HeaderBắt buộcMô tả
Content-Type✓application/json
x-client-id✓Mã định danh của đối tác do TINGEE cung cấp.
x-signature✓Chữ ký xác thực HMAC SHA512. Xem thêm tại Cách sinh chữ ký.
x-request-timestamp✓Thời gian gửi request (format: yyyyMMddHHmmssSSS, múi giờ UTC+7)
Lưu ý quan trọng đối với Ngân hàng VIB (Áp dụng cả 3 loại tài khoản)

Đối với ngân hàng VIB (bankBin: "970441"), khách hàng bắt buộc phải đăng ký nhận loa trên VIB iBusiness trước khi gọi API tạo VA. Xem chi tiết các bước tại Điều kiện liên kết tài khoản VIB hoặc Tab VIB ở phần Mẫu Request Body.

Body Parameter​

1. Thông tin Ngân hàng & Tài khoản chung​

TrườngKiểuBắt buộcMô tả
bankBinstring✓Mã BIN ngân hàng (6 chữ số). Xem tại Danh sách ngân hàng hỗ trợ. Ví dụ: 970418 (BIDV), 970436 (VCB), 970422 (MBB), 970415 (VietinBank)...
accountTypestring~Loại tài khoản (BankAccountTypeEnum):
- personal-account: Tài khoản cá nhân.
- business-account: Tài khoản doanh nghiệp.
- business-household-account: Tài khoản hộ kinh doanh.
Bắt buộc với tất cả ngân hàng, trừ BAOKIM.
accountNumberstring~Số tài khoản ngân hàng gốc cần liên kết.
Không bắt buộc đối với: TPBank, VCB, MSB và BAOKIM.
accountNamestring~Tên chủ tài khoản ngân hàng (viết hoa không dấu).
Không bắt buộc đối với TPBank, PGBank, BAOKIM và tài khoản Doanh nghiệp của BIDV, OCB, VIB, SHINHAN, VietinBank (CTG).
identitystring~Giấy tờ tùy thân của khách hàng (CMND/CCCD hoặc Mã số thuế).
Không áp dụng với VCB, ACB và tài khoản Doanh nghiệp.
mobilestring~Số điện thoại đăng ký nhận OTP / liên kết.
Bắt buộc đối với Vietcombank (VCB) tài khoản Cá nhân. Không bắt buộc với: VPBank, VCB, CTG, VIB, BAOKIM, TPBank và tài khoản Doanh nghiệp của BIDV, Shinhan, OCB.
isNotifyAccountNumberboolean✕Loại liên kết:
- false (mặc định): Tạo tài khoản ảo (Virtual Account).
- true: Liên kết số tài khoản gốc (nhận biến động số dư STK gốc).
Chỉ áp dụng với các ngân hàng hỗ trợ. Xem chi tiết tại Lưu ý quan trọng.
transactionTypestring✕Loại giao dịch đăng ký (TransactionTypeEnum):
- credit: Giao dịch ghi có (nhận tiền - mặc định).
- debit: Giao dịch ghi nợ (chỉ hỗ trợ duy nhất ngân hàng ACB).
appTypestring✕Loại ứng dụng tích hợp. Mặc định là baas.

2. Thông tin Virtual Account & Shop​

TrườngKiểuBắt buộcMô tả
vaPrefixstring✕Tiền tố tài khoản ảo (VA).
vaSuffixstring~Hậu tố tài khoản ảo (VA).
Bắt buộc đối với tài khoản Doanh nghiệp của BIDV và VietinBank (CTG) (dùng để ghép số VA ${vaPrefix}${vaSuffix}); hoặc Doanh nghiệp OCB (khi isNotifyAccountNumber = false).
merchantNamestring~Tên hiển thị khi thanh toán (chủ tài khoản VA).
Chỉ áp dụng đối với ngân hàng BIDV và VietinBank (CTG). Tên bắt buộc phải bắt đầu bằng tên Doanh nghiệp đã đăng ký.
merchantIdnumber~ID của Merchant con cần tạo VA
(Bắt buộc nếu kết nối bằng tài khoản Master Merchant).
shopIdnumber✕ID cửa hàng muốn gán VA vào.
Nếu truyền tham số này, hệ thống sẽ gán VA được tạo vào cửa hàng tương ứng. Nếu để trống, hệ thống sẽ tự động tạo một cửa hàng mới khi tạo VA và gán VA vào cửa hàng mới đó.
(ID cửa hàng sẽ được trả về trong response).
merchantAddressstring✕Địa chỉ của cửa hàng/merchant (dùng khi tự động tạo cửa hàng mới).
namestring✕Tên dòng tiền / tên định danh dòng tiền phục vụ quản lý nội bộ.
taxCodestring✕Mã số thuế của doanh nghiệp / hộ kinh doanh.

3. Tham số chuyên biệt theo từng Ngân hàng​

Ngân hàngTrườngKiểuBắt buộcMô tả
Vietcombank (VCB) & TPBankwebhookUrlstring~URL nhận thông báo kết quả đăng ký/hủy tài khoản từ ngân hàng.
Bắt buộc đối với TPBank (mọi loại tài khoản) hoặc Vietcombank (Cá nhân, Hộ kinh doanh).
Xem chi tiết cấu trúc dữ liệu tại Webhook thông báo trạng thái liên kết tài khoản.
TPBank (TPB)requestIdstring~Mã định danh yêu cầu duy nhất từ phía đối tác.
Bắt buộc đối với TPBank.
ACBacbUserIdstring~User ID đăng nhập trên hệ thống ACB Online / Biz.
Bắt buộc đối với tài khoản ACB Doanh nghiệp hoặc Hộ kinh doanh.
Bảo Kim (BAOKIM)walletIdstring~ID Ví điện tử Bảo Kim muốn tạo STK ảo.
Bắt buộc khi sử dụng bankBin = BAOKIM.
Lưu ý khi liên kết Số tài khoản gốc (isNotifyAccountNumber = true)
  • Các ngân hàng hỗ trợ liên kết STK gốc:
    • ACB, TPBank: Hỗ trợ mọi loại tài khoản (Cá nhân, HKD, Doanh nghiệp). (Lưu ý: TPBank chỉ Doanh nghiệp mới có VA, Cá nhân và HKD không có VA).
    • VPBank: Hỗ trợ tài khoản Doanh nghiệp và Cá nhân.
    • OCB: Hỗ trợ tài khoản Doanh nghiệp và Hộ kinh doanh.
    • VietinBank: Hỗ trợ tài khoản Cá nhân và Hộ kinh doanh.
    • PGBank, Co-opBank: Chỉ hỗ trợ liên kết STK gốc (không có VA, hệ thống tự động xử lý).
  • Cơ chế nhận Webhook giao dịch theo loại tài khoản:
    • Với tài khoản liên kết STK gốc (isNotifyAccountNumber = true): Chuyển tiền vào STK gốc mới phát sinh Webhook từ Tingee.
    • Với tài khoản không hỗ trợ liên kết gốc (chỉ hỗ trợ VA, isNotifyAccountNumber = false): Bắt buộc chuyển tiền vào số tài khoản ảo (VA). Nếu chuyển vào STK gốc, phía ngân hàng sẽ không gửi giao dịch về Tingee → Tingee không nhận được GD từ bank → Không có Webhook.
  • Đối với các ngân hàng còn lại, hệ thống mặc định chỉ hỗ trợ tạo tài khoản ảo (VA), vui lòng để isNotifyAccountNumber = false hoặc không truyền.
  • Xem chi tiết tại Bảng hỗ trợ liên kết STK gốc.

Mẫu Request Body theo từng Ngân hàng​

Dùng cho liên kết tài khoản cá nhân của các ngân hàng tiêu chuẩn (MB Bank, Sacombank, OCB, Shinhan, BIDV cá nhân...):

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

Ví dụ mã nguồn​

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

Response mẫu​

{
"code": "00",
"message": "Success",
"data": {
"confirmId": "VA_CONFIRM_123456",
"shopId": 109876,
"authorizeLink": "https://ebank.tpb.vn/biz/authorize?token=...",
"deepLink": "tingeevcbmerchant://vcb-link-account?token=...",
"otpMethod": "SMSTTT"
}
}
TrườngKiểuMô tả
codestringMã kết quả (00 = Thành công).
messagestringThông điệp phản hồi.
data.confirmIdstringMã xác nhận cần dùng cho API confirm-va.
data.shopIdnumberID cửa hàng
(trả về khi hệ thống tạo mới hoặc gán vào cửa hàng hiện tại).
data.authorizeLinkstringLink đăng nhập web TPBank BIZ
(chỉ áp dụng trong trường hợp liên kết tài khoản ngân hàng TPBank).
data.deepLinkstringLink mở ứng dụng Vietcombank Digibank
(chỉ áp dụng đối với Vietcombank).
data.otpMethodstringPhương thức xác thực OTP do ngân hàng quy định: SMSTTT, SmartOTP, mCode
(chỉ áp dụng với Sacombank).

Mã lỗi thường gặp​

CodeMô tảHướng xử lý
90Sai format timestampKiểm tra format yyyyMMddHHmmssSSS.
91Request quá hạnKiểm tra thời gian gửi request.
97Sai chữ kýKiểm tra lại Secret Key và logic tạo Signature.
OthersLỗi khácXem Danh sách mã lỗi.