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

Customer overview report — API Pancake POS

get /shops/{SHOP_ID}/customer_analytics/report · 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.

get /shops/{SHOP_ID}/customer_analytics/report

GET/shops/{SHOP_ID}/customer_analytics/reportGọi qua 360: GET https://partner.quantri360.com/v1/pancake_pos/shops/{SHOP_ID}/customer_analytics/report
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

Báo cáo tổng quan khách hàng trong một lần gọi (như màn Thống kê → Khách hàng): số khách mới / cũ và chi tiêu, giới tính, nhóm tuổi, cấp độ, phân bố theo số đơn thành công, chu kỳ mua lại, kèm danh sách khách phân trang. Dùng cho báo cáo tỉ lệ khách quay lại và giá trị khách theo kỳ.

  • Tiền trong các khối tổng quan là CHUỖI số (vd "2588500"), riêng customer_age.revenue_* và customer_orders.data[].order_success_amount là số.
  • startDate / endDate là Unix giây tuyệt đối — kỳ “tháng 10 giờ VN” = 1790787600 → 1793465999.
  • Gọi đầy đủ (không có section) tính lại toàn bộ khối tổng quan — khi lật trang danh sách khách nên thêm section=customer_orders.
  • Danh sách khách chứa tên, SĐT — chỉ lưu ở nơi có kiểm soát quyền.

Request

Địa chỉ

GET https://partner.quantri360.com/v1/pancake_pos/shops/{SHOP_ID}/customer_analytics/report

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_idquerystring1234567SHOP_ID đã nối — có thể bỏ khi đường dẫn có /shops/{SHOP_ID}.

Tham số request

TênVị tríKiểuBắt buộcMẫuMô tả
SHOP_IDpathintCó1234567Mã cửa hàng đã nối với 360.
startDatequerytimestampKhông1790787600Đầu kỳ (Unix giây). Khách tạo từ mốc này là khách MỚI; không truyền thì old_customer = null.
endDatequerytimestampKhông1793206799Cuối kỳ (Unix giây).
pagequeryintKhông1Trang danh sách khách (mặc định 1).
pageSizequeryintKhông30Khách / trang (mặc định 10).
sectionquerystringKhôngcustomer_ordersTruyền customer_orders để CHỈ lấy danh sách khách (không tính lại các khối tổng quan) — dùng khi lật trang.
data_sortquerystring (JSON)Không{"asc_desc":"desc","sort_by":"order_success"}Sắp xếp danh sách: sort_by = order_count · order_success · order_return…; asc_desc = asc | desc.
searchquerystringKhông0901234567Tìm khách theo tên / SĐT.
sale_formquerystringKhôngallall · retail (khách lẻ) · wholesale (khách buôn).
warehouse_id[]querystring[]KhôngLọc đơn theo kho.
order_sources[]querystring (JSON)Không{"order_sources":"-1"}Lọc nguồn đơn — mỗi phần tử là chuỗi JSON.
order_tag[]querystring[]Không1Lọc theo thẻ đơn (no_tag = đơn không thẻ).
gender[]querystring[]Khôngfemalemale · female · none.
typeCustomer[]querystring[]Khôngonlineonline · offline.

Phân trang

Danh sách khách ở data.customer_orders: tăng page (kèm section=customer_orders cho nhẹ) tới total_pages.

Ví dụ request

curl -s "https://partner.quantri360.com/v1/pancake_pos/shops/1234567/customer_analytics/report?startDate=1790787600&endDate=1793206799&page=1&pageSize=30" \
  -H "Authorization: Bearer $KEY"
Python
import requests

KEY = "q360_live_..."  # khóa API của brand
r = requests.get(
    "https://partner.quantri360.com/v1/pancake_pos/shops/1234567/customer_analytics/report",
    params={
        "startDate": 1790787600,
        "endDate": 1793206799,
        "page": 1,
        "pageSize": 30
    },
    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/pancake_pos/shops/1234567/customer_analytics/report');
for (const [k, v] of Object.entries({"startDate":1790787600,"endDate":1793206799,"page":1,"pageSize":30})) url.searchParams.set(k, typeof v === 'object' ? JSON.stringify(v) : String(v));
const r = await fetch(url, {
  method: 'GET',
  headers: { Authorization: `Bearer ${KEY}` },
});
console.log(r.status, await r.json());
PHP
<?php
$key = 'q360_live_...'; // khóa API của brand
$url = 'https://partner.quantri360.com/v1/pancake_pos/shops/1234567/customer_analytics/report' . '?' . http_build_query(['startDate' => 1790787600, 'endDate' => 1793206799, 'page' => 1, 'pageSize' => 30]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $key]);
$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 Pancake POS)

TênKiểuMẫuMô tả
successbooltrue
dataobject
customerobject{"new_customer":11,"old_customer":4}Số khách mới / cũ trong kỳ.
customer_purchasedobject{"new_customer":"2588500","old_customer":"2527300"}Chi tiêu khách mới / cũ — CHUỖI số (VND).
customer_genderobject{"unknown":5,"female":10,"male":0}
customer_ageobjectSố khách + doanh thu theo nhóm tuổi: under_18, from_18_to_24 … over_55, havent_birthday, revenue_*, revenue_total.
customer_levelobject[]Theo cấp độ: id (null = chưa có cấp), count, total_amount (chuỗi).
customer_order_countobject[]Phân bố theo số đơn thành công: order_success_quantity, customer_count, amount (chuỗi).
new_customerobjectold_customer, analytic_new_customer{ count, count_1, count_2, count_tags }.
customer_analyticobject[]Chu kỳ mua lại: range (0 = mua 1 lần; 1 / 31 / 61 = chu kỳ TB 1–30 / 31–60 / 61–90 ngày…), total, from_1_to_30, from_31_to_60, from_61_to_90, under_90.
customer_ordersobjectDanh sách khách: data[]{ id, name, phone_number, currency, customer{ id, name, fb_id, global_id, psid }, order_count, order_success_count, order_success_amount, order_return_count }, page_number, page_size, total_entries, total_pages.

Mẫu phản hồi

{
  "success": true,
  "data": {
    "customer": {
      "new_customer": 11,
      "old_customer": 4
    },
    "customer_purchased": {
      "new_customer": "2588500",
      "old_customer": "2527300"
    },
    "customer_gender": {
      "unknown": 5,
      "female": 10,
      "male": 0
    },
    "customer_level": [
      {
        "count": 15,
        "id": null,
        "total_amount": "5115800"
      }
    ],
    "customer_order_count": [
      {
        "amount": "0",
        "customer_count": 7,
        "order_success_quantity": 0
      },
      {
        "amount": "2728500",
        "customer_count": 8,
        "order_success_quantity": 1
      }
    ],
    "new_customer": {
      "old_customer": 4,
      "analytic_new_customer": {
        "count": 11,
        "count_1": 11,
        "count_2": 0,
        "count_tags": 0
      }
    },
    "customer_analytic": [
      {
        "range": 0,
        "total": 4344,
        "from_1_to_30": 3,
        "from_31_to_60": 2,
        "from_61_to_90": 3,
        "under_90": 4336
      }
    ],
    "customer_orders": {
      "page_number": 1,
      "page_size": 1,
      "total_entries": 15,
      "total_pages": 15,
      "data": [
        {
          "id": "…",
          "name": "Khách hàng A",
          "phone_number": "0901234567",
          "currency": "VND",
          "order_count": 1,
          "order_success_count": 1,
          "order_success_amount": 295000,
          "order_return_count": 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 Khách hàng ở trang nền tảng
  3. Tạo API key (tick kênh Pancake POS)
  4. Gọi theo ví dụ ở trên