# API tạo mã QR

Nguồn HTML: https://www.vietqr.io/danh-sach-api/link-tao-ma-nhanh/api-tao-ma-qr
Bản Markdown này: https://www.vietqr.io/danh-sach-api/link-tao-ma-nhanh/api-tao-ma-qr.md

**API đã ngừng hỗ trợ**

Endpoint **`POST https://api.vietqr.io/v2/generate`** đã ngừng hỗ trợ, chỉ chạy đến hết ngày **31/12/2026** và ngừng hoạt động từ **01/01/2027**. Không tích hợp mới với API này. Xem [Thông báo cập nhật](/thong-bao-cap-nhat).

### Chuyển sang thư viện vietqr

Thư viện [`vietqr`](https://www.npmjs.com/package/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`:

```bash
npm install vietqr
```

```javascript
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](/qr-dong). Xem thêm tại [API tạo mã QR](/generate).

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

### POST /generate

`https://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ường | Bắt buộc | Loại | Mô tả | Ví dụ |
| --- | --- | --- | --- | --- |
| x-client-id | Có | header | Client Id để chứng thực. Truy cập [My VietQR](https://my.vietqr.io) để lấy Client Id |  |
| x-api-key | Có | header | API key để chứng thực. Truy cập [My VietQR](https://my.vietqr.io) để lấy API Key |  |

#### Body

| Trường | Bắt buộc | Loại | Mô tả | Ví dụ |
| --- | --- | --- | --- | --- |
| accountNo | 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ự | 113366668888 |
| accountName | Không | 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. | QUY VAC XIN PHONG CHONG COVID |
| acqId | 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 | 970415 |
| amount | Không | integer | Số tiền chuyển. Chỉ nhập số, tối đa 13 kí tự | 79000 |
| addInfo | Không | 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 | Ung Ho Quy Vac Xin |
| format | Không | string | Định dạng VietQR trả về | text |
| template | Không | string | Mẫu VietQR trả về | compact |

#### Response 200

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

Success — Thành công

```json
{
  "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ố

```json
{
  "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

```json
{
  "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

```json
{
  "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

```json
{
  "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ệ

```json
{
  "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ệ

```json
{
  "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ệ

```json
{
  "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ệ

```json
{
  "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ệ

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

### Cách gọi API cũ

```bash
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](/qr-dong).

| Giá trị  | Size    | Ghi chú                                            |
| -------- | ------- | -------------------------------------------------- |
| compact2 | 540x640 | Bao gồm : Mã QR, các logo , thông tin chuyển khoản |
| compact  | 540x540 | QR kèm logo VietQR, Napas, ngân hàng               |
| qr\_only | 480x480 | Trả về ảnh QR đơn giản, chỉ bao gồm QR             |
| print | 600x776 | Bao gồm : Mã QR, các logo và đầy đủ thông tin chuyển khoản |

| accountNo   | Số tài khoản                                    |
| ----------- | ----------------------------------------------- |
| accountName | Tên tài khoản                                   |
| accId       | Mã bin được lấy từ Api bank theo từng ngân hàng |
|  addInfo    | Nội dung chuyển khoản                           |

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

| Trường dữ liệu | Ý nghĩa                                                                                                                                                                            |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| qrCode         | Mã 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](https://css-tricks.com/data-uris/) |
