nhanh.v3.0.bill.list
POST/v3.0/bill/listGọi qua 360: POST https://partner.quantri360.com/v1/nhanh/v3.0/bill/list
Sắp mở. API này đã chạy thật qua 360 và đang được chốt giá — bạn có thể đọc tài liệu và chuẩn bị tích hợp trước.
Mô tả API
Danh sách phiếu xuất nhập kho (XNK) của Nhanh: hóa đơn bán lẻ tại cửa hàng, bán buôn, giao hàng, nhập nhà cung cấp, chuyển kho, kiểm kho… kèm khách, nhân viên bán, dòng hàng, quà tặng và cách thanh toán (tiền mặt / chuyển khoản / quẹt thẻ / điểm). Dùng để lấy doanh thu bán lẻ offline theo cửa hàng (type = 2, modes = [2]) hoặc theo dõi luân chuyển hàng giữa các kho.
- Khoảng ngày quá 31 ngày → code 0, errorCode
ERR_INVALID_FORM_FIELDS, messages là OBJECT{"fromDate": "Vui lòng lựa chọn khoảng ngày trong khoảng 31 ngày"}— cắt khoảng dài thành nhiều đợt ≤ 31 ngày. created.createdAtlà Unix giây (UTC) — đổi ra giờ Việt Nam cộng 7 giờ;datelà ngày XNK dạng chuỗi theo giờ Việt Nam.- Phiếu chuyển kho sinh cặp: phiếu xuất (type 2, mode 3) ở kho gửi và phiếu nhập (type 1, mode 3) ở kho nhận —
related.depotId/related.billIdtrỏ sang phiếu đối ứng. - Bán lẻ cửa hàng: lọc
type = 2,modes = [2]; hàng khách trả lại là phiếu nhập — đối chiếu quarelated.parentId.
Request
Địa chỉ
POST https://partner.quantri360.com/v1/nhanh/v3.0/bill/list
Xác thực & gian hàng
| Tên | Vị trí | Kiểu | Mẫu | Mô tả |
|---|---|---|---|---|
| Authorization | header | header | Bearer q360_live_ab12cd34_… | Khóa API của brand (tạo ở mục API key). Bắt buộc với mọi request. Brand suy từ key — không truyền mã brand. |
| platform_shop_id | query | string | 100001 | Gian hàng (lấy ở GET /v1/platforms → shops[].platform_shop_id). BẮT BUỘC khi brand có > 1 gian hàng trên nền tảng; 360 bỏ tham số này trước khi chuyển tiếp. |
Tham số request
| Tên | Vị trí | Kiểu | Bắt buộc | Mẫu | Mô tả |
|---|---|---|---|---|---|
| filters.type | body | int | Không | 2 | 1 = Nhập kho · 2 = Xuất kho. |
| filters.modes | body | int[] | Không | [2] | Kiểu XNK: 1 Giao hàng · 2 Bán lẻ · 3 Chuyển kho · 5 Nhà cung cấp · 6 Bán buôn · 8 Bù trừ kiểm kho · 10 Khác · 13 Bảo hành · 15 Sửa chữa · 16 Linh kiện bảo hành · 19 Combo. |
| filters.fromDate | body | string | Không | 2026-10-27 | Ngày XNK từ (yyyy-mm-dd). Khoảng fromDate → toDate tối đa 31 ngày; bỏ trống = 31 ngày gần nhất. |
| filters.toDate | body | string | Không | 2026-10-27 | Ngày XNK đến (yyyy-mm-dd, tính cả ngày này). |
| filters.ids | body | int[] | Không | [246000003] | Lấy đích danh theo id phiếu, tối đa 100 — khi lọc theo ids / customerId / customerMobile thì bỏ được khoảng ngày. |
| filters.orderIds | body | int[] | Không | Phiếu sinh từ các đơn hàng Nhanh này (tối đa 100 id). | |
| filters.depotIds | body | int[] | Không | [104490] | Chỉ lấy phiếu của các kho / cửa hàng này (id từ /v3.0/business/depot). |
| filters.customerId | body | int | Không | Id khách hàng Nhanh. | |
| filters.customerMobile | body | string | Không | 0901234567 | SĐT khách hàng. |
| paginator.size | body | int | Không | 100 | Số phiếu mỗi trang — tối đa 100 (gửi lớn hơn vẫn chỉ trả 100). |
| paginator.next | body | object | Không | {"id": 246489501} | Nguyên object paginator.next của trang trước; bỏ ở trang đầu. |
| dataOptions.giftProducts | body | bool | Không | true | true = kèm quà tặng theo từng dòng hàng (products[].giftProducts). |
| dataOptions.tags | body | bool | Không | true | true = kèm nhãn của phiếu (tags). |
Phân trang
Lặp khi phản hồi có paginator.next, gửi lại nguyên object đó trong paginator.next; hết trang thì phản hồi không còn paginator.next. Mặc định sắp theo ngày XNK rồi id phiếu, mới nhất trước.
Ví dụ request
curl -s -X POST "https://partner.quantri360.com/v1/nhanh/v3.0/bill/list" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"filters":{"type":2,"modes":[2],"fromDate":"2026-10-27","toDate":"2026-10-27"},"paginator":{"size":100},"dataOptions":{"giftProducts":true,"tags":true}}'
Python
import requests
KEY = "q360_live_..." # khóa API của brand
r = requests.post(
"https://partner.quantri360.com/v1/nhanh/v3.0/bill/list",
params={},
json={
"filters": {
"type": 2,
"modes": [
2
],
"fromDate": "2026-10-27",
"toDate": "2026-10-27"
},
"paginator": {
"size": 100
},
"dataOptions": {
"giftProducts": True,
"tags": True
}
},
headers={"Authorization": f"Bearer {KEY}"},
timeout=60,
)
print(r.status_code)
print(r.json())Node.js
const KEY = 'q360_live_...'; // khóa API của brand
const url = new URL('https://partner.quantri360.com/v1/nhanh/v3.0/bill/list');
for (const [k, v] of Object.entries({})) url.searchParams.set(k, typeof v === 'object' ? JSON.stringify(v) : String(v));
const r = await fetch(url, {
method: 'POST',
headers: { Authorization: `Bearer ${KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({"filters":{"type":2,"modes":[2],"fromDate":"2026-10-27","toDate":"2026-10-27"},"paginator":{"size":100},"dataOptions":{"giftProducts":true,"tags":true}}),
});
console.log(r.status, await r.json());PHP
<?php
$key = 'q360_live_...'; // khóa API của brand
$url = 'https://partner.quantri360.com/v1/nhanh/v3.0/bill/list' . '?' . http_build_query([]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $key, 'Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"filters":{"type":2,"modes":[2],"fromDate":"2026-10-27","toDate":"2026-10-27"},"paginator":{"size":100},"dataOptions":{"giftProducts":true,"tags":true}}');
$res = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status, "\n", $res;Response
Tham số phản hồi (nguyên của Nhanh.vn)
| Tên | Kiểu | Mẫu | Mô tả |
|---|---|---|---|
| code | int | 1 | 1 = thành công; 0 = lỗi (xem messages). |
| messages | string[] | [] | Thông điệp lỗi của Nhanh. |
| data | object[] | Dữ liệu. | |
| id | int | 246000003 | Id phiếu XNK. |
| date | string | 2026-10-27 | Ngày XNK (yyyy-mm-dd). |
| type | int | 2 | 1 nhập · 2 xuất. |
| mode | int | 2 | Kiểu XNK (xem filters.modes). |
| depotId | int | 100001 | Kho / cửa hàng của phiếu. |
| orderId | int | 0 | Đơn hàng Nhanh sinh ra phiếu (0 = bán tại quầy, không qua đơn). |
| requirementBillId | int | 0 | Phiếu nháp / yêu cầu liên quan (vd yêu cầu chuyển kho). |
| related | object | Phiếu liên quan. | |
| type | int | 0 | Loại phiếu liên quan (chuyển kho, quà tặng, xuất combo, trả lại bán lẻ…). |
| parentId | int | 0 | Phiếu trả hàng gốc — hóa đơn mua mới trong ca đổi hàng có parentId = hóa đơn trả. |
| billId | int | 0 | Phiếu đối ứng (vd phiếu nhập của lần chuyển kho). |
| depotId | int | 104483 | Kho đối ứng (vd kho xuất của lần chuyển kho). |
| customer | object | Khách mua (`{"id":0}` khi phiếu không gắn khách). | |
| id | int | ||
| name | string | ||
| mobile | string | ||
| address | string | ||
| created | object | Người tạo phiếu. | |
| id | int | ||
| name | string | Tên tài khoản tạo (thường là tài khoản cửa hàng). | |
| createdAt | int | 1793110151 | Thời điểm tạo — Unix giây. |
| sale | object | Nhân viên bán. | |
| id | int | ||
| name | string | ||
| saleBonus | float | 0 | Hoa hồng nhân viên. |
| supplier | object | Nhà cung cấp (phiếu nhập NCC). | |
| id | int | ||
| name | string | ||
| products | object[] | Dòng hàng. | |
| imexId | int | Id dòng XNK. | |
| id | int | 40000001 | Id sản phẩm Nhanh. |
| code | string | SPMAU006-Màu 1-39 | Mã sản phẩm (SKU) — có thể THIẾU hẳn khi sản phẩm không có mã. |
| barcode | string | 17000001 | Mã vạch. |
| name | string | ||
| quantity | float | 1 | |
| price | float | 500000 | Đơn giá. |
| discount | float | 100000 | Tiền giảm của cả dòng. |
| amount | float | 400000 | Thành tiền dòng = price × quantity − discount. |
| vat | object | {percent, amount}. | |
| imei | string[] | [] | IMEI (sản phẩm quản lý IMEI). |
| giftProducts | object[] | Quà tặng kèm (khi dataOptions.giftProducts). | |
| productId | int | ||
| productName | string | Túi nilong Cửa hàng mẫu nhỏ | |
| productCode | string | TH1 | |
| productQuantity | int | 1 | |
| payment | object | Thanh toán. | |
| amount | float | 400000 | Tổng tiền phiếu. |
| customerAmount | float | Tiền khách đưa. | |
| discount | float | Tổng chiết khấu. | |
| points | float | 4000 | Điểm tích lũy được cộng. |
| usedPoints | object | {points, amount} — điểm đã tiêu và tiền quy đổi. | |
| cash | object | {accountId, amount} — tiền mặt. | |
| transfer | object | {accountId, amount} — chuyển khoản. | |
| credit | object | {accountId, code, amount} — quẹt thẻ. | |
| installment | object | {accountId, amount} — trả góp. | |
| coupon | object | {code, value, amount}. | |
| returnFee | float | 0 | Phí trả hàng. |
| returnAmount | float | 0 | Tổng tiền hàng trả. |
| description | string | Ghi chú phiếu. | |
| tags | array | [] | Nhãn (khi dataOptions.tags). |
| customerSource | object | {id, name} — nguồn khách. | |
| paginator | object | Phân trang. | |
| next | object | {"id": 246489501} | Gửi lại nguyên ở request kế; không có = hết. |
Mẫu phản hồi
{
"code": 1,
"paginator": {
"next": {
"id": 246489501
}
},
"data": [
{
"id": 246000003,
"orderId": 0,
"requirementBillId": 0,
"inventoryCheckId": 0,
"warrantyBillId": 0,
"depotId": 100001,
"date": "2026-10-27",
"type": 2,
"mode": 2,
"related": {
"type": 0,
"parentId": 0,
"billId": 0,
"businessId": 0,
"depotId": 0,
"requirementBillId": 0,
"userId": 0
},
"customer": {
"id": 158000001,
"name": "nguoimua123",
"mobile": "0901234567",
"address": "Số 1 đường ABC, Long Biên, Hà Nội"
},
"created": {
"id": 2800001,
"name": "Nhân viên mẫu",
"createdAt": 1793110151
},
"sale": {
"id": 3200001,
"name": "Nhân viên A",
"saleBonus": 0
},
"technicalStaff": {
"id": 0
},
"supplier": {
"id": 0
},
"products": [
{
"imexId": 631000001,
"id": 40000001,
"code": "SPMAU006-Màu 1-39",
"barcode": "17000001",
"name": "Áo sơ mi nam dài tay ( Perfect fit)/SPMAU006/Màu 1 - Kẻ tăm xanh/39/MAU01",
"quantity": 1,
"price": 500000,
"priceVatMode": 2,
"discount": 100000,
"vat": {
"percent": 0,
"amount": 0
},
"extendedWarrantyAmount": 0,
"amount": 400000,
"imei": [],
"giftProducts": [
{
"productId": 37000001,
"productName": "Túi đóng gói lớn",
"productCode": "TH4",
"productQuantity": 1
}
]
}
],
"payment": {
"amount": 400000,
"customerAmount": 400000,
"discount": 100000,
"points": 4000,
"usedPoints": {
"points": 0,
"amount": 0
},
"transfer": {
"accountId": 0,
"amount": 0
},
"cash": {
"accountId": 790001,
"amount": 400000
},
"installment": {
"accountId": 0,
"amount": 0
},
"credit": {
"accountId": 0,
"amount": 0
},
"coupon": {
"value": 0,
"amount": 0
},
"returnFee": 0,
"returnAmount": 0
},
"description": "BEST PRICE END OF SS khách mới",
"tags": [],
"gifts": [],
"customerSource": {
"id": 0
}
}
]
}
Bắt đầu dùng
- Đăng ký tài khoản Partner
- Mở loại dữ liệu thuộc nhóm Hóa đơn bán lẻ ở trang nền tảng
- Tạo API key (tick kênh Nhanh.vn)
- Gọi theo ví dụ ở trên