nhanh.v3.0.product.list
POST/v3.0/product/listGọi qua 360: POST https://partner.quantri360.com/v1/nhanh/v3.0/product/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 sản phẩm trên Nhanh kèm giá (bán lẻ, nhập, sỉ, giá vốn), thuộc tính (màu, size…), quan hệ cha – con và TỒN KHO theo từng kho (inventory.depots). Dùng để đồng bộ danh mục sản phẩm và tồn kho đa kênh; sau lần quét đầu chỉ lấy sản phẩm thay đổi bằng updatedAtFrom / updatedAtTo.
updatedAt/ bộ lọc updatedAtFrom chỉ phản ánh thay đổi THÔNG TIN sản phẩm (tên, giá…), không phản ánh thay đổi tồn kho — muốn tồn mới nhất phải quét lại hoặc dùng webhook tồn kho.- Sản phẩm cha (
parentId = -2) có tồn 0 vàdepotsrỗng — tồn nằm ở các sản phẩm con. - Giá vốn
prices.avgCostcó thể bằng 0 khi doanh nghiệp không theo dõi giá vốn trên Nhanh — đừng coi là giá vốn thật bằng 0. warrantycó thể là mảng rỗng[]khi không khai bảo hành.
Request
Địa chỉ
POST https://partner.quantri360.com/v1/nhanh/v3.0/product/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.ids | body | int[] | Không | [40388315] | Id sản phẩm, tối đa 100. |
| filters.name | body | string | Không | SQKBC03M | Tìm theo tên, mã hoặc mã vạch. |
| filters.parentId | body | int | Không | 40388279 | Chỉ lấy các sản phẩm con (biến thể) của sản phẩm cha này. |
| filters.gpid | body | int | Không | 1 | Lọc cha – con: -1 sản phẩm độc lập · -2 sản phẩm cha · 1 sản phẩm con · 2 cha + độc lập · 3 con + độc lập. |
| filters.categoryIds | body | int[] | Không | [538650] | Id danh mục (lọc danh mục cha tự gồm danh mục con). |
| filters.brandIds | body | int[] | Không | Id thương hiệu. | |
| filters.status | body | int[] | Không | [1] | Trạng thái sản phẩm (vd [1] = đang bán). |
| filters.price | body | object | Không | {"from": 100000, "to": 500000} | Khoảng giá bán. |
| filters.updatedAtFrom | body | int | Không | 1793000000 | Unix giây — sản phẩm cập nhật từ (KHÔNG tính thay đổi tồn kho). |
| filters.updatedAtTo | body | int | Không | 1793200000 | Unix giây. |
| paginator.size | body | int | Không | 100 | Số sản phẩm mỗi trang — tối đa 100. |
| paginator.next | body | object | Không | {"id": 40772482} | Nguyên object paginator.next của trang trước; bỏ ở trang đầu. |
| paginator.sort | body | object | Không | {"id": "desc"} | Sắp theo id: desc (mặc định) hoặc asc. Đặt TRONG paginator — đặt sort ở cấp gốc body bị lỗi "Invalid filters parmam". |
Phân trang
Lặp khi phản hồi có paginator.next (dạng {"id": …} = id phần tử cuối trang), gửi lại nguyên object; trang sau bắt đầu NGAY SAU id đó, không trùng.
Ví dụ request
curl -s -X POST "https://partner.quantri360.com/v1/nhanh/v3.0/product/list" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"filters":{"gpid":1,"status":[1]},"paginator":{"size":100,"sort":{"id":"desc"}}}'
Python
import requests
KEY = "q360_live_..." # khóa API của brand
r = requests.post(
"https://partner.quantri360.com/v1/nhanh/v3.0/product/list",
params={},
json={
"filters": {
"gpid": 1,
"status": [
1
]
},
"paginator": {
"size": 100,
"sort": {
"id": "desc"
}
}
},
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/product/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":{"gpid":1,"status":[1]},"paginator":{"size":100,"sort":{"id":"desc"}}}),
});
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/product/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":{"gpid":1,"status":[1]},"paginator":{"size":100,"sort":{"id":"desc"}}}');
$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 | 40772431 | Id sản phẩm Nhanh. |
| parentId | int | 40772423 | Id sản phẩm cha; `-2` = chính nó là sản phẩm cha, `-1` = sản phẩm độc lập. |
| code | string | WQDBF2012-Màu 2-XL | Mã sản phẩm (SKU). |
| barcode | string | 19371224 | Mã vạch. |
| name | string | ||
| status | int | 1 | |
| categoryId | int | 588000 | Danh mục (xem /v3.0/product/category). |
| brandId | int | 66907 | Thương hiệu. |
| type | int | 1 | Loại sản phẩm. |
| priceVatMode | int | 2 | 1 = giá bán đã gồm VAT · 2 = chưa gồm VAT. |
| prices | object | Giá (VND). | |
| retail | float | 889000 | Giá bán lẻ. |
| import | float | 0 | Giá nhập. |
| wholesale | float | 0 | Giá sỉ. |
| old | float | 0 | Giá cũ (gạch ngang). |
| avgCost | float | 0 | Giá vốn bình quân. |
| retailVat | float | ||
| importVat | float | ||
| images | object | {avatar, others[]} — avatar thiếu khóa khi không có ảnh. | |
| shipping | object | {weight (gram), length, width, height (cm)}. | |
| units | object | {name, list[]} — đơn vị tính. | |
| combos | object[] | Thành phần combo: {id, code, name, quantity}. | |
| inventory | object | Tồn kho tổng tất cả kho. | |
| remain | float | 4 | Tồn thực tế. |
| available | float | 4 | Có thể bán. |
| holding | float | 0 | Tạm giữ (đơn chưa xuất). |
| shipping | float | 0 | Đang giao. |
| transfering | float | 1 | Đang chuyển kho. |
| damaged | float | 0 | Hàng lỗi. |
| warranty | object | {remain, holding} — hàng bảo hành. | |
| depots | object[] | Tồn theo từng kho (chỉ kho có phát sinh). | |
| id | int | 104483 | Id kho (/v3.0/business/depot). |
| remain | float | 1 | |
| available | float | 1 | |
| holding | float | 0 | |
| shipping | float | 0 | |
| transfering | float | 0 | |
| damaged | float | 0 | |
| attributes | object[] | Thuộc tính biến thể. | |
| id | int | ||
| name | string | Kích thước | |
| value | string | XL | |
| code | string | XL | |
| createdAt | int | 1792750320 | Unix giây. |
| updatedAt | int | 1793083462 | Unix giây. |
| tagIds | int[] | [] | Nhãn. |
| paginator | object | Phân trang. | |
| next | object | {"id": 40772035} | Gửi lại nguyên ở request kế; không có = hết. |
Mẫu phản hồi
{
"code": 1,
"paginator": {
"next": {
"id": 40772035
}
},
"data": [
{
"id": 40772431,
"parentId": 40772423,
"code": "WQDBF2012-Màu 2-XL",
"barcode": "19371224",
"name": "Quần da dáng suông/WQDBF2012/Màu 2 - Đen/XL/HERA14",
"status": 1,
"priceVatMode": 2,
"importPriceVatMode": 0,
"categoryId": 588000,
"prices": {
"retail": 889000,
"retailVat": 0,
"import": 0,
"importVat": 0,
"old": 0,
"wholesale": 0,
"avgCost": 0
},
"images": {
"others": []
},
"warranty": [],
"brandId": 66907,
"type": 1,
"shipping": {
"width": 0,
"height": 0,
"length": 0,
"weight": 0
},
"units": {
"name": "Chiếc",
"list": []
},
"combos": [],
"inventory": {
"remain": 4,
"shipping": 0,
"damaged": 0,
"holding": 0,
"transfering": 1,
"available": 4,
"warranty": {
"remain": 0,
"holding": 0
},
"depots": [
{
"id": 104483,
"remain": 1,
"shipping": 0,
"damaged": 0,
"holding": 0,
"transfering": 0,
"available": 1,
"warranty": {
"remain": 0,
"holding": 0
}
},
{
"id": 104489,
"remain": 0,
"shipping": 0,
"damaged": 0,
"holding": 0,
"transfering": 1,
"available": 0,
"warranty": {
"remain": 0,
"holding": 0
}
}
]
},
"attributes": [
{
"id": 1701118,
"name": "Kích thước",
"value": "XL",
"code": "XL",
"order": 0,
"orderValue": 0
},
{
"id": 1702238,
"name": "Màu sắc",
"value": "Đen",
"code": "Đen",
"order": 0,
"orderValue": 0
}
],
"updatedAt": 1793083462,
"createdAt": 1792750320,
"tagIds": []
}
]
}
Bắt đầu dùng
- Đăng ký tài khoản Partner
- Mở loại dữ liệu thuộc nhóm Sản phẩm ở trang nền tảng
- Tạo API key (tick kênh Nhanh.vn)
- Gọi theo ví dụ ở trên