Cổng dữ liệu HV Holdings

Danh mục API cho app nội bộ. Trang này chỉ có mô tả — không có số liệu. Bản cho máy / AI đọc: https://api.hvholdings.vn/v1/apis

Cách gọi

GET /v1/data/<id>?<params> with header "Authorization: Bearer <access_token>" (token from the shared login id.hvholdings.vn). Every registered app may call every API; each user only sees data their own HV Admin account is allowed to see.

Khi gặp lỗi

MãNghĩa — app nên làm gì
401code=refresh → refresh the token (POST /v1/token { app, refresh_token }) then retry once · code=relogin → send the user to the login page
403API disabled / app paused / account has no permission at the source
429too many calls — wait retry_after seconds
502source is down — retry later

Lỗi luôn có dạng { "error": "…", "code": "…" }. Mọi app đã đăng ký đều gọi được mọi API. Columns not listed for an API may appear when the source adds new fields — ignore unknown columns.

Tài khoản profilephiên bản 1nguồn HV Admin

Thông tin tài khoản HV Admin của chính người đang đăng nhập: mã, tên đăng nhập, họ tên, email, số điện thoại, ảnh, tình trạng. Luôn trả 1 dòng — không xem được tài khoản người khác.

GET https://api.hvholdings.vn/v1/data/profile
Authorization: Bearer <access_token>

Tham số

Không có.

Cột trả về (trong rows)

CộtKiểuNghĩa
idstringMã tài khoản trong HV Admin (UUID)
userNamestringTên đăng nhập
firstNamestringTên
lastNamestringHọ (và tên đệm)
emailstringEmail
isActivebooleanTài khoản còn hoạt động
emailConfirmedbooleanEmail đã xác nhận
phoneNumberstringSố điện thoại
imageUrlstringĐịa chỉ ảnh đại diện
twoFactorEnabledbooleanĐã bật xác thực 2 lớp

Mẫu trả về

{
  "api": "profile",
  "version": 1,
  "page": 1,
  "has_more": false,
  "count": 1,
  "rows": [
    {
      "id": "string",
      "userName": "string",
      "firstName": "string",
      "lastName": "string",
      "email": "string",
      "isActive": "boolean",
      "emailConfirmed": "boolean",
      "phoneNumber": "string",
      "imageUrl": "string",
      "twoFactorEnabled": "boolean"
    }
  ]
}

Thị trường marketsphiên bản 1nguồn HV Admin

Các thị trường (nước bán) mà tài khoản đang đăng nhập được kinh doanh. HV Admin tự lọc theo tài khoản — mỗi người thấy danh sách của mình. Dùng làm ô chọn thị trường và làm mã thị trường khi gọi các API khác.

GET https://api.hvholdings.vn/v1/data/markets
Authorization: Bearer <access_token>

Tham số

TênBắt buộcNghĩa
pagekhôngTrang muốn lấy, bắt đầu từ 1 (mặc định 1)
page_sizekhôngSố dòng mỗi trang (mặc định 50), tối đa 200

Cột trả về (trong rows)

CộtKiểuNghĩa
valuestringMã thị trường trong HV Admin (UUID) — dùng mã này khi lọc theo thị trường
labelstringTên thị trường, VD "Việt Nam", "Mỹ"
hintstringMã viết tắt, VD "VN", "USA", "AU"
parentValuestringMã thị trường cha (trống nếu không có)

Mẫu trả về

{
  "api": "markets",
  "version": 1,
  "page": 1,
  "has_more": false,
  "count": 1,
  "rows": [
    {
      "value": "string",
      "label": "string",
      "hint": "string",
      "parentValue": "string"
    }
  ]
}

Doanh số marketing marketing-performancephiên bản 1nguồn HV Admin

Doanh số, chi phí marketing, giá vốn, lợi nhuận và tình trạng đơn theo từng nhân sự marketing × thị trường trong 1 khoảng ngày. HV Admin tự lọc theo tài khoản — mỗi người thấy phần mình được xem. Số tiền theo đơn vị ở tham số currency.

GET https://api.hvholdings.vn/v1/data/marketing-performance
Authorization: Bearer <access_token>

Tham số

TênBắt buộcNghĩa
fromcóTừ ngày, dạng YYYY-MM-DD
tocóĐến ngày, dạng YYYY-MM-DD (tối đa 92 ngày mỗi lượt)
date_typekhôngLọc theo loại ngày: Created = ngày tạo đơn (mặc định, hiện chỉ có loại này)
currencykhôngĐơn vị tiền: Vnd (mặc định, hiện chỉ có loại này)
pagekhôngTrang muốn lấy, bắt đầu từ 1 (mặc định 1)
page_sizekhôngSố dòng mỗi trang (mặc định 50), tối đa 200

Cột trả về (trong rows)

CộtKiểuNghĩa
marketerEmployeeIdstringMã nhân sự marketing
marketerNamestringTên nhân sự marketing
marketIdstringMã thị trường (khớp cột value của API markets)
marketNamestringTên thị trường
orgUnitCodestringMã đơn vị / phòng ban trong sơ đồ tổ chức
structurePathstringĐường dẫn trong sơ đồ tổ chức (đơn vị cha → con)
orderCountnumberSố đơn (chưa xác nhận: tổng đơn tạo trong kỳ)
confirmedOrdersnumberSố đơn đã chốt
actualRevenuenumberDoanh thu thực nhận (chưa xác nhận định nghĩa; thị trường Mỹ từng trả 0)
gmvAfterDiscountnumberGMV sau giảm giá
revenuenumberDoanh thu
totalMarketingCostnumberTổng chi phí marketing
partnerFeenumberPhí đối tác (vận chuyển / sàn)
partnerFeeRatioOnGmvAfterDiscountnumberPhí đối tác / GMV sau giảm giá (tỉ lệ)
partnerFeeRatioOnRevenuenumberPhí đối tác / doanh thu (tỉ lệ)
productCogsnumberGiá vốn sản phẩm bán
productCogsRatioOnGmvAfterDiscountnumberGiá vốn sản phẩm / GMV sau giảm giá (tỉ lệ)
productCogsRatioOnRevenuenumberGiá vốn sản phẩm / doanh thu (tỉ lệ)
productCogsRatioOnCogsnumberGiá vốn sản phẩm / tổng giá vốn (tỉ lệ)
giftCogsnumberGiá vốn quà tặng
giftCogsRatioOnGmvAfterDiscountnumberGiá vốn quà tặng / GMV sau giảm giá (tỉ lệ)
giftCogsRatioOnRevenuenumberGiá vốn quà tặng / doanh thu (tỉ lệ)
giftCogsRatioOnCogsnumberGiá vốn quà tặng / tổng giá vốn (tỉ lệ)
cogsnumberTổng giá vốn (sản phẩm + quà tặng)
cogsRatioOnGmvAfterDiscountnumberTổng giá vốn / GMV sau giảm giá (tỉ lệ)
cogsRatioOnRevenuenumberTổng giá vốn / doanh thu (tỉ lệ)
expectedProfitnumberLợi nhuận dự kiến
expectedProfitRatioOnGmvAfterDiscountnumberLợi nhuận dự kiến / GMV sau giảm giá (tỉ lệ)
expectedProfitRatioOnRevenuenumberLợi nhuận dự kiến / doanh thu (tỉ lệ)
netProfitnumberLợi nhuận ròng
netProfitRatioOnGmvAfterDiscountnumberLợi nhuận ròng / GMV sau giảm giá (tỉ lệ)
netProfitRatioOnRevenuenumberLợi nhuận ròng / doanh thu (tỉ lệ)
performancenumberHiệu suất (chưa xác nhận công thức)
marketingCostRatioOnGmvAfterDiscountnumberChi phí marketing / GMV sau giảm giá (tỉ lệ)
marketingCostRatioOnRevenuenumberChi phí marketing / doanh thu (tỉ lệ)
roasOnGmvAfterDiscountnumberROAS tính trên GMV sau giảm giá
roasOnRevenuenumberROAS tính trên doanh thu
roasOffPlatformnumberROAS ngoài nền tảng (chưa xác nhận định nghĩa)
confirmedAovnumberGiá trị trung bình 1 đơn đã chốt
confirmedAovOnRevenuenumberGiá trị trung bình 1 đơn đã chốt, tính trên doanh thu
totalOrdersnumberTổng số đơn (mọi trạng thái)
processingnumberSố đơn đang xử lý
confirmednumberSố đơn đã xác nhận
cancellednumberSố đơn đã huỷ
waitingShipmentnumberSố đơn chờ gửi hàng
shippingnumberSố đơn đang giao
deliverednumberSố đơn đã giao
returnednumberSố đơn hoàn
cancelledAfterFinalizednumberSố đơn huỷ sau khi đã chốt
productCountnumberSố sản phẩm

Mẫu trả về

{
  "api": "marketing-performance",
  "version": 1,
  "page": 1,
  "has_more": false,
  "count": 1,
  "rows": [
    {
      "marketerEmployeeId": "string",
      "marketerName": "string",
      "marketId": "string",
      "marketName": "string",
      "orgUnitCode": "string",
      "structurePath": "string",
      "orderCount": "number",
      "confirmedOrders": "number",
      "actualRevenue": "number",
      "gmvAfterDiscount": "number",
      "revenue": "number",
      "totalMarketingCost": "number",
      "partnerFee": "number",
      "partnerFeeRatioOnGmvAfterDiscount": "number",
      "partnerFeeRatioOnRevenue": "number",
      "productCogs": "number",
      "productCogsRatioOnGmvAfterDiscount": "number",
      "productCogsRatioOnRevenue": "number",
      "productCogsRatioOnCogs": "number",
      "giftCogs": "number",
      "giftCogsRatioOnGmvAfterDiscount": "number",
      "giftCogsRatioOnRevenue": "number",
      "giftCogsRatioOnCogs": "number",
      "cogs": "number",
      "cogsRatioOnGmvAfterDiscount": "number",
      "cogsRatioOnRevenue": "number",
      "expectedProfit": "number",
      "expectedProfitRatioOnGmvAfterDiscount": "number",
      "expectedProfitRatioOnRevenue": "number",
      "netProfit": "number",
      "netProfitRatioOnGmvAfterDiscount": "number",
      "netProfitRatioOnRevenue": "number",
      "performance": "number",
      "marketingCostRatioOnGmvAfterDiscount": "number",
      "marketingCostRatioOnRevenue": "number",
      "roasOnGmvAfterDiscount": "number",
      "roasOnRevenue": "number",
      "roasOffPlatform": "number",
      "confirmedAov": "number",
      "confirmedAovOnRevenue": "number",
      "totalOrders": "number",
      "processing": "number",
      "confirmed": "number",
      "cancelled": "number",
      "waitingShipment": "number",
      "shipping": "number",
      "delivered": "number",
      "returned": "number",
      "cancelledAfterFinalized": "number",
      "productCount": "number"
    }
  ]
}