VI | EN
Nhắn Messenger
Dành cho developer

Danh sách sản phẩm (kèm tồn theo kho) — API Nhanh.vn

nhanh.v3.0.product.list · gọi qua Quantri360 bằng một API key cho chính tài khoản / tài sản bạn đã kết nối và ủy quyền — 360 lo việc ký request và làm mới phiên đăng nhập bạn đã cấp.

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à depots rỗng — tồn nằm ở các sản phẩm con.
  • Giá vốn prices.avgCost có 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.
  • warranty có 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ênVị tríKiểuMẫuMô tả
AuthorizationheaderheaderBearer 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_idquerystring100001Gian 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ênVị tríKiểuBắt buộcMẫuMô tả
filters.idsbodyint[]Không[40388315]Id sản phẩm, tối đa 100.
filters.namebodystringKhôngSQKBC03MTìm theo tên, mã hoặc mã vạch.
filters.parentIdbodyintKhông40388279Chỉ lấy các sản phẩm con (biến thể) của sản phẩm cha này.
filters.gpidbodyintKhông1Lọ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.categoryIdsbodyint[]Không[538650]Id danh mục (lọc danh mục cha tự gồm danh mục con).
filters.brandIdsbodyint[]KhôngId thương hiệu.
filters.statusbodyint[]Không[1]Trạng thái sản phẩm (vd [1] = đang bán).
filters.pricebodyobjectKhông{"from": 100000, "to": 500000}Khoảng giá bán.
filters.updatedAtFrombodyintKhông1793000000Unix giây — sản phẩm cập nhật từ (KHÔNG tính thay đổi tồn kho).
filters.updatedAtTobodyintKhông1793200000Unix giây.
paginator.sizebodyintKhông100Số sản phẩm mỗi trang — tối đa 100.
paginator.nextbodyobjectKhông{"id": 40772482}Nguyên object paginator.next của trang trước; bỏ ở trang đầu.
paginator.sortbodyobjectKhô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ênKiểuMẫuMô tả
codeint11 = thành công; 0 = lỗi (xem messages).
messagesstring[][]Thông điệp lỗi của Nhanh.
dataobject[]Dữ liệu.
idint40772431Id sản phẩm Nhanh.
parentIdint40772423Id sản phẩm cha; `-2` = chính nó là sản phẩm cha, `-1` = sản phẩm độc lập.
codestringWQDBF2012-Màu 2-XLMã sản phẩm (SKU).
barcodestring19371224Mã vạch.
namestring
statusint1
categoryIdint588000Danh mục (xem /v3.0/product/category).
brandIdint66907Thương hiệu.
typeint1Loại sản phẩm.
priceVatModeint21 = giá bán đã gồm VAT · 2 = chưa gồm VAT.
pricesobjectGiá (VND).
retailfloat889000Giá bán lẻ.
importfloat0Giá nhập.
wholesalefloat0Giá sỉ.
oldfloat0Giá cũ (gạch ngang).
avgCostfloat0Giá vốn bình quân.
retailVatfloat
importVatfloat
imagesobject{avatar, others[]} — avatar thiếu khóa khi không có ảnh.
shippingobject{weight (gram), length, width, height (cm)}.
unitsobject{name, list[]} — đơn vị tính.
combosobject[]Thành phần combo: {id, code, name, quantity}.
inventoryobjectTồn kho tổng tất cả kho.
remainfloat4Tồn thực tế.
availablefloat4Có thể bán.
holdingfloat0Tạm giữ (đơn chưa xuất).
shippingfloat0Đang giao.
transferingfloat1Đang chuyển kho.
damagedfloat0Hàng lỗi.
warrantyobject{remain, holding} — hàng bảo hành.
depotsobject[]Tồn theo từng kho (chỉ kho có phát sinh).
idint104483Id kho (/v3.0/business/depot).
remainfloat1
availablefloat1
holdingfloat0
shippingfloat0
transferingfloat0
damagedfloat0
attributesobject[]Thuộc tính biến thể.
idint
namestringKích thước
valuestringXL
codestringXL
createdAtint1792750320Unix giây.
updatedAtint1793083462Unix giây.
tagIdsint[][]Nhãn.
paginatorobjectPhân trang.
nextobject{"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

  1. Đăng ký tài khoản Partner
  2. Mở loại dữ liệu thuộc nhóm Sản phẩm ở trang nền tảng
  3. Tạo API key (tick kênh Nhanh.vn)
  4. Gọi theo ví dụ ở trên