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

Hóa đơn bán lẻ / xuất nhập kho — API Nhanh.vn

nhanh.v3.0.bill.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.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.createdAt là Unix giây (UTC) — đổi ra giờ Việt Nam cộng 7 giờ; date là 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.billId trỏ 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 qua related.parentId.

Request

Địa chỉ

POST https://partner.quantri360.com/v1/nhanh/v3.0/bill/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.typebodyintKhông21 = Nhập kho · 2 = Xuất kho.
filters.modesbodyint[]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.fromDatebodystringKhông2026-10-27Ngà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.toDatebodystringKhông2026-10-27Ngày XNK đến (yyyy-mm-dd, tính cả ngày này).
filters.idsbodyint[]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.orderIdsbodyint[]KhôngPhiếu sinh từ các đơn hàng Nhanh này (tối đa 100 id).
filters.depotIdsbodyint[]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.customerIdbodyintKhôngId khách hàng Nhanh.
filters.customerMobilebodystringKhông0901234567SĐT khách hàng.
paginator.sizebodyintKhông100Số phiếu mỗi trang — tối đa 100 (gửi lớn hơn vẫn chỉ trả 100).
paginator.nextbodyobjectKhông{"id": 246489501}Nguyên object paginator.next của trang trước; bỏ ở trang đầu.
dataOptions.giftProductsbodyboolKhôngtruetrue = kèm quà tặng theo từng dòng hàng (products[].giftProducts).
dataOptions.tagsbodyboolKhôngtruetrue = 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ê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.
idint246000003Id phiếu XNK.
datestring2026-10-27Ngày XNK (yyyy-mm-dd).
typeint21 nhập · 2 xuất.
modeint2Kiểu XNK (xem filters.modes).
depotIdint100001Kho / cửa hàng của phiếu.
orderIdint0Đơn hàng Nhanh sinh ra phiếu (0 = bán tại quầy, không qua đơn).
requirementBillIdint0Phiếu nháp / yêu cầu liên quan (vd yêu cầu chuyển kho).
relatedobjectPhiếu liên quan.
typeint0Loại phiếu liên quan (chuyển kho, quà tặng, xuất combo, trả lại bán lẻ…).
parentIdint0Phiếu trả hàng gốc — hóa đơn mua mới trong ca đổi hàng có parentId = hóa đơn trả.
billIdint0Phiếu đối ứng (vd phiếu nhập của lần chuyển kho).
depotIdint104483Kho đối ứng (vd kho xuất của lần chuyển kho).
customerobjectKhách mua (`{"id":0}` khi phiếu không gắn khách).
idint
namestring
mobilestring
addressstring
createdobjectNgười tạo phiếu.
idint
namestringTên tài khoản tạo (thường là tài khoản cửa hàng).
createdAtint1793110151Thời điểm tạo — Unix giây.
saleobjectNhân viên bán.
idint
namestring
saleBonusfloat0Hoa hồng nhân viên.
supplierobjectNhà cung cấp (phiếu nhập NCC).
idint
namestring
productsobject[]Dòng hàng.
imexIdintId dòng XNK.
idint40000001Id sản phẩm Nhanh.
codestringSPMAU006-Màu 1-39Mã sản phẩm (SKU) — có thể THIẾU hẳn khi sản phẩm không có mã.
barcodestring17000001Mã vạch.
namestring
quantityfloat1
pricefloat500000Đơn giá.
discountfloat100000Tiền giảm của cả dòng.
amountfloat400000Thành tiền dòng = price × quantity − discount.
vatobject{percent, amount}.
imeistring[][]IMEI (sản phẩm quản lý IMEI).
giftProductsobject[]Quà tặng kèm (khi dataOptions.giftProducts).
productIdint
productNamestringTúi nilong Cửa hàng mẫu nhỏ
productCodestringTH1
productQuantityint1
paymentobjectThanh toán.
amountfloat400000Tổng tiền phiếu.
customerAmountfloatTiền khách đưa.
discountfloatTổng chiết khấu.
pointsfloat4000Điểm tích lũy được cộng.
usedPointsobject{points, amount} — điểm đã tiêu và tiền quy đổi.
cashobject{accountId, amount} — tiền mặt.
transferobject{accountId, amount} — chuyển khoản.
creditobject{accountId, code, amount} — quẹt thẻ.
installmentobject{accountId, amount} — trả góp.
couponobject{code, value, amount}.
returnFeefloat0Phí trả hàng.
returnAmountfloat0Tổng tiền hàng trả.
descriptionstringGhi chú phiếu.
tagsarray[]Nhãn (khi dataOptions.tags).
customerSourceobject{id, name} — nguồn khách.
paginatorobjectPhân trang.
nextobject{"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

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