Tháng 10/2026 - VietQR Payment Kit thông báo thay đổi API Generate, Quicklink và Custom Theme, Xem chi tiết

API tạo mã QR

Đọc dạng Markdown

Chuyển sang thư viện vietqr

Thư viện vietqr (bản 1.2.0 trở lên) tạo mã QR offline, không gọi API và không cần clientID / apiKey. Hàm generateQR nhận đúng body và trả đúng response JSON như POST /v2/generate:

npm install vietqr
const { generateQR } = require('vietqr');

const res = await generateQR({
    accountNo: '113366668888',
    accountName: 'QUY VAC XIN PHONG CHONG COVID',
    acqId: '970415',
    addInfo: 'Ung Ho Quy Vac Xin',
    amount: '79000'
});
// { code: '00', desc: 'Gen VietQR successful!', data: { acqId, accountName, qrCode, qrDataURL } }

Thư viện chỉ tạo ảnh QR trơn (PNG, JPG hoặc SVG). Ảnh theo mẫu compact2, compact, print lấy qua Quick Link. Xem thêm tại API tạo mã QR.

Đặc tả API cũ (tham khảo)

POSThttps://api.vietqr.io/v2/generate

Tạo mã QR (đã ngừng hỗ trợ)

API này đã ngừng hỗ trợ và ngừng hoạt động từ 01/01/2027. Dùng thư viện vietqr (npm install vietqr) để tạo mã QR offline.

Tham số

TrườngMô tả
x-client-id bắt buộc
header
Client Id để chứng thực. Truy cập [My VietQR](https://my.vietqr.io) để lấy Client Id
x-api-key bắt buộc
header
API key để chứng thực. Truy cập [My VietQR](https://my.vietqr.io) để lấy API Key

Body

TrườngMô tả
accountNo bắt buộc
string
Số tài khoản ngân hàng thụ hưởng. Chỉ nhập số, tối thiểu 6 ký tự, tối đa 19 kí tự
Ví dụ: 113366668888
accountName
string
Tên tài khoản ngân hàng. Nhập tiếng Việt không dấu, viết hoa, tối thiểu 5 ký tự, tối đa 50 kí tự, không chứa các ký tự đặc biệt.
Ví dụ: QUY VAC XIN PHONG CHONG COVID
acqId bắt buộc
integer
Mã định danh ngân hàng (thường gọi là BIN) 6 chữ số, quy đinh bởi ngân hàng nước
Ví dụ: 970415
amount
integer
Số tiền chuyển. Chỉ nhập số, tối đa 13 kí tự
Ví dụ: 79000
addInfo
string
Nội dung chuyển tiền. Nhập tiếng Việt không dấu, tối đa 25 ký tự. Không chứa các ký tự đặc biệt
Ví dụ: Ung Ho Quy Vac Xin
format
string
Định dạng VietQR trả về
Ví dụ: text
template
string
Mẫu VietQR trả về
Ví dụ: compact

Response 200

Trạng thái thành công

Success — Thành công

{
  "code": "00",
  "desc": "Gen VietQR successful!",
  "data": {
    "acpId": 970415,
    "accountName": "QUY VAC XIN PHONG CHONG COVID 19",
    "qrCode": "00020101021238560010A0000007270126000697041501121133666688880208QRIBFTTA53037045405790005802VN62220818Ung Ho Quy Vac Xin63043ACF",
    "qrDataURL": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAHgCAYAAAB91L6VAAAAAk…"
  }
}

Thiếu tham số — Thiếu tham số

{
  "code": "01",
  "desc": "Thiếu tham số"
}

Thiếu tham số Mã tài khoản — Thiếu tham số Mã tài khoản

{
  "code": "11",
  "desc": "Thiếu tham số Mã tài khoản"
}

Thiếu tham số Mã ngân hàng — Thiếu tham số Mã ngân hàng

{
  "code": "12",
  "desc": "Thiếu tham số Mã ngân hàng"
}

Thiếu tham số Tên tài khoản — Thiếu tham số Tên tài khoản

{
  "code": "13",
  "desc": "Thiếu tham số Tên tài khoản"
}

Mã tài khoản không hợp lệ — Mã tài khoản không hợp lệ

{
  "code": "21",
  "desc": "Mã tài khoản không hợp lệ"
}

Mã ngân hàng không hợp lệ — Mã ngân hàng không hợp lệ

{
  "code": "22",
  "desc": "Mã ngân hàng không hợp lệ"
}

Tên tài khoản không hợp lệ — Tên tài khoản không hợp lệ

{
  "code": "23",
  "desc": "Tên tài khoản không hợp lệ"
}

Số tiền không hợp lệ — Số tiền không hợp lệ

{
  "code": "24",
  "desc": "Số tiền không hợp lệ"
}

Nội dung chuyển tiền không hợp lệ — Nội dung chuyển tiền không hợp lệ

{
  "code": "25",
  "desc": "Nội dung chuyển tiền không hợp lệ"
}

Cách gọi API cũ

curl --location --request POST 'https://api.vietqr.io/v2/generate' \
--header 'x-client-id: <CLIENT_ID_HERE>' \
--header 'x-api-key: <API_KEY_HERE>' \
--header 'Content-Type: application/json' \
--data-raw '{
    "accountNo": "113366668888",
    "accountName": "QUY VAC XIN PHONG CHONG COVID",
    "acqId": "970415",
    "addInfo": "Ung Ho Quy Vac Xin",
    "amount": "79000",
    "template": "compact"
}'

Các loại định dạng trả về

Trường template trong request body của API cũ có thể chọn 1 trong các tùy chọn sau. Với thư viện vietqr, các mẫu này dùng qua Quick Link.

Giá trịSizeGhi chú
compact2540x640Bao gồm : Mã QR, các logo , thông tin chuyển khoản
compact540x540QR kèm logo VietQR, Napas, ngân hàng
qr_only480x480Trả về ảnh QR đơn giản, chỉ bao gồm QR
print600x776Bao gồm : Mã QR, các logo và đầy đủ thông tin chuyển khoản
accountNoSố tài khoản
accountNameTên tài khoản
accIdMã bin được lấy từ Api bank theo từng ngân hàng
addInfoNội dung chuyển khoản

Ý nghĩa các trường trong Response

Trường dữ liệuÝ nghĩa
qrCodeMã QR dạng văn bản
qrDataURLẢnh QR dưới định dạng Data URI, có thể dùng Data URI để nhúng hình ảnh vào website hoặc hiện thị lên trình duyệt. Tìm hiểu thêm về Data URI