Generate VietQR codes with SePay

Generate dynamic VietQR codes for SePay bank-transfer payments: QR image URL with account number, amount, memo parameters; embed in your website.

||

What is a VietQR code?

  • A QR Code image contains all the information about the bank, beneficiary account number, transfer amount, and transfer description.

  • When customers use their banking app to scan the code, the app will automatically fill in all the transfer details, which is very convenient.

  • By integrating QR Code, customers won't need to manually enter transfer information. This improves customer experience and speeds up payment transfers.

  • SePay provides a tool to help you generate dynamic QR Code images at qr.sepay.vn


LINK
https://vietqr.app/img?acc=ACCOUNT_NUMBER&bank=BANK_NAME&amount=AMOUNT&des=DESCRIPTION&template=TEMPLATE&download=DOWNLOAD&showinfo=SHOWINFO&fullacc=FULLACC&holder=ACCOUNT_HOLDER&store=STORE

Parameter Explanation

accstringrequired
Bank account number (or VA number, depending on the bank's rule — see section below)
bankstringrequired
Bank — use the short_name, alias, code, or bin value from the list at banks.json (e.g. Vietcombank; LPBank is an alias of LienVietPostBank).
amountinteger
Transfer amount in VND. Leave empty so the customer enters it when scanning.
desstring
Transfer memo. Some banks require a fixed string in des — see the Rules section below.
templatestring
QR image layout. Empty = standard QR image with the VietQR logo; compact = compact layout with the NAPAS/VietQR logo, bank logo, and SePay logo; qronly = QR image only, without the frame and logo; standee = standee layout printed at the point-of-sale counter.
downloadboolean
Set download=true to make the browser download the QR image instead of rendering it inline.
showinfoboolean
Set to true to show account information alongside the QR image. Not applicable to template=standee, which already shows account information by default.
fullaccboolean
Set to true to show the full account number on the image. Only takes effect when showinfo=true.
holderstring
Account holder name shown on the image (no diacritics).
storestring
Store or business name shown on the image.

You can view the list of supported banks at banks.json


Choose a Layout with the template Parameter

The template parameter controls the QR image layout when you embed it into a website or print it at a point of sale. The qr.sepay.vn page also previews these layouts so you can copy the quick link directly.

ValueLayout
(empty)Standard QR image with the VietQR logo.
compactCompact layout with the NAPAS/VietQR logo, bank logo, and SePay logo, suited for embedding in a checkout page.
qronlyQR image only, without the frame and logo.
standeeLayout for standees, printed at the point-of-sale counter.

The showinfo, fullacc, holder, and store parameters let you display additional account holder and store details directly on the QR image. fullacc only takes effect when showinfo=true; the standee layout already shows this information, so it does not need showinfo. The download parameter forces the browser to download the image instead of opening it inline.

Example of a compact QR link showing the account holder name:

https://vietqr.app/img?acc=1234567890&bank=Vietcombank&amount=100000&des=thanh%20toan%20DH001&template=compact&showinfo=true&holder=TIEM%20SACH%20HOAI%20NIEM

VietQR rules for SePay-supported banks

Rules differ across banks: virtual account (VA) requirement, mandatory strings in the transfer memo, and how to fill acc / des based on VA type.

Virtual account (VA) requirements

Some banks require a virtual account (VA) for automatic transaction matching. The remaining banks accept either a VA or the original account number.

BankPersonalBusiness householdEnterprise
OCBRequiredRequiredRequired
KienLongBankRequiredRequiredRequired
MSBRequiredRequiredRequired
BIDVRequiredRequiredOptional
Other banksOptionalOptionalOptional

Transfer memo

SEVQR — required for VietinBank

For VietinBank personal and business-household accounts, the transfer memo (des) must contain SEVQR. Without this string, the transaction notification won't be pushed to SePay.

TKP + VA code — required for memo-based VAs

When using a memo-based VA, the transfer memo must contain TKP + the VA code. Example: VA 001 → memo must include TKP001.

Payment code — auto-extract from memo

Add a payment code to the memo so SePay automatically extracts it and links the transaction to your order. Configure the payment-code prefix at Payment code configuration.

QR parameter rules

The acc and des parameters change based on the VA type:

VA typeaccdes
Official VAVA numberAny content
Memo-based VASource account numberTKP + VA code + content
No VAAccount numberAny content

Usage Examples

Sample data

All account numbers and VA numbers in the examples below are sample data; they don't exist. Replace them with your real account or VA when implementing.

Example 1: OCB personal — official VA required

OCB requires a VA for every account type.

https://vietqr.app/img?acc=VQRQ12345678&bank=OCB&amount=100000&des=DH001%20thanh%20toan
ParameterValueMeaning
accVQRQ12345678OCB VA number (sample)
bankOCBOCB
amount100000100,000 VND
desDH001 thanh toanOrder code + memo

Example 2: VietinBank personal — SEVQR required in memo

VietinBank personal and business-household accounts require the memo to contain SEVQR.

https://vietqr.app/img?acc=0123456789&bank=VietinBank&amount=100000&des=SEVQR%20DH001
ParameterValueMeaning
acc0123456789VietinBank account number (sample)
bankVietinBankVietinBank
amount100000100,000 VND
desSEVQR DH001Required SEVQR string + order code

Example 3: TPBank personal — memo-based VA (TKP + VA code)

When using a memo-based VA, acc is the source account number; des joins TKP + VA code + content.

https://vietqr.app/img?acc=0987654321&bank=TPBank&amount=200000&des=TKP001%20DH001
ParameterValueMeaning
acc0987654321TPBank account number (sample)
bankTPBankTPBank
amount200000200,000 VND
desTKP001 DH001TKP + VA code 001 + order code

Example 4: Vietcombank personal — no VA required, full info

Vietcombank doesn't require a VA. Pass full amount and des so the customer pays immediately on scanning.

https://vietqr.app/img?acc=9988776655&bank=Vietcombank&amount=100000&des=thanh%20toan%20don%20hang
ParameterValueMeaning
acc9988776655Vietcombank account number (sample)
bankVietcombankVietcombank
amount100000100,000 VND
desthanh toan don hangFree-form memo

Example 5: Vietcombank — only account number and bank

Omit amount and des so the customer fills them in when scanning.

https://vietqr.app/img?acc=9988776655&bank=Vietcombank
ParameterValueMeaning
acc9988776655Vietcombank account number (sample)
bankVietcombankVietcombank

Embedding QR Code into Your Website

Embed the dynamic QR image with an <img> tag using the QR link from the Embed Link Structure section. Any parameter from the table above works when embedding, for example add template=compact for a compact layout on a checkout page:

HTML
1
<img src='https://vietqr.app/img?acc=9988776655&bank=Vietcombank&amount=100000&des=thanh%20toan%20don%20hang&template=compact' alt='SePay payment QR code' />