Giới thiệu

Chào mừng bạn đến với Performance Hub API. API này quản lý dữ liệu câu lạc bộ và các hệ thống chính tích hợp với câu lạc bộ của bạn cùng các hệ thống bên ngoài của câu lạc bộ, và không phải là API dành cho sử dụng công khai. Để biết thêm thông tin về cách sử dụng các hệ thống Performance Hub mà API này hỗ trợ, vui lòng tham khảo mục riêng cho hệ thống bạn cần trong [tài liệu Performance Hub](https://docs.performancehub.co).

URL cơ sở

https://portal.hub.gymsystems.co

Xác thực

Thông tin xác thực sẽ được cung cấp khi tích hợp của bạn được phê duyệt.

Sự kiện "agent turn complete" do thiết bị báo cáo (kích hoạt thông báo đẩy web)

Được sidecar của thiết bị AI Agent đã ghép nối gọi (không bao giờ do trình duyệt gọi) khi một lượt chạy agent khởi tạo từ giao diện web kết thúc và kéo dài hơn ngưỡng thông báo của thiết bị. Được xác thực bằng JWT HS256 ngắn hạn riêng cho từng thiết bị (aud 'events'). Được loại trùng theo thiết bị+phiên+thời điểm bắt đầu và giới hạn tần suất theo thiết bị, sau đó được gửi đến các đăng ký thông báo đẩy HTML5 của người dùng khởi tạo, kèm liên kết sâu đến cuộc hội thoại.

Nội dung yêu cầu

Điểm cuối

POST /ai/events/agent-turn-complete

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/ai/events/agent-turn-complete \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Thông báo đẩy do agent khởi tạo (kỹ năng ph-notify)

Được sidecar của thiết bị AI Agent đã ghép nối gọi thay mặt cho agent trên thiết bị (kỹ năng ph-notify) để đẩy một thông báo bất kỳ đến trình duyệt và thiết bị di động của người dùng. Được xác thực bằng JWT HS256 ngắn hạn riêng cho từng thiết bị (aud 'events'). Người dùng đích phải có quyền truy cập thiết bị (theo chính sách truy cập của từng agent); nếu không chỉ định, thông báo sẽ được gửi đến chủ sở hữu thiết bị. Giới hạn tần suất theo thiết bị, tách biệt với các sự kiện hoàn tất lượt.

Nội dung yêu cầu

Điểm cuối

POST /ai/events/agent-notify

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/ai/events/agent-notify \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Tải lên hình ảnh thông báo (kỹ năng ph-notify)

Nhận nội dung hình ảnh thô từ một thiết bị đã ghép nối (JWT aud 'events') và lưu vào bucket công khai notify-media dưới một khóa UUID không thể đoán. Các đối tượng tự động bị xóa sau 7 ngày (vòng đời S3). Trả về URL https công khai để dùng làm `imageUrl` trong /ai/events/agent-notify. Giới hạn 5 MB; chỉ hỗ trợ png/jpeg/gif/webp.

Nội dung yêu cầu

Điểm cuối

POST /ai/media/notify-image

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/ai/media/notify-image \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Chuyển tiếp MCP của thiết bị cho Connected Apps (công cụ SaaS bên ngoài)

Endpoint MCP Streamable-HTTP cho các thiết bị AI Agent đã ghép nối (máy chủ MCP "connected_apps" trên cổng lắng nghe :8790 của sidecar thiết bị). Được xác thực bằng JWT HS256 ngắn hạn theo từng thiết bị (aud 'mcp', cùng thông tin xác thực với /mcp) và được kiểm soát bởi cờ bật Connected Apps của AGENT (kết nối theo từng thiết bị agent, không theo từng cơ sở). Các yêu cầu được truyền thẳng đến máy chủ MCP phiên của nền tảng công cụ thượng nguồn của chính agent, với các header phiên được chèn ở phía máy chủ; thông tin xác thực thượng nguồn không bao giờ đến được thiết bị. Tên công cụ và thương hiệu nhà cung cấp được white-label theo cả hai chiều trong quá trình truyền. Lỗi 401/410 từ thượng nguồn (phiên hết hạn) sẽ kích hoạt tạo lại phiên một lần + thử lại.

Điểm cuối

POST /mcp/apps

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/mcp/apps \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm kiếm nhật ký kiểm toán API (quyền truy cập mô-đun IAM & Admin)

Tìm kiếm và lọc nhật ký truy cập API với khả năng lọc nâng cao. Người dùng chỉ có thể xem nhật ký của những tổ chức mà họ có quyền truy cập.

Tham số

organisationId `string` (tùy chọn) ID tổ chức để xác minh ACL (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/admin/audit-logs/search

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/admin/audit-logs/search \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Lấy thống kê nhật ký kiểm toán được lưu trong bộ nhớ đệm Redis (quyền truy cập mô-đun IAM & Admin)

Truy xuất thống kê tổng hợp từ bộ nhớ đệm Redis để tải bảng điều khiển tức thì

Tham số

timeWindow `string` (tùy chọn) Khoảng thời gian thống kê (mặc định là 12h)

Điểm cuối

GET /api/admin/audit-logs/statistics-cached

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/admin/audit-logs/statistics-cached \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy thống kê nhật ký kiểm toán (quyền truy cập mô-đun IAM & Admin)

Truy xuất thống kê tổng hợp cho bảng điều khiển. Giới hạn trong các tổ chức của người dùng.

Tham số

startTime `number` (tùy chọn) Thời gian bắt đầu (dấu thời gian Unix), mặc định là 24 giờ trước endTime `number` (tùy chọn) Thời gian kết thúc (dấu thời gian Unix), mặc định là hiện tại

Điểm cuối

GET /api/admin/audit-logs/statistics

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/admin/audit-logs/statistics \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy dữ liệu chuỗi thời gian cho nhật ký kiểm toán (quyền truy cập mô-đun IAM & Admin)

Truy xuất dữ liệu chuỗi thời gian được nhóm theo khoảng để trực quan hóa dòng thời gian yêu cầu

Tham số

timeWindow `string` (tùy chọn) Khoảng thời gian cho dữ liệu chuỗi thời gian: - 1h: 1 giờ qua (khối 10 phút) - 12h: 12 giờ qua (khối 10 phút) - 24h: 24 giờ qua (khối 10 phút) - 7d: 7 ngày qua (khối 1 giờ) - 14d: 14 ngày qua (khối 1 giờ)

Điểm cuối

GET /api/admin/audit-logs/timeseries

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/admin/audit-logs/timeseries \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy các tổ chức mà người dùng có quyền truy cập nhật ký kiểm toán (quyền truy cập mô-đun IAM & Admin)

Trả về danh sách các tổ chức mà người dùng hiện tại có thể xem nhật ký kiểm toán

Điểm cuối

GET /api/admin/audit-logs/user-organisations

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/admin/audit-logs/user-organisations \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lệnh gọi ban đầu để tạo một câu lạc bộ mới. Lưu ý rằng chỉ đối tượng câu lạc bộ 'template' được tạo; sau đó cần một yêu cầu API thứ hai để cập nhật dữ liệu của câu lạc bộ như giờ mở cửa, vị trí, URL mạng xã hội, v.v.

Tham số

body `string` (bắt buộc) Đối tượng JSON của câu lạc bộ mới cần thêm vào hệ thống.

Điểm cuối

POST /api/admin/clubs/addclub

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/admin/clubs/addclub \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm một người dùng mới vào hệ thống

Tham số

body `string` (bắt buộc) Đối tượng JSON chứa dữ liệu người dùng mà bạn muốn thêm/cập nhật.

Điểm cuối

POST /api/users

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/users \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê tất cả người dùng (tài khoản Google Apps) có quyền truy cập hệ thống/API back office

Điểm cuối

GET /api/admin/users/listusers

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/admin/users/listusers \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các khóa MCP của một người dùng (đã ẩn bớt). Người dùng có thể liệt kê khóa của chính mình.

Tham số

userId `string` (bắt buộc)

Điểm cuối

GET /api/users/{userId}/mcp-keys

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/users/{userId}/mcp-keys \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo khóa MCP API mới cho một người dùng. Người dùng có thể tự tạo khóa của mình.

Tham số

userId `string` (bắt buộc) body `object` (tùy chọn)

Điểm cuối

POST /api/users/{userId}/mcp-keys

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/users/{userId}/mcp-keys \
  -H "x-api-key: YOUR_API_KEY"

Thu hồi/xóa một khóa MCP API. Người dùng có thể xóa khóa của chính mình.

Tham số

userId `string` (bắt buộc) keyId `string` (bắt buộc)

Điểm cuối

DELETE /api/users/{userId}/mcp-keys/{keyId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/users/{userId}/mcp-keys/{keyId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa một vai trò khỏi người dùng

Tham số

userId `string` (tùy chọn) Email của người dùng mà bạn muốn xóa vai trò. roleId `string` (tùy chọn) ID của vai trò mà bạn muốn xóa khỏi người dùng.

Điểm cuối

DELETE /api/users/{userId}/roles/{roleId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/users/{userId}/roles/{roleId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật thông tin hồ sơ của một người dùng hiện có (firstName, lastName, phoneNumber)

Tham số

userId `string` (bắt buộc) Địa chỉ email của người dùng body `object` (bắt buộc) Dữ liệu hồ sơ người dùng cần cập nhật

Điểm cuối

PATCH /api/users/{userId}

Yêu cầu mẫu

curl -X PATCH https://portal.hub.gymsystems.co/api/users/{userId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm mới hoặc cập nhật vai trò người dùng

Tham số

body `object` (tùy chọn)

Điểm cuối

PUT /api/users/{userId}/roles

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/users/{userId}/roles \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Các Live Service đang chạy trên AI Agent của cơ sở (bộ chọn xuất bản)

Lấy các Live Service do bridge của thiết bị phát hiện qua đường hầm cho bộ chọn "Publish to Performance Hub" của applet. Yêu cầu mô-đun ph-ai-agent VÀ quyền truy cập 'open' theo từng thiết bị (cùng mức yêu cầu như khi xuất bản). Mỗi dịch vụ được gắn publishedAppId khi đã có một Custom App cho cổng của dịch vụ đó.

Tham số

club `string` (bắt buộc) device `string` (bắt buộc)

Điểm cuối

GET /api/agent-apps/services/{club}/{device}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/services/{club}/{device} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Chỉ mục tên biểu tượng MDI được tích hợp sẵn trong AI Agent của cơ sở (bộ chọn biểu tượng)

Chuyển tiếp chỉ mục biểu tượng MDI tích hợp sẵn của bridge thiết bị (GET /__services/icons/mdi/index.json) qua đường hầm. Bộ chọn xuất bản/chỉnh sửa sử dụng danh mục đi kèm applet (cùng phiên bản cố định 7.4.47); SVG của ứng dụng đã xuất bản được phân giải từ gói @mdi/js cục bộ của portal-server. Cùng mức yêu cầu truy cập như bộ chọn dịch vụ (mô-đun ph-ai-agent + quyền truy cập 'open' theo từng thiết bị).

Tham số

club `string` (bắt buộc) device `string` (bắt buộc)

Điểm cuối

GET /api/agent-apps/mdi-index/{club}/{device}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/mdi-index/{club}/{device} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy một loạt SVG biểu tượng MDI từ AI Agent của cơ sở (xem trước trong bộ chọn)

Phân giải tối đa 60 glyph MDI theo tên từ bộ biểu tượng tích hợp sẵn của thiết bị trong một lệnh gọi, được làm sạch phía máy chủ với cùng danh sách cho phép áp dụng cho biểu tượng ứng dụng đã lưu. Được bộ chọn biểu tượng dùng để hiển thị kết quả tìm kiếm; các tên không xác định trả về null.

Tham số

club `string` (bắt buộc) device `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-apps/mdi-icons/{club}/{device}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-apps/mdi-icons/{club}/{device} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Các phạm vi đối tượng mà người yêu cầu có thể xuất bản đến từ cơ sở này

Phạm vi đối tượng mà người xuất bản có thể cấp, dùng cho bộ chọn xuất bản/chỉnh sửa: các cơ sở mà vai trò ph-ai-agent của họ bao phủ (phạm vi nhiều cơ sở), cùng với việc họ có quyền cấp tổ chức cần thiết cho đối tượng toàn thương hiệu / toàn tổ chức tại thương hiệu/tổ chức của cơ sở này hay không. Các quy tắc tương tự được áp dụng lại phía máy chủ khi xuất bản/cập nhật (validatePublishAudience); điểm cuối này chỉ định hình giao diện người dùng.

Tham số

club `string` (bắt buộc)

Điểm cuối

GET /api/agent-apps/audience-options/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/audience-options/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tự động hoàn thành người dùng ngang hàng cho đối tượng ứng dụng theo người dùng được chỉ định

CHỈ tìm kiếm những người dùng mà người yêu cầu đã có thể thấy, tức là những người có vai trò trùng với ít nhất một cơ sở/vùng/tổ chức trong quyền truy cập ph-ai-agent của chính người yêu cầu. Truy vấn tối thiểu 2 ký tự và giới hạn 10 kết quả khiến điểm cuối này không thể dùng để thu thập dữ liệu hàng loạt; cùng tập phạm vi tiếp cận này được áp dụng lại phía máy chủ khi lưu đối tượng.

Tham số

club `string` (bắt buộc) q `string` (bắt buộc)

Điểm cuối

GET /api/agent-apps/user-search/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/user-search/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xuất bản một Live Service của AI Agent thành Custom App của Performance Hub

Đăng ký một ứng dụng web do AI Agent của cơ sở lưu trữ (một Live Service do bridge phát hiện) làm mục "Custom Apps" trên menu bên cho đối tượng đã chọn. Yêu cầu mô-đun ph-ai-agent tại cơ sở này VÀ quyền truy cập 'open' theo từng thiết bị; đối tượng bị giới hạn bởi phạm vi vai trò của chính người xuất bản (bạn không bao giờ có thể xuất bản rộng hơn phạm vi bạn tiếp cận được). Danh tính dịch vụ được phân giải TRỰC TIẾP từ danh sách /__services của thiết bị; lược đồ http/https không bao giờ được lưu lại.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-apps/publish/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-apps/publish/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Các Custom App đã xuất bản hiển thị tại cơ sở này

Trả về các ứng dụng đã xuất bản đang hoạt động có đối tượng bao gồm cơ sở này, theo định dạng mà menu bên hiển thị (appId, name, icon, description). Đối tượng được phân giải lại trực tiếp ở mỗi lệnh gọi để các thay đổi quyền truy cập có hiệu lực ngay lập tức.

Tham số

club `string` (bắt buộc)

Điểm cuối

GET /api/agent-apps/menu/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/menu/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Các ứng dụng đã xuất bản được quản lý từ cơ sở này (chế độ xem của người xuất bản)

Các hàng ứng dụng đầy đủ cho những ứng dụng có cơ sở GỐC là câu lạc bộ này, dùng cho danh sách quản lý "Published Apps" của applet. Mỗi hàng được gắn canManage cho người dùng yêu cầu (người xuất bản).

Tham số

club `string` (bắt buộc)

Điểm cuối

GET /api/agent-apps/manage/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/manage/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo token người xem giới hạn theo dịch vụ cho một Custom App đã xuất bản

Trả về một URL đã ký ngắn hạn + token mà trình duyệt dùng để mở MỘT ứng dụng đã xuất bản trực tiếp trên cổng chuyển tiếp khu vực của thiết bị. Token mang một claim svc chỉ định cổng dịch vụ, vì vậy cổng giới hạn phiên trong /__services/proxy//; không bao giờ có thể truy cập trò chuyện/terminal của agent bằng token này. Người xem cần mô-đun custom-apps tại một cơ sở nằm trong đối tượng của ứng dụng; họ KHÔNG cần mô-đun ph-ai-agent hoặc quyền truy cập agent theo từng thiết bị.

Tham số

club `string` (bắt buộc) appId `string` (bắt buộc)

Điểm cuối

POST /api/agent-apps/access/{club}/{appId}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-apps/access/{club}/{appId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thông tin hỗ trợ cho một Custom App đã xuất bản (liên hệ chủ sở hữu)

Người hỗ trợ ứng dụng do người dùng xuất bản này: email của người xuất bản (nếu không có thì dùng chủ sở hữu của agent lưu trữ). Được hiển thị trên bảng ngoại tuyến/lỗi của người xem để yêu cầu hỗ trợ được gửi đến chủ sở hữu ứng dụng thay vì Performance Hub; ứng dụng đã xuất bản không thuộc phạm vi hỗ trợ cốt lõi của PH. Đối tượng của ứng dụng được kiểm tra lại trước; người xem chưa từng được chia sẻ ứng dụng sẽ không nhận được thông tin gì. Ứng dụng đang tạm dừng vẫn được phân giải (chủ sở hữu cũng tiếp nhận các câu hỏi "tại sao ứng dụng này bị tạm dừng?").

Tham số

club `string` (bắt buộc) appId `string` (bắt buộc)

Điểm cuối

GET /api/agent-apps/support-info/{club}/{appId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/support-info/{club}/{appId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Gửi email yêu cầu hỗ trợ đến chủ sở hữu của một Custom App đã xuất bản

Gửi tin nhắn của người xem đến người liên hệ hỗ trợ của ứng dụng (người xuất bản, nếu không có thì chủ sở hữu agent) dưới dạng email mang thương hiệu: To là chủ sở hữu, CC người xem (làm bản lưu yêu cầu của họ), Reply-To là người xem để chủ sở hữu trả lời trực tiếp cho họ. Ứng dụng đã xuất bản do người dùng duy trì, vì vậy cách này giữ các yêu cầu hỗ trợ ngoài hàng đợi của Performance Hub. Đối tượng được kiểm tra lại; mỗi người xem chỉ gửi được một yêu cầu cho mỗi ứng dụng trong 15 phút (thời gian chờ Redis, fail-open).

Tham số

club `string` (bắt buộc) appId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-apps/support-request/{club}/{appId}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-apps/support-request/{club}/{appId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Cập nhật một Custom App đã xuất bản (tên, biểu tượng, mô tả, trạng thái, đối tượng)

Chỉ dành cho người xuất bản. Các thay đổi đối tượng được xác thực lại theo phạm vi vai trò của NGƯỜI CHỈNH SỬA với cùng quy tắc giới hạn như khi xuất bản. Trạng thái chuyển đổi giữa active và paused (ứng dụng tạm dừng biến mất khỏi menu và từ chối tạo token).

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-apps/update/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-apps/update/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Hủy xuất bản một Custom App (xóa mềm)

Chỉ dành cho người xuất bản. Xóa mềm hàng trong sổ đăng ký: ứng dụng biến mất khỏi menu ngay lập tức và việc tạo token người xem bị từ chối; các phiên cổng đã cấp sẽ hết hiệu lực khi token hết hạn.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-apps/unpublish/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-apps/unpublish/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Chuyển quyền sở hữu một Custom App đã xuất bản

Tương tự quy trình chỉ định lại chủ sở hữu của AI Agent: người xuất bản hiện tại hoặc chủ sở hữu tài khoản (mô-đun thanh toán) có thể giao ứng dụng cho người dùng khác, người này sau đó sẽ quản lý ứng dụng. Chủ sở hữu mới phải có quyền truy cập cơ sở tại câu lạc bộ gốc của ứng dụng.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-apps/transfer-owner/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-apps/transfer-owner/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Các bản xuất kỹ năng đã chuẩn bị trên AI Agent của cơ sở (bộ chọn chia sẻ)

Chuyển tiếp danh sách bản xuất đã chuẩn bị của bridge thiết bị (GET /__skills/exports) qua đường hầm cho bộ chọn "Share a skill" của applet. Các bản xuất được chuẩn bị bởi bước kiểm tra bảo mật/tính di động ph-skill-sharing trên thiết bị; mỗi mục mang kết quả quét phía thiết bị. Yêu cầu mô-đun ph-ai-agent VÀ quyền truy cập 'open' theo từng thiết bị (cùng mức yêu cầu như khi xuất bản).

Tham số

club `string` (bắt buộc) device `string` (bắt buộc)

Điểm cuối

GET /api/agent-skills/exports/{club}/{device}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/exports/{club}/{device} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xuất bản một bản xuất kỹ năng đã chuẩn bị thành kỹ năng chia sẻ MỚI (phiên bản nháp)

Kéo tarball bản xuất đã chuẩn bị theo tên từ bridge thiết bị qua đường hầm, giải nén trong bộ nhớ (từ chối path traversal/symlink/kích thước quá lớn), chạy quét bảo mật xác định phía đám mây, tạo manifest từ frontmatter của SKILL.md, lưu tarball theo địa chỉ nội dung trong bucket kỹ năng riêng tư và tạo phần đầu kỹ năng + một phiên bản NHÁP. Nếu quét chặn thì KHÔNG lưu gì và trả về các phát hiện. Đối tượng bị giới hạn bởi phạm vi vai trò của chính người xuất bản. Gửi bản nháp (POST submit) để xuất bản.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-skills/publish/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/publish/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Xuất bản một bản xuất đã chuẩn bị thành PHIÊN BẢN MỚI của một kỹ năng chia sẻ hiện có

Cùng quy trình như khi xuất bản, áp dụng cho một kỹ năng hiện có: tên trong SKILL.md của bản xuất phải khớp với kỹ năng, phiên bản phải mới (phiên bản không thể thay đổi) và bắt buộc có nhật ký thay đổi. Chỉ người xuất bản mới có thể thêm phiên bản. Nếu quét chặn, hệ thống lưu một hàng phiên bản có trạng thái 'rejected' (chỉ có báo cáo, không có artifact) để các phát hiện hiển thị trong lịch sử của người xuất bản.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-skills/new-version/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/new-version/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Báo cáo quét đầy đủ (+ đánh giá LLM) cho một phiên bản kỹ năng

Danh sách phát hiện đầy đủ cho một phiên bản, chỉ dành cho người xuất bản và quản trị viên tổ chức (xét duyệt phê duyệt); người cài đặt sẽ thấy số lượng tóm tắt trong chi tiết kỹ năng.

Tham số

club `string` (bắt buộc) skillId `string` (bắt buộc) version `string` (bắt buộc)

Điểm cuối

GET /api/agent-skills/scan-report/{club}/{skillId}/{version}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/scan-report/{club}/{skillId}/{version} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Gửi một phiên bản kỹ năng nháp (xuất bản hoặc đưa vào hàng đợi phê duyệt)

Chuyển một phiên bản nháp sang bước tiếp theo theo quy định quản trị của tổ chức. Khi tổ chức đã chọn tham gia đánh giá LLM, bước đánh giá hướng dẫn sẽ chạy trước (theo khả năng tốt nhất; kết luận 'fail' sẽ từ chối, kết luận 'flag' buộc đưa vào hàng đợi phê duyệt). Các chia sẻ cấp cơ sở được xuất bản ngay trừ khi quy định quản trị yêu cầu phê duyệt; các chia sẻ vào thư viện tổ chức (đối tượng thương hiệu/tổ chức) mặc định yêu cầu phê duyệt. Việc xuất bản sẽ đặt latestVersion của kỹ năng; các bản cài đặt theo chính sách 'auto' sẽ nhận phiên bản này ở lượt đối chiếu tiếp theo.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-skills/submit/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/submit/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Gỡ niêm yết một kỹ năng chia sẻ (xóa khỏi thư viện)

Chỉ dành cho người xuất bản. Kỹ năng biến mất khỏi thư viện và từ chối cài đặt mới ngay lập tức; các bản cài đặt HIỆN CÓ vẫn tiếp tục hoạt động. Gỡ niêm yết là thao tác trên danh sách, không phải công tắc ngắt khẩn cấp.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-skills/delist/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/delist/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Chỉnh sửa thông tin niêm yết của một kỹ năng chia sẻ (tên hiển thị, mô tả, biểu tượng)

Chỉ dành cho người xuất bản. Đây là các trường chỉ dùng để hiển thị; tên chuẩn của kỹ năng là danh tính của nó (manifest, thư mục cài đặt, đối chiếu phiên bản) và không bao giờ thay đổi. Chuỗi rỗng sẽ đặt lại trường về null (quay về tên chuẩn / không có biểu tượng). Biểu tượng sử dụng danh mục MDI (mdi:icon-name), cùng định dạng với ứng dụng agent đã xuất bản.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-skills/update-listing/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/update-listing/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Chuyển quyền sở hữu một kỹ năng chia sẻ

Tương tự quy trình chuyển giao ứng dụng đã xuất bản: người xuất bản hiện tại hoặc chủ sở hữu tài khoản (mô-đun thanh toán) có thể giao kỹ năng cho người dùng khác, người này sau đó sẽ quản lý các phiên bản và thông tin niêm yết. Chủ sở hữu mới phải có quyền truy cập cơ sở tại câu lạc bộ gốc của kỹ năng.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-skills/transfer-owner/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/transfer-owner/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Thư viện kỹ năng hiển thị tại cơ sở này (lọc theo đối tượng)

Các kỹ năng đang hoạt động có ít nhất một phiên bản đã xuất bản với đối tượng bao gồm cơ sở này (hoặc chỉ định người xem), kèm tóm tắt phiên bản đã xuất bản mới nhất và mức độ áp dụng trong tổ chức (số cơ sở riêng biệt, không bao giờ là số lượt cài đặt thô). Đối tượng được phân giải lại trực tiếp ở mỗi lệnh gọi.

Tham số

club `string` (bắt buộc)

Điểm cuối

GET /api/agent-skills/library/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/library/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Chi tiết kỹ năng (phiên bản, yêu cầu, tóm tắt quét, mức độ áp dụng)

Chi tiết đầy đủ của một kỹ năng trong thư viện: lịch sử phiên bản kèm nhật ký thay đổi và tóm tắt quét (danh sách điểm cuối theo từng phiên bản phục vụ so sánh kết quả quét khi cập nhật), các yêu cầu được khai báo trong manifest, nguồn gốc người xuất bản và chỉ số áp dụng theo số cơ sở. Đối tượng được kiểm tra lại; người xem chưa từng được chia sẻ kỹ năng sẽ không nhận được thông tin gì (người xuất bản và quản trị viên tổ chức luôn thấy kỹ năng).

Tham số

club `string` (bắt buộc) skillId `string` (bắt buộc)

Điểm cuối

GET /api/agent-skills/skill/{club}/{skillId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/skill/{club}/{skillId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Các kỹ năng được xuất bản từ cơ sở này (danh sách quản lý của người xuất bản)

Các hàng kỹ năng đầy đủ có cơ sở GỐC là câu lạc bộ này, mỗi hàng được gắn canManage cho người dùng yêu cầu và tóm tắt phiên bản mới nhất (bao gồm bản nháp và bản đang chờ phê duyệt; đây là chế độ xem làm việc của người xuất bản).

Tham số

club `string` (bắt buộc)

Điểm cuối

GET /api/agent-skills/manage/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/manage/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cài đặt một kỹ năng từ thư viện lên AI Agent của cơ sở

Chịu kiểm soát của quy định quản trị: installSources của tổ chức phải cho phép, đối tượng của kỹ năng phải bao gồm cơ sở này (hoặc chỉ định người yêu cầu), phiên bản phải đã được xuất bản và người yêu cầu phải đáp ứng cấp whoCanInstall cho thiết bị đích (chủ sở hữu / người dùng được phép / quản trị viên cơ sở / quản trị viên tổ chức; xem phần quản trị). Ghi hàng vòng đời cài đặt (nguồn dữ liệu chuẩn) và đẩy ngay theo khả năng tốt nhất; cron đối chiếu đảm bảo việc phân phối khi thiết bị có thể truy cập được.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-skills/install/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/install/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Phê duyệt một bản cập nhật kỹ năng đang chờ cho một bản cài đặt

Chuyển desiredVersion của bản cài đặt sang phiên bản đã xuất bản mới nhất (bước thủ công của chính sách 'notify' và 'pinned', và là cách xử lý khi quy định quản trị đặt updatePosture là 'approvalRequired'). Giữ phiên bản hiện tại làm mục tiêu khôi phục một bước và xóa mọi ghim cập nhật sau khôi phục (skipVersion). Cùng cấp quyền whoCanInstall như khi cài đặt.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-skills/update-approve/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/update-approve/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Khôi phục một kỹ năng đã cài đặt về phiên bản trước

Đặt desiredVersion thành previousVersion của hàng cài đặt (được lưu mỗi khi đổi phiên bản) và để quy trình phân phối thông thường cài đặt lại. Khôi phục một bước: các phiên bản được hoán đổi, nên khôi phục hai lần sẽ trở lại trạng thái ban đầu. Đồng thời ghim cập nhật (skipVersion = phiên bản vừa được khôi phục từ đó) để chính sách auto/notify giữ nguyên bản khôi phục; ghim sẽ bị xóa khi có phiên bản mới hơn hẳn được xuất bản, khi update-approve hoặc khi set-policy.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-skills/rollback/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/rollback/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Gỡ cài đặt một kỹ năng khỏi AI Agent của cơ sở

Đánh dấu hàng cài đặt là pending-uninstall và đẩy trạng thái mong muốn; hàng sẽ bị xóa khi thiết bị xác nhận đã gỡ (đọc lại khi đối chiếu). Cùng cấp quyền whoCanInstall như khi cài đặt.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-skills/uninstall/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/uninstall/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Đặt chính sách cập nhật theo từng bản cài đặt cho một kỹ năng trên một thiết bị

auto (quá trình đối chiếu tự động áp dụng các phiên bản mới được xuất bản, trừ khi updatePosture của tổ chức yêu cầu phê duyệt), notify (chủ sở hữu được thông báo một lần cho mỗi phiên bản mới và tự áp dụng) hoặc pinned (không bao giờ thay đổi nếu không có update-approve rõ ràng). Việc thay đổi chính sách sẽ xóa mọi ghim cập nhật sau khôi phục (skipVersion). Cùng cấp quyền whoCanInstall như khi cài đặt.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-skills/set-policy/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/set-policy/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Các bản cài đặt kỹ năng trên AI Agent của cơ sở (thẻ Skills)

Các hàng vòng đời cài đặt của một thiết bị, mỗi hàng được gắn các trường niêm yết của kỹ năng và cho biết có phiên bản mới hơn đã được xuất bản hay không. Yêu cầu quyền truy cập 'open' theo từng thiết bị (thẻ Skills nằm trong ngăn kéo agent).

Tham số

club `string` (bắt buộc) device `string` (bắt buộc)

Điểm cuối

GET /api/agent-skills/installs/{club}/{device}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/installs/{club}/{device} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Các phiên bản kỹ năng đang chờ phê duyệt trong tổ chức của cơ sở này

Hàng đợi phê duyệt của quản trị viên tổ chức: mọi phiên bản đang chờ phê duyệt trên các kỹ năng của tổ chức, kèm thông tin niêm yết kỹ năng và tóm tắt quét/LLM. Chỉ dành cho quản trị viên tổ chức.

Tham số

club `string` (bắt buộc)

Điểm cuối

GET /api/agent-skills/approvals/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/approvals/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Phê duyệt một phiên bản kỹ năng đang chờ (xuất bản phiên bản đó)

Chỉ dành cho quản trị viên tổ chức. Phiên bản được xuất bản, latestVersion của kỹ năng được cập nhật và người xuất bản nhận được thông báo. Các bản cài đặt theo chính sách 'auto' sẽ nhận phiên bản này ở lượt đối chiếu tiếp theo.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-skills/approve/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/approve/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Từ chối một phiên bản kỹ năng đang chờ

Chỉ dành cho quản trị viên tổ chức. Phiên bản bị từ chối kèm lý do của người xét duyệt và người xuất bản nhận được thông báo; họ có thể khắc phục các phát hiện và gửi phiên bản mới (phiên bản không thể thay đổi).

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-skills/reject/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/reject/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Quy định quản trị Agent Skill đang có hiệu lực cho tổ chức của cơ sở này

Chính sách đã lưu của từng tổ chức được hợp nhất lên các giá trị mặc định của nền tảng (tổ chức chưa có hàng đã lưu sẽ thấy hoàn toàn giá trị mặc định). Chỉ dành cho quản trị viên tổ chức.

Tham số

club `string` (bắt buộc)

Điểm cuối

GET /api/agent-skills/governance/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/governance/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật quy định quản trị Agent Skill cho tổ chức của cơ sở này

Cập nhật một phần: chỉ các trường được cung cấp mới thay đổi; mọi trường khác giữ giá trị đã lưu/mặc định. Chỉ dành cho quản trị viên tổ chức. Các giá trị ghi đè theo từng thiết bị nằm trên hàng đăng ký, thông qua các tuyến cấu hình thiết bị hiện có.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/agent-skills/governance/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/governance/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Lấy dữ liệu môi trường của một cơ sở

Trả về điều kiện thời tiết hiện tại, bao gồm giờ mặt trời mọc/lặn (qua Open-Meteo) và nhiệt độ trong nhà của cơ sở (từ cảm biến Duress) cho câu lạc bộ được chỉ định. Được lưu trong bộ nhớ đệm Redis trong 30 phút.

Tham số

clubId `string` (bắt buộc) ID nội bộ của câu lạc bộ/cơ sở

Điểm cuối

GET /api/clubs/{clubId}/environment

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/environment \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm/liên kết một thiết bị IoT chung với một câu lạc bộ.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn thêm thiết bị vào. body `string` (bắt buộc) Đối tượng JSON của màn hình mới cần liên kết.

Điểm cuối

POST /api/devices/addGenericDevice/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/addGenericDevice/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Gỡ bỏ và khôi phục cài đặt gốc cho một màn hình hiển thị

Gỡ liên kết cơ sở đang hoạt động của màn hình và thiết lập lệnh khôi phục cài đặt gốc bền vững. Màn hình đang tắt sẽ áp dụng việc khôi phục sau khi được bật lại và kết nối lại, rồi quay về trang ghép nối HDMI. Các bản ghi thanh toán trước đây vẫn được giữ lại.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/display-screens/reset/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/display-screens/reset/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Liên kết một bộ điều khiển cửa với một cơ sở.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/door-controllers/associate/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/door-controllers/associate/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Cập nhật cài đặt bộ điều khiển cửa của một cơ sở.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/door-controllers/update/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/door-controllers/update/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Ngừng sử dụng một bộ điều khiển cửa tại một cơ sở.

Tham số

club `string` (bắt buộc)

Điểm cuối

POST /api/devices/door-controllers/decommission/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/door-controllers/decommission/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về cấu hình rơ-le của một bộ điều khiển cửa.

Tham số

uuid `string` (bắt buộc)

Điểm cuối

GET /api/devices/door-controllers/config/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/door-controllers/config/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về siêu dữ liệu của thiết bị

Tham số

uuid `string` (bắt buộc) ID duy nhất của thiết bị

Điểm cuối

GET /api/devices/metadata/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/metadata/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về siêu dữ liệu của thiết bị. Phản hồi là hàng siêu dữ liệu ở cấp cao nhất (cấu trúc cũ) cùng với `detectedType` (camera | ai-edge-processor | door-controller | ph-ai-agent | null) và `online` (true khi được cập nhật trong vòng 5 phút).

Tham số

deviceSerialNumber `string` (bắt buộc) Số sê-ri của thiết bị

Điểm cuối

GET /api/devices/metadata/serial/{serialNo}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/metadata/serial/{serialNo} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về dữ liệu Smart Club của câu lạc bộ.

Tham số

club_id `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn thêm thiết bị vào.

Điểm cuối

GET /api/clubs/{club_id}/smart-club-data

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club_id}/smart-club-data \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về tất cả thiết bị liên kết với một câu lạc bộ.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn liệt kê thiết bị.

Điểm cuối

GET /api/devices/list/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/list/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về tất cả bản phát hành ứng dụng (phiên bản) cho các thiết bị balena của chúng tôi.

Điểm cuối

GET /api/devices/listReleases

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/listReleases \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Chuyển một thiết bị sang cơ sở (câu lạc bộ) mới và cập nhật các hệ thống liên quan.

Tham số

club `string` (bắt buộc) ID cơ sở nguồn (câu lạc bộ hiện tại của thiết bị) body `object` (bắt buộc) Tham số chuyển

Điểm cuối

POST /api/devices/move/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/move/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thử thiết lập kết nối đến bộ định tuyến của một cơ sở bằng cách chọn thiết bị phù hợp nhất trong câu lạc bộ và gửi lệnh MQTT để tạo đường hầm.

Tham số

facilityID `string` (bắt buộc) ID nội bộ của cơ sở đang được thử kết nối bộ định tuyến.

Điểm cuối

GET /api/devices/openRouterWebpage/{facilityID}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/openRouterWebpage/{facilityID} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Danh mục Cloud Agent (vùng, kích cỡ, giá bán hiện hành)

Tham số

club `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/cloud/catalog/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/catalog/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Báo giá một Cloud Agent (phần mềm + lưu trữ)

Điểm cuối

POST /api/devices/ph-ai-agent/cloud/quote/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/quote/{club} \
  -H "x-api-key: YOUR_API_KEY"

Khởi chạy một Cloud Agent (đưa việc cấp phát vào hàng đợi + tự động liên kết)

Điểm cuối

POST /api/devices/ph-ai-agent/cloud/launch/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/launch/{club} \
  -H "x-api-key: YOUR_API_KEY"

Trạng thái tác vụ Cloud Agent

Điểm cuối

GET /api/devices/ph-ai-agent/cloud/jobs/{club}/{jobId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/jobs/{club}/{jobId} \
  -H "x-api-key: YOUR_API_KEY"

Xóa hoàn toàn một Cloud Agent (VM + balena + đăng ký)

Điểm cuối

POST /api/devices/ph-ai-agent/cloud/delete/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/delete/{club} \
  -H "x-api-key: YOUR_API_KEY"

Xử lý yêu cầu gỡ bỏ Cloud Agent đang tạm hoãn (thử sao lưu lại, xóa không sao lưu hoặc hủy)

Điểm cuối

POST /api/devices/ph-ai-agent/cloud/delete-decision/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/delete-decision/{club} \
  -H "x-api-key: YOUR_API_KEY"

Liệt kê Connected Apps của một agent (các bộ ứng dụng + ứng dụng có tài khoản đã kết nối)

Trả về trạng thái Connected Apps của agent: cờ bật, dữ liệu tổng hợp theo từng bộ ứng dụng (Google Workspace, Microsoft 365) và danh mục ứng dụng được tuyển chọn kèm các tài khoản đã kết nối của từng ứng dụng (đa tài khoản: một agent có thể có nhiều tài khoản cho mỗi ứng dụng, mỗi tài khoản có thể có bí danh) được phân giải từ phiên thượng nguồn của agent.

Tham số

facilityId `string` (bắt buộc) deviceId `string` (bắt buộc) UUID balena của thiết bị agent.

Điểm cuối

GET /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Danh mục đầy đủ của chợ ứng dụng Connected Apps cho một agent

Trả về mọi ứng dụng có thể kết nối (toàn bộ danh mục bộ công cụ xác thực được quản lý, được lưu trong bộ nhớ đệm phía máy chủ khoảng 12 giờ) kèm các cấp nổi bật/bộ ứng dụng và các tài khoản đã kết nối của agent cho từng ứng dụng, cùng dữ liệu tổng hợp theo từng bộ ứng dụng và các yêu cầu kết nối đang chờ của agent; tất cả trong một payload cho chợ ứng dụng có thể tìm kiếm phía máy khách.

Tham số

facilityId `string` (bắt buộc) deviceId `string` (bắt buộc) UUID balena của thiết bị agent.

Điểm cuối

GET /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/catalog

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/catalog \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Bỏ qua một yêu cầu kết nối đang chờ của agent

Đánh dấu yêu cầu kết nối đang chờ của agent cho một bộ công cụ là đã bỏ qua (yêu cầu sẽ biến mất khỏi mục "Requested by your agent" của chợ ứng dụng). Có tính lũy đẳng: bỏ qua một yêu cầu không ở trạng thái chờ sẽ không có tác dụng gì.

Tham số

facilityId `string` (bắt buộc) deviceId `string` (bắt buộc) UUID balena của thiết bị agent.

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/requests/dismiss

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/requests/dismiss \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Bật hoặc tắt Connected Apps cho một agent

Lưu công tắc Connected Apps của agent và đẩy biến thiết bị Balena PH_APPS_MCP_ENABLED đến đúng thiết bị đó (theo khả năng tốt nhất; cờ phía PH là cổng kiểm soát bắt buộc trên relay MCP).

Tham số

facilityId `string` (bắt buộc) deviceId `string` (bắt buộc) UUID balena của thiết bị agent.

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/enable

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/enable \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Payload chuẩn bị kết nối cho một ứng dụng (chế độ, các trường thông tin xác thực, hướng dẫn thiết lập)

Mọi thông tin hộp thoại kết nối cần trước khi bắt đầu kết nối: cách ứng dụng kết nối (oauth = quy trình đồng ý được lưu trữ, credentials = biểu mẫu trong sản phẩm), các trường thông tin xác thực cần thu thập cho chế độ credentials và hướng dẫn thiết lập trong sản phẩm (được biên soạn cho các ứng dụng ưu tiên, nếu không sẽ được tạo từ siêu dữ liệu trường của ứng dụng; không bao giờ là liên kết đến tài liệu bên ngoài). Các ứng dụng OAuth tự mang theo cũng cho biết ứng dụng OAuth của khách hàng đã được đăng ký cho agent NÀY hay chưa (byoConfigured) và URL chuyển hướng cần đăng ký với nhà cung cấp.

Tham số

facilityId `string` (bắt buộc) deviceId `string` (bắt buộc) UUID balena của thiết bị agent. toolkit `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-info/{toolkit}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-info/{toolkit} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Kết nối một ứng dụng bằng thông tin xác thực do người dùng cung cấp (khóa API, v.v., không dùng OAuth)

Tạo tài khoản đã kết nối cho một ứng dụng ở chế độ credentials trực tiếp từ biểu mẫu trong sản phẩm, không qua quy trình đồng ý được lưu trữ. Các trường thông tin xác thực lấy từ payload connect-info của ứng dụng; phải cung cấp mọi trường bắt buộc. Thông tin xác thực được xác minh với nhà cung cấp nếu được hỗ trợ (theo khả năng tốt nhất; một số ứng dụng chỉ từ chối khóa sai ở lần gọi công cụ đầu tiên của agent). Bí danh tùy chọn dùng để đặt nhãn cho tài khoản mới (đa tài khoản: kết nối một ứng dụng đã được kết nối sẽ thêm MỘT tài khoản KHÁC).

Tham số

facilityId `string` (bắt buộc) deviceId `string` (bắt buộc) UUID balena của thiết bị agent.

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-credentials

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-credentials \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Đăng ký ứng dụng OAuth riêng của khách hàng cho một ứng dụng BYO và bắt đầu quy trình kết nối

Dành cho các ứng dụng OAuth tự mang theo (Xero, Shopify, ...): nhận client ID và client secret của ứng dụng OAuth mà khách hàng đã tạo với nhà cung cấp (theo hướng dẫn thiết lập của ứng dụng), đăng ký ứng dụng đó cho agent NÀY (secret chỉ được lưu tại nền tảng tích hợp thượng nguồn, không bao giờ lưu trong Performance Hub) và ngay lập tức bắt đầu quy trình đăng nhập được lưu trữ với ứng dụng đó. Trả về URL đồng ý để chuyển người dùng đến, cùng hợp đồng với điểm cuối connect. Gửi lại sẽ thay thế ứng dụng đã đăng ký của agent (ví dụ: sau khi xoay vòng secret); các tài khoản đã kết nối hiện có vẫn tiếp tục hoạt động.

Tham số

facilityId `string` (bắt buộc) deviceId `string` (bắt buộc) UUID balena của thiết bị agent.

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-oauth-app

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-oauth-app \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Ngắt kết nối một tài khoản đã kết nối khỏi agent

Xóa một tài khoản đã kết nối (đa tài khoản: các tài khoản khác của cùng ứng dụng vẫn được kết nối). Tài khoản được xác minh là thuộc agent này trước khi xóa; nếu đó là tài khoản CUỐI CÙNG của ứng dụng, bộ công cụ sẽ bị xóa khỏi tập kết nối của agent (phiên được tạo lại khi cần để danh sách công cụ của agent được cập nhật).

Tham số

facilityId `string` (bắt buộc) deviceId `string` (bắt buộc) UUID balena của thiết bị agent.

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/disconnect

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/disconnect \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Đổi tên (đặt lại bí danh) cho một tài khoản đã kết nối của agent

Đặt bí danh hiển thị cho một tài khoản đã kết nối. Bí danh thường được đặt tự động sau OAuth (từ danh tính đã đăng nhập); điểm cuối này phục vụ việc đổi tên thủ công trong hộp thoại chi tiết ứng dụng. Bí danh trống sẽ xóa nhãn. Tài khoản được xác minh là thuộc agent này trước khi cập nhật lên thượng nguồn.

Tham số

facilityId `string` (bắt buộc) deviceId `string` (bắt buộc) UUID balena của thiết bị agent.

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/rename-account

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/rename-account \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Bật/tắt một dịch vụ Performance Hub tích hợp sẵn cho agent

Bật hoặc tắt một dịch vụ tích hợp sẵn luôn hoạt động (Smart Search, Weather, ...) cho agent này. Dịch vụ tích hợp sẵn không cần kết nối hay OAuth; chúng đi kèm mọi agent và được bật theo mặc định. Nút bật/tắt này lưu giá trị ghi đè theo từng agent và tạo lại phiên thượng nguồn của agent ngay lập tức để bộ công cụ được cập nhật. Lưu ý công tắc "External apps" riêng biệt (tuyến /enable) là công tắc tắt cưỡng bức cho toàn bộ máy chủ MCP ứng dụng; khi công tắc này tắt, các dịch vụ tích hợp sẵn cũng không khả dụng, bất kể nút bật/tắt riêng của chúng.

Tham số

facilityId `string` (bắt buộc) deviceId `string` (bắt buộc) UUID balena của thiết bị agent. slug `string` (bắt buộc) Slug của dịch vụ tích hợp sẵn.

Nội dung yêu cầu

Điểm cuối

PATCH /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/built-in/{slug}

Yêu cầu mẫu

curl -X PATCH https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/built-in/{slug} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Liên kết một thiết bị AI Agent với một cơ sở

Liên kết ưu tiên theo siêu dữ liệu. Tra cứu thiết bị theo số sê-ri trong siêu dữ liệu thiết bị trực tiếp, yêu cầu thiết bị đang trực tuyến, sau đó tạo hàng đăng ký khi cần, chỉ định vùng relay Chisel + cổng đường hầm + secret, đăng ký vị trí đó trên relay và đẩy cấu hình cơ sở + đường hầm đến thiết bị qua Balena. Thiết bị mới cũng được tạo sẵn một tài khoản dịch vụ MCP mặc định (đã bật, giới hạn trong cơ sở này, có mọi khả năng); khi ghép nối lại, mọi quyền MCP hiện có được giữ nguyên. Các cài đặt nâng cao tùy chọn sẽ ghi đè giá trị mặc định khi ghép nối (cấu hình sao lưu, bật/tắt MCP, hạn chế truy cập), và `restoreFrom` khởi tạo thiết bị mới từ bản sao lưu đám mây của một thiết bị khác trong cơ sở (nguồn đang hoạt động hoặc đã ngừng sử dụng; đưa vào hàng đợi một lần khôi phục liên kho lưu trữ, được trả về dưới dạng `restoreRequest` để thăm dò tiến độ).

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/associate/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/associate/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Liệt kê các thiết bị AI Agent của một cơ sở

Trả về các thiết bị AI Agent của cơ sở kèm trạng thái trực tuyến + đường hầm theo thời gian thực (được dùng bởi bộ chuyển đổi thiết bị của applet).

Tham số

club `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/list/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/list/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trạng thái cập nhật + trực tuyến của AI Agent

Trả về việc thiết bị có đang trực tuyến hay không, có bản cập nhật khả dụng/đang chờ hay không và bản phát hành được đề xuất (phiên bản ghim của nhóm thiết bị khi nhóm được ghim; bản thành công cao nhất khi nhóm theo dõi bản mới nhất).

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/update-status/{club}/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/update-status/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trạng thái thiết bị trực tiếp + chỉ số của AI Agent

Trả về ảnh chụp được chọn lọc cho dải chỉ số và ngăn kéo quản lý của applet: các trường danh tính + đăng ký, tình trạng hoạt động + kết nối, phiên bản phần mềm và các chỉ số heartbeat mới nhất (CPU, nhiệt độ, bộ nhớ, dung lượng lưu trữ theo từng điểm gắn kết, thời gian hoạt động, mạng). Làm phẳng tín hiệu siêu dữ liệu thiết bị + trạng thái cập nhật Balena; một trong hai phần có thể bị thiếu khi có sự cố tạm thời.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/device-status/{club}/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/device-status/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Phần diễn giải bằng AI cho báo cáo tình trạng thiết bị

Trả về phần giải thích ngắn gọn dành cho người vận hành về các vấn đề tình trạng hiện tại được suy ra. Dữ kiện và các bước xử lý luôn có trong device-status; đoạn bổ sung này được cung cấp theo khả năng tốt nhất và có thể là null.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc)

Điểm cuối

POST /api/devices/ph-ai-agent/health/{club}/{uuid}/explain

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/health/{club}/{uuid}/explain \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo token truy cập trực tiếp đến relay cho một AI Agent

Trả về một URL đã ký ngắn hạn mà trình duyệt dùng để kết nối TRỰC TIẾP đến cổng relay khu vực của thiết bị (bỏ qua chặng trung gian PH/Sydney toàn cầu), cùng với token HS256. PH vẫn là bên cấp quyền (Google SSO + kiểm tra mô-đun/cơ sở tại đây); relay-gateway xác minh token. Proxy /ai-agent-ui vẫn là phương án dự phòng.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/access/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/access/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Gửi tin nhắn trò chuyện vào một phiên AI Agent (trả lời trực tiếp từ thông báo)

Relay phía máy chủ được dùng bởi thao tác trả lời trực tiếp của thông báo đẩy web: service worker gửi POST đến đây (cùng nguồn gốc, cookie SSO) để việc trả lời hoạt động ngay cả khi không mở thẻ Performance Hub nào. PH phân giải đích relay của thiết bị (cùng cách tra cứu như proxy /ai-agent-ui), gắn x-ph-user để ghi nhận người khởi tạo lượt (thông báo đẩy hoàn tất sau đó sẽ được gửi lại cho người dùng này) và chuyển tiếp đến /api/chat/start của thiết bị cùng ID phiên.

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/reply

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/reply \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Đọc cài đặt kiểm soát truy cập của AI Agent (chủ sở hữu)

Trả về khối truy cập của thiết bị (chế độ, danh sách cho phép, khả năng hiển thị, nút bật/tắt PH Support) cùng mọi yêu cầu truy cập đang chờ. Chủ sở hữu thiết bị có thể đọc; người dùng khác nhận lỗi 403.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/access-settings/{club}/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/access-settings/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật cài đặt kiểm soát truy cập của AI Agent (chủ sở hữu)

Ghi chế độ (org/restricted), danh sách cho phép khi hạn chế, khả năng hiển thị danh sách (all/admins) và nút bật/tắt "permit access from Performance Hub Support". Chủ sở hữu thiết bị được phép thực hiện. Bản thân chủ sở hữu chỉ có thể được thay đổi qua reallocate-owner. Các yêu cầu truy cập đã được phê duyệt có hiệu lực lâu dài: những người yêu cầu vẫn được phê duyệt sẽ được hợp nhất trở lại vào danh sách cho phép đã lưu; xóa một người khỏi danh sách được gửi sẽ thu hồi phê duyệt của họ (yêu cầu chuyển sang bị từ chối; họ có thể yêu cầu lại).

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/access-settings/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/access-settings/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Chỉ định lại chủ sở hữu của AI Agent

Chuyển quyền sở hữu thiết bị cho một người dùng Performance Hub khác. Chỉ dành cho chủ sở hữu tài khoản (có quyền truy cập mô-đun thanh toán SaaS); đây là phương án xử lý khi chủ sở hữu của một agent bị hạn chế rời đi. Cả chủ sở hữu cũ và mới đều nhận được thông báo (trong ứng dụng + thông báo đẩy + email).

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/reallocate-owner/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/reallocate-owner/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Danh sách người dùng của cơ sở cho bộ chọn danh sách cho phép / chủ sở hữu của AI Agent

Trả về email + tên (+ cờ isOrgAdmin) của mọi người dùng có vai trò cấp quyền truy cập vào cơ sở NÀY. Chỉ dành cho chủ sở hữu thiết bị và người có quyền chỉ định lại (chủ sở hữu tài khoản) để người dùng thông thường không thể liệt kê toàn bộ người dùng.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/org-users/{club}/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/org-users/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Yêu cầu quyền truy cập vào một AI Agent bị hạn chế

Tạo (hoặc mở lại) yêu cầu truy cập của người yêu cầu đối với một thiết bị bị hạn chế; có tính lũy đẳng theo người dùng+thiết bị. Chủ sở hữu được thông báo qua ứng dụng, thông báo đẩy web và email, kèm liên kết sâu đến mô-đun agent.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/access-request/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/access-request/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Phê duyệt hoặc từ chối yêu cầu truy cập AI Agent (chủ sở hữu)

Chủ sở hữu thiết bị xử lý một yêu cầu đang chờ. Phê duyệt sẽ thêm người yêu cầu vào danh sách cho phép của thiết bị; dù kết quả nào, người yêu cầu đều được thông báo (trong ứng dụng + thông báo đẩy + email).

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/access-request-resolve/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/access-request-resolve/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Cho phép + áp dụng bản cập nhật AI Agent

Ghim thiết bị vào bản phát hành được đề xuất (phiên bản ghim của nhóm thiết bị, hoặc bản thành công cao nhất khi nhóm theo dõi bản mới nhất) và mở khóa cập nhật để balena supervisor áp dụng. Trạng thái trên ổ dữ liệu của thiết bị vẫn được giữ nguyên sau khi cập nhật.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/update/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/update/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Lên lịch cập nhật AI Agent vào lúc khác

Lưu thời gian cài đặt đã lên lịch vào đăng ký của thiết bị. Một tác vụ backend định kỳ (mỗi 5 phút) sẽ áp dụng bản cập nhật (ghim + mở khóa) khi đã qua thời gian đã lên lịch. Việc lên lịch sẽ thay thế mọi lịch hiện có của thiết bị.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/update-schedule/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/update-schedule/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Hủy bản cập nhật AI Agent đã lên lịch

Xóa lần cài đặt đã lên lịch đang chờ của thiết bị (không có tác dụng nếu chưa lên lịch gì).

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc)

Điểm cuối

DELETE /api/devices/ph-ai-agent/update-schedule/{club}/{uuid}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/update-schedule/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Chạy lệnh từ xa trên thiết bị AI Agent

Gửi một lệnh MQTT nằm trong danh sách cho phép (khởi động lại, khởi động lại một container, khóa/mở khóa cập nhật, quản lý Wi-Fi) đến device-controller đang chạy trên AI Agent. Thiết bị phải được liên kết với cơ sở.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/command/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/command/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Cập nhật cấu hình hướng đến cơ sở của AI Agent

Lưu các cài đặt mà người vận hành có thể chỉnh sửa cho một AI Agent đã liên kết: tên thiết bị, vị trí thực tế của thiết bị và chu kỳ khởi động lại theo lịch. Lịch khởi động lại cũng được đẩy xuống thiết bị dưới dạng biến môi trường Balena REBOOT_DEVICE (2 giờ sáng theo giờ địa phương), giống với hành vi của Display Screen.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/config/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/config/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Các cơ sở mà AI Agent tại cơ sở này có thể được chuyển đến

Trả về các cơ sở trong cùng tổ chức mà người dùng đã đăng nhập có quyền truy cập (không bao gồm cơ sở hiện tại), dùng cho bộ chọn "Chuyển sang cơ sở khác". Việc chuyển thực tế được thực hiện bởi POST /api/devices/move/:club, endpoint này áp dụng cùng các quy tắc về cùng tổ chức và quyền truy cập cơ sở đích ở phía máy chủ.

Tham số

club `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/move-targets/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/move-targets/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Phạm vi quyền truy cập MCP mà người yêu cầu có thể cấp cho các AI Agent của một cơ sở

Trả về những gì người dùng đã đăng nhập được phép cấp cho tài khoản dịch vụ MCP của AI Agent tại tổ chức của cơ sở này: các cơ sở/vùng nằm trong quyền truy cập của chính họ, họ có được cấp phạm vi toàn tổ chức hay không, tập hợp mô-đun họ nắm giữ và toàn bộ danh mục công cụ MCP (cho mặt nạ nâng cao theo từng công cụ). Giao diện sử dụng dữ liệu này để người dùng chỉ thấy các tùy chọn nằm trong phạm vi quyền của chính họ; endpoint POST mcp-access áp dụng cùng mức giới hạn đó ở phía máy chủ.

Tham số

club `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/mcp-grantable/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/mcp-grantable/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy cấu hình tài khoản dịch vụ MCP của một AI Agent

Trả về cấu hình truy cập MCP của thiết bị (phạm vi, mô-đun, mặt nạ công cụ, các trường kiểm toán).

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/mcp-access/{club}/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/mcp-access/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cấu hình tài khoản dịch vụ MCP của một AI Agent

Lưu cấu hình truy cập MCP của thiết bị với giới hạn tại thời điểm cấp quyền. Người yêu cầu chỉ có thể cấp các cơ sở/vùng nằm trong quyền truy cập của chính họ, chỉ cấp phạm vi tổ chức khi họ có vai trò toàn tổ chức, và chỉ cấp các mô-đun mà chính họ nắm giữ tại tổ chức của cơ sở. Cờ bật cũng được đẩy xuống thiết bị dưới dạng biến môi trường Balena PH_MCP_ENABLED.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/mcp-access/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/mcp-access/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Lấy cấu hình VPN của một AI Agent (đã ẩn thông tin nhạy cảm)

Trả về cờ hỗ trợ VPN và danh sách kết nối của thiết bị. Nội dung hồ sơ và giá trị thông tin xác thực không bao giờ được trả về, chỉ có siêu dữ liệu lúc nhập (máy chủ từ xa, tuyến, DNS) và các cờ cho biết có thông tin xác thực hay không. Trạng thái trực tiếp của từng kết nối lấy từ endpoint device-status (beacon metadata.vpn).

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/vpn-config/{club}/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/vpn-config/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Bật/tắt hỗ trợ VPN của một AI Agent

Bật/tắt tính năng VPN của thiết bị. Đẩy biến thiết bị balena PH_VPN_ENABLED và gửi tín hiệu nhắc đến thiết bị (MQTT vpnConfigChanged); các kết nối được giữ lại khi tắt (đường hầm dừng lại; cấu hình được giữ để bật lại).

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/vpn-config/{club}/{uuid}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/vpn-config/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Nhập (các) hồ sơ OpenVPN vào một AI Agent

Chấp nhận các tệp tải lên mã hóa base64: tệp .ovpn/.conf đơn lẻ, gói tách tệp (cấu hình + chứng chỉ/khóa) và tệp lưu trữ (.zip, tệp xuất Pritunl .tar/.tgz, Tunnelblick .tblk, Viscosity .visc/.visz). Các hồ sơ được chuẩn hóa về dạng nội tuyến chuẩn; mỗi hồ sơ trở thành một kết nối (được nhập ở trạng thái ngắt kết nối: nhập thông tin xác thực rồi kết nối). Trả về lỗi 400 kèm hướng xử lý cho các tệp tải lên không dùng được.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/vpn-import/{club}/{uuid}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/vpn-import/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Cập nhật một kết nối VPN của AI Agent (tên / thông tin xác thực / split-DNS)

Cập nhật kết nối đã lưu. Các trường thông tin xác thực chỉ ghi (bỏ trống = giữ giá trị đã lưu; chuỗi rỗng = xóa). Thay đổi thông tin xác thực/split-DNS sẽ tăng phiên bản của kết nối để đường hầm đang chạy khởi động lại với các giá trị mới.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/vpn-connection/{club}/{uuid}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/vpn-connection/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Xóa một kết nối VPN của AI Agent

Xóa kết nối khỏi bản đăng ký và gửi tín hiệu nhắc đến thiết bị; thiết bị sẽ đóng đường hầm và xóa hồ sơ/thông tin xác thực đã lưu đệm.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc) connectionId `string` (bắt buộc)

Điểm cuối

DELETE /api/devices/ph-ai-agent/vpn-connection/{club}/{uuid}/{connectionId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/vpn-connection/{club}/{uuid}/{connectionId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Kết nối / ngắt kết nối một kết nối VPN của AI Agent

Mô hình trạng thái mong muốn: đặt cờ bật của kết nối trên bản đăng ký và gửi tín hiệu nhắc đến thiết bị (MQTT vpnConfigChanged không có dữ liệu); thiết bị lấy trạng thái chính thức qua lệnh gọi universal-api được xác thực bằng JWT và đồng bộ lại các đường hầm. Nếu bỏ lỡ tín hiệu nhắc, trạng thái sẽ được đồng bộ ở lần đồng bộ định kỳ.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/vpn-command/{club}/{uuid}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/vpn-command/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Lấy cấu hình và trạng thái sao lưu đám mây của một AI Agent

Trả về cài đặt sao lưu của thiết bị (bật, thời gian lưu giữ, vùng lưu trữ), trạng thái sao lưu liên tục (bản sao lưu gần nhất, dung lượng, lỗi), vùng tự động đã xác định và các vùng lưu trữ khả dụng cho bộ chọn. Mật khẩu kho restic không bao giờ được trả về.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/backup-config/{club}/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-config/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật cấu hình sao lưu đám mây của một AI Agent

Lưu trạng thái bật/thời gian lưu giữ/vùng. Có hiệu lực ở lần sao lưu hằng giờ tiếp theo của thiết bị (thiết bị hỏi PH về ngữ cảnh chạy trước mỗi lần chạy), nên không cần khởi động lại thiết bị.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/backup-config/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-config/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Liệt kê các nguồn khôi phục từ bản sao lưu để ghép nối một AI Agent mới

Chế độ xem toàn cơ sở cho tùy chọn "khôi phục từ bản sao lưu" trong hộp thoại thêm agent: mọi bản đăng ký trong cơ sở (cả đang hoạt động LẪN đã ngừng sử dụng/đã thay thế) vẫn còn kho sao lưu giải mã được và ít nhất một điểm khôi phục dùng được, kèm các ảnh chụp mới nhất. Cũng trả về danh sách tùy chọn cấu hình sao lưu (allowedRetentionDays, availableRegions) để hộp thoại không cần UUID thiết bị khi điền các ô chọn.

Tham số

club `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/backup-sources/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-sources/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các điểm khôi phục sao lưu của một AI Agent

Trả về chỉ mục ảnh chụp của thiết bị (mới nhất trước) từ DynamoDB, không cần truy vấn thiết bị hay kho, cùng trạng thái hiện tại của yêu cầu sao lưu thủ công / khôi phục để ngăn kéo thăm dò. Các yêu cầu cũ (chưa từng được tiếp nhận hoặc không có tín hiệu tiến độ) được hiển thị là thất bại để giao diện luôn có thể gửi yêu cầu mới.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/backup-snapshots/{club}/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-snapshots/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Yêu cầu sao lưu thủ công một AI Agent ngay bây giờ

Ghi một yêu cầu chạy thủ công (kèm ghi chú của người dùng) vào dòng đăng ký và gửi tín hiệu nhắc đến thiết bị qua MQTT. Thiết bị lấy yêu cầu đã xác minh qua lệnh gọi run-context của universal-api được xác thực bằng JWT; ngay cả khi không có MQTT, yêu cầu vẫn được tiếp nhận ở lượt lập lịch tiếp theo. Bị từ chối khi đang có một lần sao lưu hoặc khôi phục khác.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/backup-run/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-run/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Ghim hoặc bỏ ghim một điểm khôi phục của AI Agent

Các điểm khôi phục đã ghim được bảo vệ khỏi việc cắt tỉa theo thời gian lưu giữ (quy trình bảo trì hằng đêm của thiết bị nhận ID các ảnh chụp đã ghim qua lệnh gọi run-context và loại chúng khỏi restic forget), và các dòng chỉ mục của chúng không bao giờ hết hạn TTL. Bỏ ghim sẽ khôi phục hành vi lưu giữ thông thường.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/backup-pin/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-pin/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Khôi phục một AI Agent từ một điểm khôi phục sao lưu

Ghi một yêu cầu khôi phục vào dòng đăng ký và gửi tín hiệu nhắc đến thiết bị. Khôi phục toàn bộ sẽ ghi đè /data và /home/hermeswebui (trước tiên thiết bị tự động tạo một ảnh chụp an toàn trước khi khôi phục và dừng agent trong suốt quá trình khôi phục) và yêu cầu nhập tên thiết bị để xác nhận. Truyền `paths` sẽ thực hiện khôi phục ở cấp tệp chỉ cho các đường dẫn đó mà không gây gián đoạn. Tùy chọn ghim thiết bị trở lại bản phát hành phần mềm của ảnh chụp sau khi khôi phục dữ liệu hoàn tất (xem backup-restore-release).

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/backup-restore/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-restore/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Áp dụng bản phát hành phần mềm được ghi nhận trong một lần khôi phục đã hoàn tất

Bước cuối của một lần khôi phục có yêu cầu phiên bản phần mềm của ảnh chụp: khi thiết bị báo cáo đã khôi phục dữ liệu xong, thao tác này ghim thiết bị vào bản phát hành đã lưu và mở khóa cập nhật (cơ chế giống endpoint cập nhật). Được kích hoạt bởi việc thăm dò của ngăn kéo; có tính lũy đẳng: ghim đã lưu sẽ bị xóa sau khi áp dụng.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/backup-restore-release/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-restore-release/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Duyệt các tệp bên trong một điểm khôi phục sao lưu

Liệt kê một cấp thư mục của ảnh chụp restic, được phục vụ hoàn toàn ở phía máy chủ từ kho Wasabi (hoạt động cả khi thiết bị ngoại tuyến). Chỉ đọc siêu dữ liệu cây thư mục, không tải dữ liệu tệp nào để liệt kê.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc) takenAt `number` (bắt buộc) path `string` (tùy chọn)

Điểm cuối

GET /api/devices/ph-ai-agent/backup-files/{club}/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-files/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm tên tệp bên trong một điểm khôi phục sao lưu

Tìm tên tệp không phân biệt chữ hoa chữ thường từ một thư mục trở xuống, được phục vụ ở phía máy chủ từ siêu dữ liệu cây restic (không đọc dữ liệu tệp; hoạt động cả khi thiết bị ngoại tuyến). Truyền dần danh sách và dừng ở 200 kết quả khớp đầu tiên.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc) takenAt `number` (bắt buộc) q `string` (bắt buộc) path `string` (tùy chọn)

Điểm cuối

GET /api/devices/ph-ai-agent/backup-search/{club}/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-search/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Những thay đổi giữa hai điểm khôi phục sao lưu

Chạy restic diff ở phía máy chủ giữa hai ảnh chụp của thiết bị (chỉ siêu dữ liệu cây) và trả về danh sách tệp được thêm/xóa/sửa đổi (tối đa 500 thay đổi) cùng thống kê tóm tắt. Kết quả được lưu đệm vì ảnh chụp không thể thay đổi.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc) fromTakenAt `number` (bắt buộc) toTakenAt `number` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/backup-diff/{club}/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-diff/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lịch sử phiên bản của một tệp qua tất cả các điểm khôi phục

Một lệnh restic find ở phía máy chủ trên mọi ảnh chụp trong kho của thiết bị, được gộp thành các phiên bản KHÁC NHAU (các kết quả liên tiếp có cùng kích thước + mtime được hợp nhất) và nối với các dòng chỉ mục ảnh chụp để lấy ngày/loại/ghi chú.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc) path `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/backup-file-versions/{club}/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-file-versions/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm theo tên tệp trong mọi điểm khôi phục của các bản sao lưu của một thiết bị

Cách phục hồi tệp đã xóa: một lệnh restic find ở phía máy chủ trên TẤT CẢ ảnh chụp trong kho (không phân biệt chữ hoa chữ thường, chuỗi con hoặc glob), nhóm theo đường dẫn cùng các điểm khôi phục chứa từng tệp. Một tệp đã bị xóa khỏi thiết bị vẫn có thể tìm thấy ở đây miễn là có điểm khôi phục nào đó chứa tệp đó.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc) q `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/backup-find/{club}/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-find/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tải xuống một tệp từ một điểm khôi phục sao lưu

Truyền một tệp trực tiếp từ kho restic đến trình duyệt (dưới dạng tệp đính kèm). Thư mục được truyền dưới dạng tệp lưu trữ tar. Có giới hạn dung lượng; được phục vụ ở phía máy chủ nên hoạt động cả khi thiết bị ngoại tuyến.

Tham số

club `string` (bắt buộc) uuid `string` (bắt buộc) takenAt `number` (bắt buộc) path `string` (bắt buộc)

Điểm cuối

GET /api/devices/ph-ai-agent/backup-file-download/{club}/{uuid}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-file-download/{club}/{uuid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Ngừng sử dụng một AI Agent tại một cơ sở

Tham số

club `string` (bắt buộc)

Điểm cuối

POST /api/devices/ph-ai-agent/decommission/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/decommission/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Gỡ một AI Agent khỏi cơ sở và khôi phục cài đặt gốc cho phần cứng

Hủy liên kết hoàn toàn thiết bị để có thể ghép nối tại BẤT KỲ cơ sở nào, và xóa toàn bộ dữ liệu trên NUC. Lệnh xóa được kích hoạt qua biến thiết bị balena PH_FACTORY_RESET (một nonce dùng một lần) TRƯỚC khi gỡ bỏ trên đám mây, nên vẫn có hiệu lực nếu thiết bị ngoại tuyến lúc gỡ: lệnh xóa sẽ chạy khi thiết bị kết nối lại. Tín hiệu nhắc MQTT factoryReset giúp thực hiện ngay nếu thiết bị đang trực tuyến. Sau đó, quá trình gỡ bỏ trên đám mây thu hồi mọi thông tin xác thực và quyền đã cấp, xóa liên kết cơ sở trên Balena (biến thiết bị + thẻ club) và clubID trong siêu dữ liệu, xóa các yêu cầu truy cập và bản ghi DNS LAN. Các bản sao lưu đám mây được GIỮ LẠI: chỉ mục ảnh chụp và mật khẩu kho vẫn nằm trên bản đăng ký đã xóa mềm, có thể dùng làm nguồn khôi phục khi thêm thiết bị thay thế. Yêu cầu nhập tên thiết bị để xác nhận.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/reset/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/reset/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Thay thế một AI Agent hỏng bằng một NUC mới (khắc phục sự cố)

Thay thế thiết bị trong một bước: liên kết NUC thay thế (vị trí đường hầm, bí mật, biến balena, dữ liệu khởi tạo sao lưu), chuyển sang tên, vị trí, lịch khởi động lại, cài đặt sao lưu, chặn truy cập và quyền MCP của thiết bị cũ, gán lại khóa chỉ mục ảnh chụp cũ cho thiết bị mới (để toàn bộ lịch sử sao lưu vẫn duyệt được), ngừng sử dụng bản đăng ký cũ (được đánh dấu replacedBy / replacedFrom), và, trừ khi `restore` là false, xếp hàng một lần khôi phục toàn bộ điểm khôi phục đã chọn từ kho sao lưu của thiết bị CŨ lên phần cứng mới. Hoạt động cả khi thiết bị cũ đã hỏng/ngoại tuyến; yêu cầu nhập tên thiết bị cũ để xác nhận. Chỉ trong cùng một cơ sở.

Tham số

club `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/devices/ph-ai-agent/replace/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/replace/{club} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Phân giải liên kết rút gọn QR của thiết bị Performance Hub thành liên kết sâu mà nó trỏ tới, để trình quét Thêm thiết bị có thể nhận diện loại thiết bị. Chỉ theo các máy chủ performancehub.co.

Tham số

url `string` (bắt buộc) Liên kết rút gọn đã quét

Điểm cuối

GET /api/devices/resolve-qr

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/resolve-qr \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Kiểm tra kết nối đến Unifi Controller của một cơ sở và kiểm tra thông tin xác thực có đúng không.

Tham số

facilityID `string` (bắt buộc) ID nội bộ của cơ sở mà bạn muốn kiểm tra kết nối unifi

Điểm cuối

GET /api/devices/testUnifiController/{facilityID}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/devices/testUnifiController/{facilityID} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật một thiết bị IoT thông thường với một cơ sở.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở mà bạn muốn cập nhật thiết bị. body `string` (bắt buộc) Đối tượng JSON chứa các tham số cập nhật.

Điểm cuối

PUT /api/devices/updateGenericDevice/{club}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/devices/updateGenericDevice/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê số lượng thỏa thuận còn tồn đọng và cần xử lý, dựa trên người dùng và các câu lạc bộ liên kết với người dùng đó

Điểm cuối

GET /api/agreements/agreements-outstanding

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agreements/agreements-outstanding \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê tất cả thỏa thuận có sẵn cho một câu lạc bộ

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. contracts-sort `string` (tùy chọn) Sắp xếp thỏa thuận theo date-effective hoặc alphabetical. Mặc định là date-effective. contracts-acknowledgement `string` (tùy chọn) Lọc thỏa thuận theo all, acknowledged hoặc unacknowledged. Mặc định là all. contracts-requirement `string` (tùy chọn) Lọc thỏa thuận theo all, signature, checkbox, popup hoặc none. Mặc định là all. contracts-status `string` (tùy chọn) Lọc thỏa thuận theo all, active hoặc archived. Mặc định là all.

Điểm cuối

GET /api/agreements/list-agreements/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/agreements/list-agreements/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Ký một thỏa thuận dựa trên ID của thỏa thuận đó.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ đang ký thỏa thuận. agreementid `string` (bắt buộc) ID của thỏa thuận đang được ký. body `string` (bắt buộc) Đối tượng JSON chứa thỏa thuận và các tham số cần thêm/tải lên hệ thống...

Điểm cuối

POST /api/agreements/sign/{club}/{agreementid}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/agreements/sign/{club}/{agreementid} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tóm tắt Model Router của cơ sở (cấu hình, số dư, chi tiêu).

Tham số

clubID `string` (bắt buộc) tz `string` (tùy chọn) Múi giờ IANA của người xem, dùng làm dự phòng cho khoảng chi tiêu theo ngày/tháng khi cơ sở không có dữ liệu múi giờ.

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/overview

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/overview \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Danh mục các mô hình có sẵn kèm trạng thái bật theo từng cơ sở (mặc định bật tất cả).

Tham số

clubID `string` (bắt buộc)

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/models

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/models \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Các guardrail có sẵn và mẫu thiết lập sẵn của PH.

Tham số

clubID `string` (bắt buộc)

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/guardrails

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/guardrails \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Các dịch vụ Model Router đã kết nối. Bao gồm các thiết bị AI Agent đã ghép nối, các agent bên ngoài được khai báo loại rõ ràng và dịch vụ Workflow của cơ sở. Cấu hình được chỉnh sửa qua PATCH /keys/{keyHash}.

Tham số

clubID `string` (bắt buộc) tz `string` (tùy chọn) Múi giờ IANA của người xem, dùng làm dự phòng cho khoảng chi tiêu theo ngày/tháng khi cơ sở không có dữ liệu múi giờ.

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/agents

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/agents \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Bật Model Router cho một cơ sở và cấp quyền truy cập suy luận.

Tham số

clubID `string` (bắt buộc)

Điểm cuối

POST /api/clubs/{clubID}/ai-credits/enable

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/enable \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật gói, danh sách mô hình được phép, guardrail, bộ lọc nội dung (ẩn/chặn bằng regex phía PH), giới hạn chi tiêu và cấu hình tự động nạp tiền.

Tham số

clubID `string` (bắt buộc)

Điểm cuối

PATCH /api/clubs/{clubID}/ai-credits/config

Yêu cầu mẫu

curl -X PATCH https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/config \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Đặt lại bộ đếm mức trần cứng trọn đời về 0 (lấy mức chi tiêu hiện tại làm mốc mới) và ghi kỳ đã đóng vào lịch sử.

Tham số

clubID `string` (bắt buộc)

Điểm cuối

POST /api/clubs/{clubID}/ai-credits/spend-limit/reset-total

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/spend-limit/reset-total \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lịch sử đặt lại mức trần cứng (mới nhất trước): mức trần, số đã chi và dấu thời gian của từng kỳ đã đóng.

Tham số

clubID `string` (bắt buộc)

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/spend-limit/history

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/spend-limit/history \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo khóa API phk_ mới cho cơ sở (văn bản thuần chỉ được trả về một lần). Chấp nhận các tùy chọn mức trần chi tiêu, danh sách mô hình được phép, guardrail, bộ lọc nội dung và giới hạn tốc độ rpmLimit/tpmLimit.

Tham số

clubID `string` (bắt buộc)

Điểm cuối

POST /api/clubs/{clubID}/ai-credits/keys

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/keys \
  -H "x-api-key: YOUR_API_KEY"

Cập nhật các trường có thể chỉnh sửa của khóa: nhãn, mức trần chi tiêu theo từng khóa, danh sách mô hình được phép, guardrail, bộ lọc nội dung và giới hạn tốc độ rpmLimit/tpmLimit (được đồng bộ với khóa).

Tham số

clubID `string` (bắt buộc) keyHash `string` (bắt buộc)

Điểm cuối

PATCH /api/clubs/{clubID}/ai-credits/keys/{keyHash}

Yêu cầu mẫu

curl -X PATCH https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/keys/{keyHash} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Nhật ký suy luận theo từng yêu cầu của cơ sở (trực tiếp, chỉ siêu dữ liệu).

Tham số

clubID `string` (bắt buộc) page `string` (tùy chọn) pageSize `string` (tùy chọn) status `string` (tùy chọn) model `string` (tùy chọn) provider `string` (tùy chọn) source `string` (tùy chọn) `key` hoặc `agent` keyHash `string` (tùy chọn) Lọc theo một khóa/agent duy nhất bằng keyHash PH của nó. q `string` (tùy chọn) Tìm kiếm văn bản tự do trên ID yêu cầu, nhãn khóa/agent, mô hình, nhà cung cấp, người dùng cuối. minutes `string` (tùy chọn) Khoảng thời gian dưới một ngày (ví dụ: Live=1440); ghi đè startDate/endDate. startTs `string` (tùy chọn) Thời điểm bắt đầu khoảng thời gian tính bằng giây epoch (nhấp để thu phóng); ghi đè minutes/dates. endTs `string` (tùy chọn) Thời điểm kết thúc khoảng thời gian tính bằng giây epoch (nhấp để thu phóng); ghi đè minutes/dates.

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/logs

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/logs \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Biểu đồ tần suất yêu cầu theo thời gian cho chế độ xem Logs. Dùng cùng bộ lọc như tuyến danh sách, nhưng được tổng hợp phía máy chủ thành các khoảng thời gian (số lần thành công/thất bại) để phản hồi luôn rất nhỏ bất kể khối lượng nhật ký. Kích thước khoảng được chọn tự động theo độ dài thời gian.

Tham số

clubID `string` (bắt buộc) status `string` (tùy chọn) model `string` (tùy chọn) provider `string` (tùy chọn) source `string` (tùy chọn) keyHash `string` (tùy chọn) q `string` (tùy chọn) minutes `string` (tùy chọn) startDate `string` (tùy chọn) endDate `string` (tùy chọn) startTs `string` (tùy chọn) endTs `string` (tùy chọn)

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/logs/histogram

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/logs/histogram \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Các khoảng phân tích mức sử dụng + tổng theo từng mô hình trong một phạm vi (trực tiếp).

Tham số

clubID `string` (bắt buộc) range `string` (tùy chọn) 24h | 7 | 30 | 90 | year | all (bị bỏ qua nếu có startDate/endDate) startDate `string` (tùy chọn) endDate `string` (tùy chọn) groupBy `string` (tùy chọn) model (mặc định) | key | source | provider | status: chiều dữ liệu cho các khoảng + nhóm subgroupBy `string` (tùy chọn) chiều dữ liệu thứ hai tùy chọn, lồng dưới mỗi nhóm (Explore) keyHash `string` (tùy chọn) bộ lọc chuyên sâu: giới hạn trong một khóa/agent duy nhất model `string` (tùy chọn) bộ lọc chuyên sâu: giới hạn trong một mô hình duy nhất provider `string` (tùy chọn) source `string` (tùy chọn) compare `string` (tùy chọn) đặt thành "prev" để trả về thêm groupsPrev (kỳ có độ dài bằng nhau liền trước)

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/stats

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/stats \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lịch hoạt động hằng ngày trong một năm gần nhất (kiểu GitHub, khoảng 53 tuần).

Tham số

clubID `string` (bắt buộc)

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/activity

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/activity \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trừ tiền vào thẻ thanh toán SaaS đã lưu để nạp tín dụng trả trước cho Model Router.

Tham số

clubID `string` (bắt buộc) body `object` (tùy chọn)

Điểm cuối

POST /api/clubs/{clubID}/ai-credits/topup

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/topup \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Hoàn tất giao dịch nạp tiền sau khi applet hoàn thành xác thực 3DS.

Tham số

clubID `string` (bắt buộc)

Điểm cuối

POST /api/clubs/{clubID}/ai-credits/topup/confirm

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/topup/confirm \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tóm tắt thẻ thanh toán SaaS đã lưu sẽ bị trừ tiền khi nạp tiền / tự động nạp tiền.

Tham số

clubID `string` (bắt buộc)

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/payment-method

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/payment-method \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Các giao dịch sổ cái của cơ sở, mới nhất trước. Có thể lọc theo loại (ví dụ: `types=topup,adjustment` cho lịch sử dịch chuyển tiền, hoặc `types=charge-reconcile` với `from`/`to` cho các khoản khấu trừ mức sử dụng của một tháng).

Tham số

clubID `string` (bắt buộc) limit `integer` (tùy chọn) Số hàng tối đa (mặc định 50, tối đa 200) types `string` (tùy chọn) Các loại giao dịch phân tách bằng dấu phẩy (topup, charge-reconcile, refund, adjustment, trueup-shortfall) from `integer` (tùy chọn) Chỉ các giao dịch có createdAt >= from (giây unix) to `integer` (tùy chọn) Chỉ các giao dịch có createdAt <= to (giây unix)

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/transactions

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/transactions \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Các tháng `YYYY-MM` riêng biệt (UTC, mới nhất trước) có ít nhất một giao dịch thuộc các loại được yêu cầu. Cung cấp dữ liệu cho danh sách thả xuống lọc năm/tháng để giao diện chỉ hiển thị những kỳ thực sự có dữ liệu.

Tham số

clubID `string` (bắt buộc) types `string` (tùy chọn) Các loại giao dịch phân tách bằng dấu phẩy (topup, charge-reconcile, refund, adjustment, trueup-shortfall)

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/transactions/available-periods

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/transactions/available-periods \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Biên lai thanh toán PDF mang thương hiệu cho một giao dịch Model Router.

Tham số

clubID `string` (bắt buộc) txId `string` (bắt buộc)

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/transactions/{txId}/receipt.pdf

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/transactions/{txId}/receipt.pdf \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Gói biên lai thanh toán PDF mang thương hiệu cho các giao dịch nạp tiền đã chọn, dưới dạng tệp ZIP. Mỗi ID phải là một giao dịch nạp tiền thuộc cơ sở; các khoản khấu trừ mức sử dụng và điều chỉnh của quản trị viên không có biên lai và sẽ bị từ chối.

Tham số

clubID `string` (bắt buộc) ids `string` (bắt buộc) Các ID giao dịch phân tách bằng dấu phẩy (tối đa 50)

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/transactions/receipts.zip

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/transactions/receipts.zip \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tổng hợp theo từng tháng dương lịch (UTC) các khoản khấu trừ mức sử dụng của cơ sở, mới nhất trước. Tháng hiện tại luôn được bao gồm và được gắn cờ `isCurrentMonth` (từ đầu tháng đến nay).

Tham số

clubID `string` (bắt buộc) months `integer` (tùy chọn) Khoảng thời gian xem lại tính theo tháng (mặc định 12, tối đa 24; bị bỏ qua khi đặt `year`) year `integer` (tùy chọn) Giới hạn dữ liệu tổng hợp trong một năm dương lịch UTC (ví dụ: 2026)

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/usage-statements

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/usage-statements \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Bảng sao kê mức sử dụng hằng tháng dạng PDF mang thương hiệu: tóm tắt các khoản khấu trừ mức sử dụng trong tháng (tổng phụ theo ngày + tổng cộng). Đây không phải là hóa đơn hay biên lai; các khoản khấu trừ mức sử dụng không thu bất kỳ khoản thanh toán nào.

Tham số

clubID `string` (bắt buộc) month `string` (bắt buộc) Tháng dương lịch UTC, `YYYY-MM`

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/usage-statements/{month}/statement.pdf

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/usage-statements/{month}/statement.pdf \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Các dòng khấu trừ mức sử dụng thô của một tháng dưới dạng CSV (ID giao dịch, dấu thời gian UTC, số tiền, số dư sau giao dịch, ảnh chụp tổng chi tiêu trọn đời): bản xuất chi tiết khớp với tổng của bảng sao kê tháng.

Tham số

clubID `string` (bắt buộc) month `string` (bắt buộc) Tháng dương lịch UTC, `YYYY-MM`

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/usage-statements/{month}/detail.csv

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/usage-statements/{month}/detail.csv \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tóm tắt mức sử dụng/chi tiêu của cơ sở (dữ liệu trực tiếp cùng sổ cái đã đối chiếu).

Tham số

clubID `string` (bắt buộc) tz `string` (tùy chọn) Múi giờ IANA của người xem, dùng làm dự phòng cho khoảng chi tiêu theo ngày/tháng khi cơ sở không có dữ liệu múi giờ.

Điểm cuối

GET /api/clubs/{clubID}/ai-credits/usage

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/usage \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liên kết/cập nhật một thiết bị AI Edge Processor với một câu lạc bộ

Tham số

body `string` (bắt buộc) Đối tượng JSON để cập nhật đăng ký thiết bị AI Edge Processor.

Điểm cuối

POST /api/ai-edge-processor/devices

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/ai-edge-processor/devices \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liên kết một thiết bị AI Edge Processor với một câu lạc bộ. Phân giải thiết bị ưu tiên theo siêu dữ liệu (tín hiệu heartbeat trực tiếp được ưu tiên), bổ sung hàng đăng ký nếu thiết bị chưa từng tự đăng ký và dọn dẹp các hàng đăng ký cũ còn sót lại từ phần cứng đã được cấp phát lại.

Tham số

body `string` (bắt buộc) Đối tượng JSON để cập nhật đăng ký thiết bị AI Edge Processor.

Điểm cuối

POST /api/ai-edge-processor/devices/associate

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/ai-edge-processor/devices/associate \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách các bản ghi tải lên bbox trong một câu lạc bộ

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/cctv/bbox-timeline/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/bbox-timeline/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Chỉ mục tìm kiếm cơ sở dữ liệu camera

Chuyển tiếp chỉ mục tìm kiếm camera-db công khai của tài liệu (nhà sản xuất, dòng sản phẩm, mẫu, tên gọi khác) được hộp thoại Find my camera sử dụng khi thêm camera mạng. Được lưu trong bộ nhớ đệm phía máy chủ trong 12 giờ.

Điểm cuối

GET /api/cctv/camera-db/search-index

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/camera-db/search-index \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Mẫu theo nhà sản xuất trong cơ sở dữ liệu camera

Chuyển tiếp các mẫu URL RTSP và giá trị mặc định của một nhà sản xuất từ cơ sở dữ liệu camera công khai của tài liệu. Slug được xác thực để ngăn path traversal. Được lưu trong bộ nhớ đệm phía máy chủ trong 12 giờ.

Tham số

slug `string` (bắt buộc) Slug của nhà sản xuất (ví dụ: hikvision)

Điểm cuối

GET /api/cctv/camera-db/manufacturers/{slug}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/camera-db/manufacturers/{slug} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách dữ liệu lượt check-in của một cơ sở

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ/cơ sở mà bạn muốn truy cập. startDate `string` (tùy chọn) Ngày bắt đầu theo định dạng YYYY-MM-DD endDate `string` (tùy chọn) Ngày kết thúc theo định dạng YYYY-MM-DD timezone `string` (tùy chọn) Múi giờ dùng để diễn giải ngày (mặc định Australia/Brisbane) nextToken `string` (tùy chọn) Token phân trang để lấy trang tiếp theo

Điểm cuối

GET /api/cctv/check-ins/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/check-ins/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Truy xuất cấu hình cho giao diện người dùng camera giám sát

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/cctv/config/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/config/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy cấu hình phân phối nội dung camera giám sát

Trả về miền nội dung mà các ứng dụng khách camera giám sát dùng để phân giải tài nguyên đa phương tiện. Miền được xác định bởi biến môi trường CONTENT_DOMAIN, nếu không có sẽ dùng giá trị mặc định theo môi trường (production phục vụ /cctv, các môi trường khác phục vụ /cctv-stg).

Điểm cuối

GET /api/cctv/content-config

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/content-config \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thay đổi cấu hình cho giao diện người dùng camera giám sát

Tham số

body `object` (bắt buộc) Đối tượng JSON của khối cấu hình mới cần thêm vào hệ thống.

Điểm cuối

PUT /api/cctv/config/:club/:section

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/cctv/config/:club/:section \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách các vùng bucket khả dụng cho cấu hình nhà cung cấp lưu trữ camera giám sát

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/cctv/bucket-region/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/bucket-region/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Đặt lại bộ sưu tập khuôn mặt chưa xác định

Đặt lại bộ sưu tập CompreFace chưa xác định của cơ sở bằng cách xóa tất cả đối tượng. Các bản ghi người trong DynamoDB, các lần phát hiện khuôn mặt và các khối dòng thời gian OpenSearch KHÔNG bị ảnh hưởng. Chỉ dữ liệu nhận diện khuôn mặt bên dưới bị xóa. Các hồ sơ ẩn mới sẽ được tạo tự động khi hệ thống xử lý các lần phát hiện mới từ camera.

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

DELETE /api/cctv/config/{facilityId}/unidentified-collection

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/config/{facilityId}/unidentified-collection \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy thông tin bộ sưu tập chưa xác định

Trả về số lượng đối tượng hiện tại trong bộ sưu tập CompreFace chưa xác định của cơ sở.

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/cctv/config/{facilityId}/unidentified-collection-info

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/config/{facilityId}/unidentified-collection-info \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm một camera mạng (camera OEM/IP) qua URL luồng (RTSP, HTTP, HTTPS)

Tham số

body `string` (bắt buộc) Đối tượng JSON để thêm một camera mạng.

Điểm cuối

POST /api/cctv/devices/add-network-camera

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/add-network-camera \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm hàng loạt camera mạng vào một Edge Processor

Đăng ký nhiều camera mạng RTSP/HTTP cho một Edge Processor, sau đó đẩy FEED_CONFIG một lần để thiết bị chỉ tải lại cấu hình một lần.

Tham số

body `object` (bắt buộc)

Điểm cuối

POST /api/cctv/devices/add-network-cameras

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/add-network-cameras \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liên kết/cập nhật một thiết bị với một câu lạc bộ

Tham số

body `string` (bắt buộc) Đối tượng JSON để cập nhật đăng ký thiết bị camera giám sát.

Điểm cuối

POST /api/cctv/devices

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liên kết một thiết bị với một câu lạc bộ

Tham số

body `string` (bắt buộc) Đối tượng JSON để cập nhật đăng ký thiết bị camera giám sát.

Điểm cuối

POST /api/cctv/devices/associate

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/associate \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Gửi một yêu cầu MQTT đến một UUID thiết bị cụ thể và chờ phản hồi (qua websocket) về các khả năng có sẵn của camera.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ sở hữu thiết bị mà bạn đang truy vấn. body `string` (bắt buộc) Đối tượng JSON chứa các tham số cập nhật.

Điểm cuối

POST /api/cctv/devices/list-camera-capabilities/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/list-camera-capabilities/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các đăng ký thiết bị

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/cctv/devices/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/devices/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa một camera mạng bằng cách đánh dấu là đã xóa và gỡ khỏi FEED_CONFIG của Edge Processor

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ sở hữu thiết bị. balenaUUID `string` (bắt buộc) UUID của camera mạng cần xóa.

Điểm cuối

DELETE /api/cctv/devices/remove-network-camera/{club}/{balenaUUID}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/devices/remove-network-camera/{club}/{balenaUUID} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lưu một phần/toàn bộ các khả năng camera đã cấu hình và áp dụng chúng cho thiết bị dưới dạng biến môi trường (qua balena)

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ sở hữu thiết bị mà bạn đang truy vấn. body `string` (bắt buộc) Đối tượng JSON chứa các tham số cập nhật.

Điểm cuối

POST /api/cctv/devices/save-camera-capabilities/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/save-camera-capabilities/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lưu mặt nạ chuyển động (nếu đã cấu hình) cho camera và áp dụng cho thiết bị dưới dạng biến môi trường (qua balena)

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ sở hữu thiết bị mà bạn đang truy vấn. body `string` (bắt buộc) Đối tượng JSON của mặt nạ camera.

Điểm cuối

POST /api/cctv/devices/save-camera-mask/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/save-camera-mask/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Gửi một lệnh v4l2 cụ thể (chẳng hạn như độ sáng hoặc độ tương phản) đến thiết bị vật lý

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ sở hữu thiết bị mà bạn đang truy vấn. body `string` (bắt buộc) Đối tượng JSON chứa các tham số cập nhật.

Điểm cuối

POST /api/cctv/devices/set-camera-capability/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/set-camera-capability/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Kiểm tra URL luồng của camera mạng

Gửi lệnh kiểm tra đến một Edge Processor để xác thực URL luồng camera bằng ffprobe

Nội dung yêu cầu

Điểm cuối

POST /api/cctv/devices/test-stream

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/test-stream \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Xóa vĩnh viễn một bản ghi phát hiện khuôn mặt khỏi cơ sở dữ liệu. Được dùng để xóa các mục theo dõi không khớp hoặc không chính xác khỏi nhật ký hoạt động của một người.

Tham số

club `string` (bắt buộc) fdID `string` (bắt buộc)

Điểm cuối

DELETE /api/cctv/face-detections/:club/:fdID

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/face-detections/:club/:fdID \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách dữ liệu phát hiện khuôn mặt của một người

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. personID `string` (bắt buộc) ID của người trong hệ thống nhận dạng khuôn mặt

Điểm cuối

GET /api/cctv/face-detections/:club/:personID

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/face-detections/:club/:personID \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về các lần phát hiện khuôn mặt tham chiếu đến một ảnh cắt người cho trước, được truy vấn qua GSI personCropImage.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. personCropImage `string` (bắt buộc) URL ảnh cắt người được lưu trong bản ghi phát hiện khuôn mặt. limit `string` (tùy chọn) Số lần phát hiện tối đa cần trả về. nextToken `string` (tùy chọn) Token phân trang từ một phản hồi trước đó.

Điểm cuối

GET /api/cctv/face-detections-by-person-crop-image/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/face-detections-by-person-crop-image/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách dữ liệu phát hiện khuôn mặt của một câu lạc bộ, được nhóm theo khoảng thời gian so với thời điểm hiện tại

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/cctv/face-detections/:club/timeline

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/face-detections/:club/timeline \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách dữ liệu phát hiện khuôn mặt của một câu lạc bộ

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/cctv/face-detections/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/face-detections/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm kiếm các khối dòng thời gian phát hiện khuôn mặt trong một cơ sở bằng OpenSearch

Tham số

facilityId `string` (bắt buộc) ID nội bộ của cơ sở cần tìm kiếm timezone `string` (bắt buộc) Múi giờ IANA để chuyển đổi ngày (ví dụ: Pacific/Auckland) startDate `string` (tùy chọn) Bộ lọc ngày bắt đầu (YYYY-MM-DD), được chuyển đổi thành startUnix theo múi giờ endDate `string` (tùy chọn) Bộ lọc ngày kết thúc (YYYY-MM-DD), được chuyển đổi thành endUnix theo múi giờ personId `string` (tùy chọn) Lọc theo một ID người cụ thể query `string` (tùy chọn) Tìm kiếm văn bản tự do (ví dụ: tên người) limit `string` (tùy chọn) Số kết quả mỗi trang (mặc định 20, tối đa 100) filters `string` (tùy chọn) Đối tượng bộ lọc được mã hóa JSON (ví dụ: {"matchType":"identified"}) sortBy `string` (tùy chọn) Trường dùng để sắp xếp (startUnix, endUnix, created). Mặc định là endUnix. page `string` (tùy chọn) Số trang để phân trang (mặc định 1) sortOrder `string` (tùy chọn) Chiều sắp xếp (asc hoặc desc). Mặc định là desc.

Điểm cuối

GET /api/cctv/search/face-detections/timeline-blocks/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/search/face-detections/timeline-blocks/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách báo cáo về cơ sở của câu lạc bộ

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/cctv/facility/:club/reports

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/facility/:club/reports \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Kích hoạt tạo bản đồ nhiệt theo yêu cầu. Gọi cùng logic Starter mà cron theo lịch sử dụng, nhưng cho phép nhắm đến một cơ sở, ngày/giờ và tập hợp các kỳ cụ thể. Khi được gọi mà không có nội dung yêu cầu, hoạt động giống hệt cron: quét tất cả các cơ sở đủ điều kiện và đưa mọi thiết bị vào hàng đợi.

Nội dung yêu cầu

Điểm cuối

POST /api/cctv/heatmaps/generate

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/heatmaps/generate \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Phân giải vị trí của một ảnh PNG bản đồ nhiệt theo khoảng thời gian trượt đã được ghép cho một thiết bị. Chỉ trả về siêu dữ liệu JSON; dữ liệu PNG nằm trên miền nội dung, frontend tạo URL theo dạng: `${contentDomain}/cctv/${storageService}/${region}/${filePath}?s=${token}` Thứ tự phân giải: 1. Tìm thấy trong chỉ mục DynamoDB `composed#…` → trả về ngay (~10 ms). 2. Wasabi HEAD trên khóa bộ nhớ đệm xác định. Nếu tìm thấy, ghi một hàng chỉ mục bổ sung và trả về. 3. Dự phòng dữ liệu cũ: có bất kỳ bản ghi đã ghép nào cho bộ (thiết bị, phạm vi, giờ) này, kể cả từ một ngày khác. Được trả về ngay với `cache: 'HIT-STALE'` để FE có thể hiển thị *một nội dung nào đó*. Một lần ghép mới được kích hoạt bất đồng bộ. 4. Đường lạnh: hoàn toàn không có bản ghi nào. Lambda ghép được đưa vào hàng đợi qua `InvocationType: 'Event'` và điểm cuối trả về `202 { cache: 'PENDING' }`. FE thăm dò cho đến khi có bản ghi (thường là 3-5 giây). Xử lý ngày hôm nay: khi `endDate` là "hôm nay" theo giờ địa phương của cơ sở, điểm cuối sẽ phục vụ ảnh PNG của hôm qua; các lát dữ liệu của hôm nay vẫn đang được cron Starter ghi và một lần ghép mới sẽ không đầy đủ. Phản hồi lặp lại `endDate` được yêu cầu và bao gồm `endDateUsed` (= hôm qua). Enum `cache`: - `HIT`: được phục vụ từ chỉ mục DDB cho ngày được yêu cầu. - `HIT-FALLBACK`: yêu cầu ngày hôm nay; phục vụ hàng chỉ mục của hôm qua. - `HIT-BACKFILL`: không có trong DDB nhưng Wasabi có ảnh PNG; hàng vừa được ghi. - `HIT-FALLBACK-BACKFILL`: bổ sung dữ liệu cho phương án dự phòng hôm qua. - `HIT-STALE`: không có bản ghi cho ngày được yêu cầu nhưng có bản ghi từ ngày khác cho bộ này; được phục vụ ngay và một lần ghép mới được đưa vào hàng đợi chạy nền. - `PENDING`: hoàn toàn không có bản ghi; đã đưa lần ghép vào hàng đợi. FE nên thăm dò. Phản hồi là `202 Accepted`, không có `filePath`.

Tham số

facilityId `string` (bắt buộc) deviceUUID `string` (bắt buộc) Thiết bị cần ghép ảnh. Việc ghép được thực hiện theo từng thiết bị. hour `integer` (bắt buộc) Giờ trong ngày (0–23) cần ghép trên toàn bộ khoảng thời gian xem lại. endDate `string` (tùy chọn) Ngày cuối cùng trong khoảng thời gian (YYYY-MM-DD). Mặc định là hôm nay (múi giờ của cơ sở). range `string` (tùy chọn) Khoảng thời gian xem lại. Phải là một trong các phạm vi trong danh sách cho phép. nocache `integer` (tùy chọn) Đặt thành `1` để bỏ qua các lớp bộ nhớ đệm DDB + HEAD và buộc ghép mới.

Điểm cuối

GET /api/cctv/heatmaps/hourly/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/heatmaps/hourly/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm những giờ trong ngày có bản ghi lát dữ liệu `1h` cho một thiết bị trong khoảng thời gian xem lại trượt. Frontend dùng thông tin này để điền bộ chọn giờ cùng với bộ chọn ngày + phạm vi trước khi gọi điểm cuối ghép ảnh (`/api/cctv/heatmaps/hourly/...`). Ví dụ: `GET /api/cctv/heatmaps/query-hourly/Birkdale?deviceUUID=abc123&endDate=2026-04-16&range=30d` Bên trong: một truy vấn phạm vi DynamoDB trên `cctvheatmaps` (`sk BETWEEN 1h#{start}-00 AND 1h#{end}-23`), được nhóm theo giờ. Trả về một mục cho mỗi giờ có ít nhất một lát dữ liệu, bao gồm một ảnh JPEG tham chiếu đại diện (lấy từ ngày gần nhất trong khoảng thời gian; ảnh tham chiếu được dùng chung theo từng thiết bị mỗi ngày).

Tham số

facilityId `string` (bắt buộc) deviceUUID `string` (bắt buộc) Thiết bị cần truy vấn. Các lát dữ liệu theo giờ được lưu theo từng thiết bị. endDate `string` (tùy chọn) Ngày cuối cùng trong khoảng thời gian (YYYY-MM-DD). Mặc định là hôm nay (múi giờ của cơ sở). range `string` (tùy chọn) Khoảng thời gian xem lại. Phải là một trong các phạm vi trong danh sách cho phép.

Điểm cuối

GET /api/cctv/heatmaps/query-hourly/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/heatmaps/query-hourly/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Truy vấn các bản ghi bản đồ nhiệt đã được tạo sẵn cho một cơ sở. **Tất cả bản ghi cho một loại kỳ:** - `/api/cctv/heatmaps/Birkdale?periodType=1y` - `/api/cctv/heatmaps/Birkdale?deviceUUID=abc123&periodType=1d` **Khoảng ngày, một loại kỳ:** - `/api/cctv/heatmaps/Birkdale?periodType=1d&from=2026-03-01&to=2026-03-31` - `/api/cctv/heatmaps/Birkdale?periodType=6h&from=2026-03-31&to=2026-03-31` **Khoảng ngày, tất cả các loại kỳ áp dụng được (bỏ qua periodType):** - `/api/cctv/heatmaps/Birkdale?from=2026-03-01&to=2026-03-31` Trả về các bản ghi theo năm, nửa năm, quý, v.v. cho đến 6h có trùng với khoảng đã cho. **Tại một thời điểm, cả 9 loại kỳ cho một thiết bị:** - `/api/cctv/heatmaps/Birkdale?deviceUUID=abc123&date=2026-03-15T14:30` Trả về tối đa 9 bản ghi (1y, 6m, 3m, 2m, 1m, 1w, 1d, 12h, 6h).

Tham số

facilityId `string` (bắt buộc) Mã định danh của cơ sở. deviceUUID `string` (tùy chọn) Truy vấn một thiết bị cụ thể. Nếu bỏ qua, truy vấn trên tất cả thiết bị (GSI). periodType `string` (tùy chọn) Lọc theo một loại kỳ duy nhất. Nếu bỏ qua khi có from/to, truy vấn tất cả các loại. from `string` (tùy chọn) Ngày bắt đầu (yyyy-mm-dd). Phải dùng cùng với `to`. to `string` (tùy chọn) Ngày kết thúc (yyyy-mm-dd). Phải dùng cùng với `from`. date `string` (tùy chọn) Tra cứu tại một thời điểm (yyyy-mm-dd hoặc yyyy-mm-ddTHH:mm). Yêu cầu deviceUUID. Trả về một bản ghi cho mỗi loại kỳ.

Điểm cuối

GET /api/cctv/heatmaps/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/heatmaps/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy hình thu nhỏ của luồng trực tiếp từ thiết bị

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ. deviceId `string` (bắt buộc) ID nội bộ của thiết bị camera giám sát.

Điểm cuối

GET /api/cctv/livestream/:club/thumbnail/:deviceId

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/livestream/:club/thumbnail/:deviceId \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thông báo cho hệ thống camera giám sát rằng bạn sắp xem một luồng trực tiếp

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ. deviceId `string` (bắt buộc) ID nội bộ của thiết bị camera giám sát.

Điểm cuối

POST /api/cctv/livestream/:club/iswatching/:deviceId

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/livestream/:club/iswatching/:deviceId \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Phê duyệt một kết quả đối sánh giao nhau

Đặt trạng thái đối sánh thành confirmed và ghi lại người xét duyệt.

Tham số

club `string` (bắt buộc) matchId `string` (bắt buộc)

Điểm cuối

POST /api/cctv/matching/{club}/detail/{matchId}/approve

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId}/approve \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy một kết quả đối sánh giao nhau kèm chi tiết lượt ghé thăm

Trả về bản ghi đối sánh và chi tiết thời gian theo từng lượt ghé thăm.

Tham số

club `string` (bắt buộc) matchId `string` (bắt buộc)

Điểm cuối

GET /api/cctv/matching/{club}/detail/{matchId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các kết quả đối sánh giao nhau của một cơ sở

Trả về các kết quả đối sánh được phân trang và lọc theo trạng thái.

Tham số

club `string` (bắt buộc) status `string` (tùy chọn) limit `integer` (tùy chọn) nextToken `string` (tùy chọn)

Điểm cuối

GET /api/cctv/matching/{club}/list

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/matching/{club}/list \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Từ chối một kết quả đối sánh giao nhau

Đặt trạng thái đối sánh thành rejected và ghi lại người xét duyệt.

Tham số

club `string` (bắt buộc) matchId `string` (bắt buộc)

Điểm cuối

POST /api/cctv/matching/{club}/detail/{matchId}/reject

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId}/reject \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy số lượng tóm tắt của việc đối sánh giao nhau

Trả về số lượng kết quả đối sánh của cơ sở, được nhóm theo trạng thái.

Tham số

club `string` (bắt buộc) ID cơ sở

Điểm cuối

GET /api/cctv/matching/{club}/summary

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/matching/{club}/summary \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Đọc trạng thái của một thao tác "upsert identified person" đang thực hiện (bao gồm tạo và chỉnh sửa). Đọc hàng trực tiếp từ bảng `people-ops` thuộc cctv-rekognition-api; không qua Lambda trung gian. Được frontend camera giám sát dùng để thăm dò tiến độ sau POST /api/cctv/people/{facility}/identified. Đường dẫn này nằm cùng cấp với `/cctv/people/...` (không lồng bên dưới) để express router không thể nhầm `operationId` thành `:personID` trên `/cctv/people/:club/:personID`. Xem thứ tự glob của createAPIRouter. Trả về giá trị tạm `pending` khi Lambda upsertIdentifiedPerson chưa ghi mục giai đoạn đầu tiên (khoảng thời gian khởi động nguội). Hook thăm dò của FE xử lý giá trị tạm và pending như nhau, nhờ đó giữ hợp đồng ổn định cho bên gọi.

Tham số

operationId `string` (bắt buộc)

Điểm cuối

GET /api/cctv/people-operations/{operationId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/people-operations/{operationId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm một ảnh khuôn mặt (từ một lần phát hiện theo dõi hiện có) vào đối tượng nhận diện CompreFace của người đó và lưu một tham chiếu trong bảng ảnh ẩn. KHÔNG tải ảnh lên Wasabi vì ảnh đã có sẵn ở đó dưới dạng ảnh chụp phát hiện khuôn mặt.

Tham số

club `string` (bắt buộc) personID `string` (bắt buộc) body `string` (bắt buộc)

Điểm cuối

POST /api/cctv/people/:club/:personID/add-face

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/:club/:personID/add-face \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm ảnh ẩn vào bản ghi của một người

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. personID `string` (bắt buộc) ID bản ghi của người body `string` (bắt buộc) Đối tượng JSON của khối cấu hình mới cần thêm vào hệ thống.

Điểm cuối

POST /api/cctv/people/:club/shadow-photos/:personID

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/:club/shadow-photos/:personID \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Truy vấn ảnh ẩn của một người

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. personID `string` (bắt buộc) ID bản ghi của người

Điểm cuối

GET /api/cctv/people/:club/shadow-photos/:personID

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/:club/shadow-photos/:personID \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa vĩnh viễn một bản ghi ảnh ẩn khỏi CCTVShadowPhotosTable và xóa khuôn mặt tương ứng khỏi CompreFace (nếu có lưu faceId).

Tham số

club `string` (bắt buộc) personID `string` (bắt buộc) id `string` (bắt buộc) ID bản ghi ảnh ẩn (khóa chính)

Điểm cuối

DELETE /api/cctv/people/:club/shadow-photos/:personID/:id

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/people/:club/shadow-photos/:personID/:id \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa các tham chiếu và bản ghi rekognition liên quan theo personID

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. personID `string` (bắt buộc) ID duy nhất của người trong hệ thống camera giám sát.

Điểm cuối

DELETE /api/cctv/people/:club/:personID

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/people/:club/:personID \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về bản ghi một người của câu lạc bộ

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. personID `string` (bắt buộc) ID cơ sở dữ liệu của người.

Điểm cuối

GET /api/cctv/people/:club/:personID

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/:club/:personID \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy các khu vực truy cập khớp với hồ sơ hội viên của một người

Phân giải loại hội viên, thẻ và gói hội viên của người đó, sau đó trả về các khu vực truy cập thực (origin=membership-plan, không bị gộp) khớp với các quy tắc bao gồm/loại trừ. accessRestriction của mỗi khu vực được rút gọn để chỉ còn các quy tắc khớp với người đó. Camera của khu vực con được gộp vào khu vực cha.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở personID `string` (bắt buộc) ID người từ bảng người của camera giám sát

Điểm cuối

GET /api/cctv/people/{club}/{personID}/allowed-zones

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/{club}/{personID}/allowed-zones \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về trạng thái hiện tại của một tác vụ hợp nhất, bao gồm kết quả theo từng nguồn. Thăm dò điểm cuối này mỗi 3-5 giây khi trạng thái là IN_PROGRESS.

Tham số

club `string` (bắt buộc) mergeJobID `string` (bắt buộc)

Điểm cuối

GET /api/cctv/people/:club/merge-status/:mergeJobID

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/:club/merge-status/:mergeJobID \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Bắt đầu hợp nhất chạy nền nhiều hồ sơ người chưa xác định thành một hồ sơ được giữ lại. Phản hồi 202 ngay lập tức kèm mergeJobID. Thăm dò /merge-status/:mergeJobID để theo dõi tiến độ.

Tham số

club `string` (bắt buộc) body `string` (bắt buộc)

Điểm cuối

POST /api/cctv/people/:club/merge-unidentified

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/:club/merge-unidentified \
  -H "x-api-key: YOUR_API_KEY"

Thêm một khuôn mặt vào bộ sưu tập danh sách đen của một cơ sở

Tham số

facilityId `string` (bắt buộc) ID nội bộ của cơ sở

Nội dung yêu cầu

Điểm cuối

POST /api/cctv/people/{facilityId}/blacklist

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/{facilityId}/blacklist \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Thêm mới hoặc cập nhật một người đã xác định trong cơ sở: tạo bản ghi mới hoặc cập nhật bản ghi hiện có. Chuyển tiếp đến Lambda upsertIdentifiedPerson, Lambda này ghi bản ghi người, tải mọi ảnh được cung cấp lên Wasabi và lập chỉ mục lại khuôn mặt trong CompreFace. Khi `isNewRecord` là true (mặc định), Lambda chạy nhánh tạo (cctvPeople.save) và một `personID` sẽ được tạo nếu không được cung cấp. Khi `isNewRecord` là false, Lambda chạy nhánh cập nhật (cctvPeople.update); `personID` là bắt buộc và phải xác định một bản ghi hiện có.

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/cctv/people/{facilityId}/identified

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/{facilityId}/identified \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Cập nhật tập hợp các trường đối tác tùy chọn được đồng bộ vào bảng người của camera giám sát cho một cơ sở.

Tham số

facilityId `string` (bắt buộc) ID nội bộ của cơ sở

Nội dung yêu cầu

Điểm cuối

PUT /api/cctv/people/{facilityId}/sync-fields

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/cctv/people/{facilityId}/sync-fields \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Trả về danh sách dữ liệu người của một câu lạc bộ

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/cctv/people/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm kiếm người trong một cơ sở bằng ảnh khuôn mặt. Gọi Lambda imageFaceSearch của cctv-rekognition-api với ảnh base64 đã tải lên và ID cơ sở từ đường dẫn. Trả về các kết quả khớp được xếp hạng cùng bản tóm tắt thuộc tính DeepFace.

Tham số

club `string` (bắt buộc) ID cơ sở / câu lạc bộ body `string` (bắt buộc)

Điểm cuối

POST /api/cctv/people/{club}/search-by-face

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/{club}/search-by-face \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm kiếm người trong một cơ sở bằng OpenSearch

Tham số

facilityId `string` (bắt buộc) ID nội bộ của cơ sở cần tìm kiếm query `string` (tùy chọn) Từ khóa tìm kiếm (ví dụ: tên) page `string` (tùy chọn) Số trang (mặc định 1) limit `string` (tùy chọn) Số kết quả mỗi trang (mặc định 20, tối đa 100) filters `string` (tùy chọn) Đối tượng bộ lọc được mã hóa JSON (ví dụ: {"membershipStatus":"active"}) sortBy `string` (tùy chọn) Trường dùng để sắp xếp (created, lastName, firstName, membershipUpdatedOn). Mặc định là created. sortOrder `string` (tùy chọn) Chiều sắp xếp (asc hoặc desc). Mặc định là desc.

Điểm cuối

GET /api/cctv/search/people/:facilityId

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/search/people/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật các mục phát hiện khuôn mặt với personID mới và liên kết các bản ghi rekognition

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. body `string` (bắt buộc) Đối tượng JSON của khối cấu hình mới cần thêm vào hệ thống.

Điểm cuối

POST /api/cctv/people/:club/validate

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/:club/validate \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về một đối tượng chứa tất cả bộ lọc có sẵn cho dữ liệu bản ghi camera giám sát của một câu lạc bộ

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/cctv/recordings/filters/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/recordings/filters/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Phát trực tuyến bản ghi.

Điểm cuối

GET /api/cctv/recordings/:club/:dir/:filename

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/recordings/:club/:dir/:filename \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật thông tin về bản ghi.

Điểm cuối

PUT /api/cctv/recordings/:club/:dir/:filename

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/cctv/recordings/:club/:dir/:filename \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về bản tóm tắt dữ liệu bản ghi camera giám sát của một câu lạc bộ

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/cctv/recordings/:club/summary

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/recordings/:club/summary \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách dữ liệu bản ghi camera giám sát của một câu lạc bộ dựa trên khoảng thời gian so với thời điểm hiện tại

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/cctv/recordings/:club/timeline

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/recordings/:club/timeline \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách dữ liệu bản ghi camera giám sát của một câu lạc bộ

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/cctv/recordings/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/recordings/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Các bản ghi sẽ tự động bị xóa sau một khoảng thời gian định sẵn; hãy dùng chức năng này để lưu giữ bản ghi

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

POST /api/cctv/recordings/:club/:action

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/recordings/:club/:action \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm kiếm ảnh chụp báo cáo của một cơ sở trong một khoảng ngày

Tham số

facilityId `string` (bắt buộc) ID nội bộ của cơ sở startDate `string` (bắt buộc) Bộ lọc ngày bắt đầu (YYYY-MM-DD) endDate `string` (bắt buộc) Bộ lọc ngày kết thúc (YYYY-MM-DD) deviceIds `string` (tùy chọn) Danh sách ID camera/thiết bị phân tách bằng dấu phẩy để lọc view `string` (tùy chọn) Chế độ xem báo cáo thay thế cần tính toán (được chuyển tiếp đến Lambda báo cáo)

Điểm cuối

GET /api/cctv/reports/search-report-snapshots/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/reports/search-report-snapshots/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm kiếm vector trên nội dung đa phương tiện camera giám sát đã được lập chỉ mục của một cơ sở. Phản hồi bằng một text/event-stream được chuyển tiếp từ Lambda searchAnything, để ứng dụng khách có thể hiển thị tiến độ trong khi một container nguội tải bộ mã hóa. Các sự kiện là `status`, sau đó là `result` hoặc `error`. Có ba cách truy vấn, hai trong số đó dùng phương thức này. Gửi `query` để tìm kiếm bằng văn bản tự do. Gửi `seedIndex` + `seedKey` để tìm kiếm theo ví dụ ("tìm thêm kết quả tương tự") bằng vector của một hàng đã có trong chỉ mục; đây là cách tìm thêm những kết quả giống với kết quả người dùng đang xem. Để tìm kiếm bằng một hình ảnh người dùng có, hãy `POST` dữ liệu ảnh đến cùng đường dẫn này. Gửi từ ngữ kèm hình ảnh để dùng cái này thu hẹp cái kia: **văn bản lọc, hình ảnh xếp hạng**. Các ứng viên đến từ seed, từ ngữ quyết định ứng viên nào được giữ lại và độ tương đồng hình ảnh quyết định thứ tự; nhờ đó kết quả vẫn giống với hình ảnh, còn từ ngữ loại bỏ những kết quả không khớp. Hai yếu tố này không bao giờ được trộn thành một vector, đó là lý do `queryKind` vẫn là `similar` đối với tìm kiếm kết hợp; sự có mặt của `query` trong kết quả cho biết bộ lọc văn bản đã được áp dụng. Tìm kiếm kết hợp khá thường xuyên không trả về kết quả nào, và bạn nên coi đó là một kết quả riêng biệt: `perIndex..textGated` đếm các ứng viên khớp với hình ảnh nhưng không khớp với từ ngữ, vì vậy một trang trống có thể được giải thích là "hãy bỏ bớt từ ngữ" thay vì "hãy thử hình ảnh khác". Tìm kiếm theo seed không kèm từ ngữ không tải bộ mã hóa nào, nên không bao giờ chịu độ trễ khởi động nguội; thêm từ ngữ sẽ mất lợi thế đó. Dù theo cách nào, mặc định hệ thống đều tìm kiếm trên mọi chỉ mục: các vector ảnh cắt, bản ghi và timelapse dùng chung một không gian, nên một ảnh cắt người có thể tìm được cảnh quay khớp. Điểm của tìm kiếm theo seed cao hơn nhiều so với điểm văn bản (so sánh ảnh với ảnh không vượt qua khoảng cách giữa các phương thức) và được lọc bởi một ngưỡng riêng, vẫn chưa được hiệu chỉnh; `result.queryKind` cho biết bạn đang đọc thang điểm nào, và không bao giờ được so sánh điểm của thang này với thang kia. Mặc định tìm kiếm trên mọi chỉ mục và trả về một danh sách hợp nhất, sắp xếp theo điểm; mỗi kết quả mang `index` và `kind` để bên gọi phân biệt kết quả hình ảnh với kết quả video (loại sau có thêm `offsetMs`). Các chỉ mục không có bảng cho cơ sở được báo cáo trong `skipped` thay vì gây lỗi. Các kết quả dưới ngưỡng liên quan đã hiệu chỉnh của từng chỉ mục sẽ bị loại bỏ, nên một truy vấn không có kết quả khớp thực sự sẽ trả về danh sách trống thay vì những kết quả vô nghĩa nhưng có vẻ chắc chắn; `perIndex` báo cáo mỗi chỉ mục đã đóng góp gì và lý do. Có thể thu hẹp kết quả theo thời gian ghi hình và theo camera. Nên dùng `cameraId` thay vì `camera`: đó là balenaUUID của camera, giá trị duy nhất mà mọi chỉ mục đều lưu giống hệt nhau, nên một bộ lọc duy nhất có thể thu hẹp tất cả chỉ mục. Bộ lọc mà một chỉ mục không thể đáp ứng sẽ được báo cáo trong `perIndex..filtersIgnored` và chỉ mục đó được tìm kiếm mà không thu hẹp, thay vì bị loại khỏi tìm kiếm. Kết quả bản ghi là **một kết quả cho mỗi đoạn clip, không phải một kết quả cho mỗi khung hình khớp**: khung hình được lấy mẫu mỗi 2 giây, nên một đối tượng nán lại sẽ khớp với mười khung hình gần như giống hệt nhau của cùng một bản ghi. Mỗi đoạn clip trả về khung hình tốt nhất, cùng với `matchCount` và `offsetsMs` liệt kê mọi thời điểm khớp bên trong clip, có thể dùng trực tiếp làm điểm tua. Ảnh cắt người không bao giờ bị gộp lại, vì hai ảnh cắt của cùng một người là hai lần nhìn thấy riêng biệt.

Tham số

facilityId `string` (bắt buộc) ID nội bộ của cơ sở cần tìm kiếm query `string` (tùy chọn) Mô tả bằng văn bản tự do về nội dung cần tìm. Bắt buộc trừ khi gửi warm=1 hoặc một seed. Khi kết hợp với seed, nội dung này không còn là đối tượng được xếp hạng mà trở thành bộ lọc trên các ứng viên của seed, loại bỏ những ứng viên có điểm văn bản thấp hơn ngưỡng liên quan của chỉ mục. seedIndex `string` (tùy chọn) Tìm kiếm theo ví dụ thay vì theo văn bản: chỉ mục chứa hàng seed (person-crops, recording-frames, timelapse-frames). Đây là `index` của kết quả mà người dùng đã nhấp vào. Phải được gửi cùng seedKey. seedKey `string` (tùy chọn) `key` của hàng seed, lấy nguyên văn từ kết quả. Seed bị loại khỏi kết quả của chính nó; với một bản ghi, điều đó có nghĩa là toàn bộ đoạn clip, vì các khung hình khác cách nhau 2 giây và gần như giống hệt nhau. seedFrameId `string` (tùy chọn) Bắt buộc khi seedIndex là recording-frames: chỉ mục đó lưu một hàng cho mỗi khung hình được lấy mẫu và tất cả đều dùng chung khóa của đoạn clip, nên chỉ riêng khóa chỉ xác định một đoạn clip chứ không phải một thời điểm. Gửi `frameId` của kết quả. Các hàng cũ hơn không có giá trị này; khi đó hãy gửi seedOffsetMs. seedOffsetMs `string` (tùy chọn) Mã định danh khung hình dự phòng cho các seed recording-frames có hàng được tạo trước khi có `frame_id`. Gửi `offsetMs` của kết quả. Bị bỏ qua khi có seedFrameId. warm `string` (tùy chọn) Khởi động sẵn một container Lambda mà không chạy tìm kiếm. Gọi khi tải trang. warmTarget `string` (tùy chọn) Bộ mã hóa mà `warm` tải: `text` (mặc định), `image` hoặc `both`. Nhánh thị giác có dung lượng 355 MB so với 283 MB của nhánh văn bản, nên việc khởi động sẵn nhánh này là tùy chọn; chỉ yêu cầu `image` khi người dùng đã thực sự chuẩn bị một hình ảnh, không phải khi tải trang. index `string` (tùy chọn) Các tập dữ liệu cần tìm kiếm, phân tách bằng dấu phẩy: person-crops, recording-frames, timelapse-frames. Kết quả được hợp nhất thành một danh sách sắp xếp theo điểm. Mặc định cả ba đều được tìm kiếm; truyền một danh sách cụ thể để thu hẹp. timelapse-frames bao gồm các camera không ghi hình mà chỉ tạo một khung hình mỗi phút, và ngưỡng liên quan của nó chưa được hiệu chỉnh. model `string` (tùy chọn) Bộ mã hóa dùng để truy vấn. Phải khớp với bộ mã hóa đã dùng để lập chỉ mục tập dữ liệu. limit `string` (tùy chọn) Số kết quả trả về cho mỗi chỉ mục (mặc định 50, tối đa 100); đây không phải tổng số, nên tìm kiếm cả ba chỉ mục có thể trả về gấp ba con số này. Với bản ghi, giá trị này đếm số đoạn clip chứ không phải số khung hình khớp. from `string` (tùy chọn) Chỉ khớp nội dung được ghi vào hoặc sau thời điểm này, tính bằng mili giây kể từ epoch. Lưu ý đây là thời gian ghi hình, không phải thời gian tải lên. to `string` (tùy chọn) Chỉ khớp nội dung được ghi trước thời điểm này (không bao gồm), tính bằng mili giây kể từ epoch. cameraId `string` (tùy chọn) Các balenaUUID camera phân tách bằng dấu phẩy để thu hẹp, tức trường `balenaUUID` của từng mục do /api/cctv/recordings/filters/:club trả về. Đây là bộ lọc camera được khuyến nghị: mọi chỉ mục đều lưu cùng giá trị này, nên một bộ lọc có thể thu hẹp tất cả. Lưu ý rằng chỉ những ảnh cắt có liên kết phát hiện khuôn mặt đã được phân giải mới mang giá trị này (hiện khoảng 1%), nên việc thu hẹp ảnh cắt theo camera sẽ trả về rất ít hoặc không có kết quả cho đến khi quá trình bổ sung dữ liệu ảnh cắt chạy; bản ghi có đầy đủ dữ liệu và được lọc chính xác. camera `string` (tùy chọn) Các tên camera phân tách bằng dấu phẩy để thu hẹp. Trên thực tế chỉ áp dụng cho bản ghi: person-crops lưu tên camera trống ở mọi hàng, nên bất kỳ giá trị nào ở đây đều loại trừ tất cả ảnh cắt. Nên dùng cameraId. cameraGroup `string` (tùy chọn) Các nhóm camera phân tách bằng dấu phẩy để thu hẹp. Có dữ liệu trên tất cả bản ghi nhưng chỉ khoảng 1% ảnh cắt, cùng nguyên nhân với cameraId. minScore `string` (tùy chọn) Ghi đè ngưỡng cosine theo từng chỉ mục dùng để lọc nhiễu. Bỏ qua trong môi trường production; mỗi chỉ mục có một giá trị mặc định đã hiệu chỉnh (và một giá trị riêng chưa hiệu chỉnh cho tìm kiếm theo seed). Truyền 0 để xem các láng giềng gần nhất chưa lọc khi gỡ lỗi mức độ liên quan.

Điểm cuối

GET /api/cctv/search/anything/:facilityId

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/search/anything/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm kiếm bằng một hình ảnh người dùng có, thay vì bằng từ ngữ hoặc bằng một kết quả đã hiển thị trên màn hình. Giống hệt GET ở mọi khía cạnh khác (cùng tham số truy vấn, cùng luồng sự kiện, cùng cấu trúc kết quả), nên phần này chỉ mô tả những điểm khác biệt. Gửi **dữ liệu byte gốc của tệp** làm nội dung yêu cầu với Content-Type `image/*`. Không thay đổi kích thước, cắt hoặc mã hóa lại ảnh trong trình duyệt trước: máy chủ áp dụng một cách thay đổi kích thước rất cụ thể (nén về 256x256 bằng nhân song tuyến có khử răng cưa) giống như khi tạo các vector đã lập chỉ mục, còn việc co giãn bằng canvas dùng một cách khác. Theo đo lường, sự thay thế đó lệch khoảng 0,93 cosine so với kết quả đúng, xa hơn cả khoảng cách giữa hai hình ảnh thực sự khác nhau; vì vậy kết quả được trả về với thứ hạng có vẻ hợp lý nhưng sai, mà không có lỗi nào. Giới hạn 4 MB là ràng buộc về truyền tải chứ không phải về chất lượng: dữ liệu byte được truyền bên trong payload gọi Lambda, vốn giới hạn ở 6 MB, và base64 làm tăng kích thước thêm một phần ba. Kết quả được chấm điểm theo kiểu ảnh với ảnh, nên `queryKind` là `image` và điểm nằm trên cùng thang cao hơn nhiều như tìm kiếm theo seed; không bao giờ so sánh được với điểm văn bản. Điểm thường thấp hơn *một chút* so với tìm kiếm theo seed tương đương: vector của seed do chính thiết bị ghi, còn ảnh tải lên được mã hóa lại tại đây bởi một công cụ khác, khiến nó lệch vài phần trăm so với vị trí mà thiết bị sẽ đặt. Theo đo lường, chất lượng kết quả vẫn tương đương dù vậy; chỉ là tập kết quả không giống hệt nhau. Thêm `query` sẽ lọc kết quả theo những từ ngữ đó, giống hệt như với seed. Gửi đồng thời seed *và* hình ảnh sẽ bị từ chối: cả hai đều là đối tượng được xếp hạng, nên việc kết hợp không có ý nghĩa. Đây là yêu cầu tốn kém nhất mà điểm cuối phục vụ. Một hình ảnh tải lên sẽ tải nhánh thị giác, và thêm từ ngữ sẽ tải cả nhánh văn bản, cả hai trên một container nguội. Gọi `warm=1&warmTarget=image` ngay khi người dùng chuẩn bị hình ảnh sẽ loại bỏ bước đó khỏi đường xử lý chính.

Tham số

facilityId `string` (bắt buộc) ID nội bộ của cơ sở cần tìm kiếm body `string` (bắt buộc) Dữ liệu byte hình ảnh thô, chưa chỉnh sửa, tối đa 4 MB query `string` (tùy chọn) Các từ ngữ tùy chọn để thu hẹp kết quả hình ảnh, loại bỏ những kết quả có điểm văn bản thấp hơn ngưỡng liên quan của chỉ mục.

Điểm cuối

POST /api/cctv/search/anything/:facilityId

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/search/anything/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về chi tiết lưu trữ và các dữ liệu chỉ số khác của camera giám sát tại câu lạc bộ

Điểm cuối

GET /api/cctv/storage-details/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/storage-details/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách các bản ghi tải lên timelapse của một câu lạc bộ

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/cctv/timelapse/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/timelapse/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các thao tác người dùng đã thực hiện trên bản ghi trong giao diện người dùng camera giám sát

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/cctv/ui/actions/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/ui/actions/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Ghi lại một thao tác người dùng đã thực hiện trên bản ghi trong giao diện người dùng camera giám sát

Tham số

body `string` (bắt buộc) Đối tượng JSON của khối cấu hình mới cần thêm vào hệ thống.

Điểm cuối

POST /api/cctv/ui/actions/:club

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/ui/actions/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy token người dùng cho giao diện người dùng camera giám sát

Tham số

club `string` (bắt buộc) ID câu lạc bộ

Điểm cuối

GET /api/cctv/ui/token/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/ui/token/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo token cho quyền truy cập tạm thời hoặc của khách

Tham số

club `string` (bắt buộc) Mã định danh duy nhất của câu lạc bộ. body `string` (bắt buộc) Đối tượng JSON chứa thông tin token cần cấp.

Điểm cuối

POST /api/cctv/token/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/cctv/token/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{
  "accessID": "00000000-0000-0000-0000-000000000014"
}

Trả về danh sách bản ghi token cho quyền truy cập tạm thời hoặc của khách

Tham số

club `string` (bắt buộc) Mã định danh duy nhất của câu lạc bộ.

Điểm cuối

GET /api/cctv/token/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/cctv/token/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy access token qua access ID

Tham số

accessID `string` (bắt buộc) ID của bản ghi token trong cơ sở dữ liệu.

Điểm cuối

POST /guest/cctv/token/:accessID

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/guest/cctv/token/:accessID \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa giờ truy cập của cơ sở

Tham số

facilityId `string` (bắt buộc) body `object` (bắt buộc) Đối tượng JSON của giờ truy cập mới.

Điểm cuối

DELETE /api/ai/computer-vision/access-hours/:facilityId

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/ai/computer-vision/access-hours/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách giờ truy cập của cơ sở

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/ai/computer-vision/access-hours/:facilityId

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/ai/computer-vision/access-hours/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật hoặc tạo giờ truy cập của cơ sở

Tham số

facilityId `string` (bắt buộc) body `object` (bắt buộc) Đối tượng JSON của giờ truy cập mới.

Điểm cuối

POST /api/ai/computer-vision/access-hours/:facilityId

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/ai/computer-vision/access-hours/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa một khu vực truy cập của cơ sở

Tham số

facilityId `string` (bắt buộc) body `object` (bắt buộc) Đối tượng JSON của khu vực truy cập mới.

Điểm cuối

DELETE /api/ai/computer-vision/access-zones/:facilityId

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/ai/computer-vision/access-zones/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách các khu vực truy cập của cơ sở

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/ai/computer-vision/access-zones/:facilityId

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/ai/computer-vision/access-zones/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật hoặc tạo một khu vực truy cập của cơ sở

Tham số

facilityId `string` (bắt buộc) body `object` (bắt buộc) Đối tượng JSON của khu vực truy cập mới.

Điểm cuối

POST /api/ai/computer-vision/access-zones/:facilityId

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/ai/computer-vision/access-zones/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về hợp của tất cả ID mô-đun quản trị trên các thương hiệu và cơ sở của một tổ chức, dưới dạng các đối tượng mô-đun.

Tham số

organisationId `string` (bắt buộc) ID tổ chức

Điểm cuối

GET /api/organisations/{organisationId}/admin-modules

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/organisations/{organisationId}/admin-modules \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách tất cả tổ chức

Tham số

includeBrands `string` (tùy chọn) Bao gồm các thương hiệu liên kết với tổ chức includeFacilities `string` (tùy chọn) Bao gồm các cơ sở liên kết với tổ chức includeRegions `string` (tùy chọn) Bao gồm các vùng liên kết với tổ chức

Điểm cuối

GET /api/organisations

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/organisations \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Công cụ hỗ trợ AI đơn giản để phân tích nội dung của một phiếu hỗ trợ và tạo đề xuất dựa trên các chủ đề có sẵn cũng như các chủ đề tìm kiếm Algolia được gợi ý...

Tham số

messageBody `string` (bắt buộc) Nội dung tin nhắn cần gửi topicData `string` (bắt buộc) Đối tượng/mảng JSON của topicData được trả về từ osTicket (hệ thống phiếu hỗ trợ) facilityId `string` (tùy chọn) ID nội bộ của câu lạc bộ, cần thiết để xác định đúng chỉ mục Algolia để tìm kiếm.

Điểm cuối

PUT /api/ai/helpers/analyse-support-ticket

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/ai/helpers/analyse-support-ticket \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

API tạo hình ảnh đơn giản

Tham số

type `string` (bắt buộc) Loại hình ảnh cần tạo name `string` (bắt buộc) Tên hình ảnh maxSize `string` (tùy chọn) Kích thước phản hồi tối đa (tùy chọn), ví dụ: 200KB, 1MB hoặc số byte. Hình ảnh sẽ được thu nhỏ/nén cho vừa.

Điểm cuối

PUT /api/ai/images/:type/:name

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/ai/images/:type/:name \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Truy vấn LLM đơn giản

Điểm cuối gọn nhẹ cho các truy vấn LLM đơn giản, không lưu trạng thái. Sử dụng mô hình chi phí thấp, không suy luận (gpt-4o-mini) với giới hạn token nghiêm ngặt. Không có lịch sử hội thoại, không có công cụ, không truyền phát: chỉ nhận prompt và trả về văn bản.

Nội dung yêu cầu

Điểm cuối

POST /api/ai/llm/query

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/ai/llm/query \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Trả về cấu hình Algolia bao gồm tên chỉ mục, ID ứng dụng và khóa API.

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/facilities/{facilityId}/algolia/config

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/algolia/config \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Khởi tạo chỉ mục Algolia cho tài liệu tiếp thị in ấn

Tham số

organisationId `string` (bắt buộc)

Điểm cuối

PUT /api/algolia/index

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/algolia/index \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm kiếm tài liệu tiếp thị in ấn

Nội dung yêu cầu

Điểm cuối

POST /algolia/search-marketing-print

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/algolia/search-marketing-print \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Tìm kiếm tài liệu tiếp thị in ấn

Tham số

club `string` (tùy chọn) ID câu lạc bộ searchTerms `string` (tùy chọn) Từ khóa tìm kiếm algoliaArgs `object` (tùy chọn) Các đối số tìm kiếm Algolia bổ sung

Điểm cuối

GET /algolia/search-marketing-print

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/algolia/search-marketing-print \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật hàng loạt các đối tượng tiếp thị in ấn cho một câu lạc bộ cụ thể

Điểm cuối

POST /algolia/bulk-update-marketing-print

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/algolia/bulk-update-marketing-print \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy các tài nguyên tiếp thị in ấn từ Algolia.

Tham số

organisationId `string` (bắt buộc) search `string` (tùy chọn) limit `string` (tùy chọn) brand `string` (tùy chọn) tag `string` (tùy chọn)

Điểm cuối

GET /api/algolia/marketing/assets

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/algolia/marketing/assets \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Khởi tạo chỉ mục Algolia cho tài liệu tiếp thị in ấn theo cấu hình của cơ sở.

Tham số

organisationId `string` (bắt buộc)

Điểm cuối

POST /api/algolia/marketing/assets

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/algolia/marketing/assets \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thực hiện tìm kiếm trên một chỉ mục Algolia được chỉ định dựa trên từ khóa tìm kiếm, câu lạc bộ và/hoặc ngôn ngữ. Có thể tùy chỉnh thêm việc tìm kiếm bằng các đối số Algolia bổ sung.

Tham số

searchTerms `string` (bắt buộc) Các từ khóa cần tìm trong chỉ mục Algolia. club `string` (tùy chọn) ID nội bộ của câu lạc bộ gửi yêu cầu. Nếu được chỉ định, kết quả tìm kiếm sẽ được lọc theo vùng liên kết với câu lạc bộ. locale `string` (tùy chọn) Ngôn ngữ dùng để xác định vùng nếu không chỉ định câu lạc bộ. Được lấy từ navigator.languages. algoliaArgs `string` (tùy chọn) Các đối số bổ sung/tùy chỉnh cần truyền vào yêu cầu tìm kiếm Algolia.

Điểm cuối

POST /api/algolia/search-wiki

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/algolia/search-wiki \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê tất cả thông báo chung

Điểm cuối

GET /api/announcements/list

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/announcements/list \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tải một tài nguyên lên S3 BUCKET CÔNG KHAI (qua Upload API), sau đó hệ thống sẽ xử lý hậu kỳ/tối ưu hóa tệp, tạo hình thu nhỏ, v.v. *Lưu ý: các tài nguyên sẽ được công khai*

Tham số

file `string` (tùy chọn) Tên của tệp/tài nguyên cần tải lên.

Điểm cuối

POST /api/asset-upload

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/asset-upload \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về trạng thái tải lên theo UUID của bản ghi tải lên đã cho

Tham số

uuid `string` (bắt buộc) UUID của bản ghi tải lên

Điểm cuối

GET /api/asset-upload/:uuid

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/asset-upload/:uuid \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Gửi lệnh đến Sonos của câu lạc bộ

Tham số

body `object` (bắt buộc) Đối tượng JSON chứa lệnh và dữ liệu đầu vào cần gửi đến Sonos.

Điểm cuối

PUT /api/audio-control/command/:club

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/audio-control/command/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Truy xuất cấu hình cho giao diện người dùng Kiểm soát âm thanh

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/audio-control/config/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/audio-control/config/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thay đổi cấu hình cho giao diện người dùng Kiểm soát âm thanh

Tham số

body `object` (bắt buộc) Đối tượng JSON của khối cấu hình mới cần thêm vào hệ thống.

Điểm cuối

PUT /api/audio-control/config/:club/:section

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/audio-control/config/:club/:section \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Truy xuất cài đặt thương hiệu cho một vùng cụ thể

Tham số

brandId `string` (tùy chọn) ID của thương hiệu regionCode `string` (tùy chọn) Mã ISO của vùng cần truy xuất cài đặt

Điểm cuối

GET /api/brands/{brandId}/regions/{regionCode}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/regions/{regionCode} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật nhiều cài đặt thương hiệu cho một vùng cụ thể

Tham số

brandId `string` (tùy chọn) ID của thương hiệu cần cập nhật regionCode `string` (tùy chọn) Mã ISO của vùng cần cập nhật cài đặt acceptFreeTrialBookingsVisibility `string` (tùy chọn) customTrackingCodeVisibility `string` (tùy chọn) displayDataSources `string` (tùy chọn) displayDefaultDataSource `string` (tùy chọn) displayDefaultUI `string` (tùy chọn) displayUIOptions `string` (tùy chọn) defaultAboutBusiness `string` (tùy chọn) defaultAboutBusinessFacebook `string` (tùy chọn) facilityCoverImage `string` (tùy chọn) digitalProfileSettingsVisibility `string` (tùy chọn) facilityHoursVisibility `string` (tùy chọn) facilityLocationVisibility `string` (tùy chọn) facilityPaymentMethods `string` (tùy chọn) facilityPrimaryLogo `string` (tùy chọn) facilityStatusVisibility `string` (tùy chọn) landingPagesVisibility `string` (tùy chọn) lineChatIntegrationVisibility `string` (tùy chọn) whatsAppIntegrationVisibility `string` (tùy chọn) defaultWhatsAppMessage `string` (tùy chọn) socialUrlsVisibility `string` (tùy chọn) yextApiKey `string` (tùy chọn) Khóa API được tích hợp Yext sử dụng cho vùng thương hiệu này. Chỉ được dùng khi `directorySyncMode` là `yext`. directorySyncMode `string` (tùy chọn) Backend đồng bộ nào sẽ chạy cho các cơ sở thuộc vùng thương hiệu này. Mặc định là `yext` khi không có, để tương thích ngược với các thương hiệu có từ trước khi triển khai Directory Publishers. websiteUrl `string` (tùy chọn) androidAppUrl `string` (tùy chọn) iosAppUrl `string` (tùy chọn) featuredMessageDescription `string` (tùy chọn) yextCategoryIds `string` (tùy chọn) Khóa lưu trữ cũ: đây thực chất là các ID danh mục Google Business Profile (ví dụ: gcid:gym). Tiền tố "yext" có từ trước khi Yext ngừng được hỗ trợ; được giữ lại để tương thích ngược với các hàng cơ sở dữ liệu hiện có. customInputFields `string` (tùy chọn) customInputFieldsToRemove `string` (tùy chọn)

Điểm cuối

PUT /api/brands/{brandId}/regions/{regionCode}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/brands/{brandId}/regions/{regionCode} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Truy xuất cài đặt thương hiệu cho một cơ sở cụ thể

Tham số

facilityId `string` (tùy chọn) ID của cơ sở cần truy xuất cài đặt thương hiệu

Điểm cuối

GET /api/facilities/{facilityId}/brand-settings

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/brand-settings \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo một thương hiệu mới

Tham số

name `string` (bắt buộc) Tên của thương hiệu organisationId `string` (bắt buộc) ID của tổ chức sở hữu thương hiệu redirectDashboard `string` (tùy chọn) URL chuyển hướng đến sau khi đăng nhập thay vì bảng điều khiển mặc định

Điểm cuối

POST /api/brands

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/brands \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách tất cả thương hiệu

Điểm cuối

GET /api/brands

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/brands \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về đối tượng thương hiệu

Tham số

brandId `string` (bắt buộc) ID của thương hiệu cần truy xuất includeOrganisation `boolean` (tùy chọn) Có đưa dữ liệu tổ chức vào phản hồi hay không

Điểm cuối

GET /api/brands/{brandId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật một thương hiệu theo ID

Tham số

brandId `string` (tùy chọn) ID của thương hiệu cần cập nhật name `string` (bắt buộc) Tên của thương hiệu brandOrganisationId `string` (tùy chọn) ID của tổ chức sở hữu thương hiệu redirectDashboard `string` (tùy chọn) URL chuyển hướng đến sau khi đăng nhập thay vì bảng điều khiển mặc định yextApiKey `string` (tùy chọn) Khóa API dùng để truy cập Yext API cho thương hiệu này customMenuLayout `object` (tùy chọn) Cây bố cục menu bên theo từng thương hiệu (các phần / nhóm / mục tham chiếu đến mô-đun hệ thống hoặc URL tùy chỉnh). Chỉ quản trị viên tổ chức của tổ chức sở hữu thương hiệu này mới có thể thiết lập.

Điểm cuối

PUT /api/brands/{brandId}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/brands/{brandId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các cơ sở của một thương hiệu

Trả về danh sách gọn nhẹ các cơ sở (ID, tên, mã ISO của vùng) thuộc thương hiệu. Được dùng để điền dữ liệu cho bộ chọn nhắm mục tiêu cơ sở trong cấu hình thương hiệu.

Tham số

brandId `string` (bắt buộc) ID của thương hiệu cần liệt kê cơ sở

Điểm cuối

GET /api/brands/{brandId}/facilities

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/facilities \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách tất cả thương hiệu liên kết với tổ chức của câu lạc bộ.

Điểm cuối

GET /api/clubs/{club}/brands

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/brands \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách tất cả loại lịch

Điểm cuối

GET /api/programs/calendars/calendar-types

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/programs/calendars/calendar-types \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa một banner bảng điều khiển

Xóa mềm một banner bảng điều khiển thuộc thương hiệu.

Tham số

brandId `string` (bắt buộc) ID của thương hiệu sở hữu banner bannerId `string` (bắt buộc) ID của banner cần xóa

Điểm cuối

DELETE /api/brands/{brandId}/dashboard-banners/{bannerId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/brands/{brandId}/dashboard-banners/{bannerId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các banner bảng điều khiển của một thương hiệu

Trả về tất cả banner bảng điều khiển (chưa bị xóa) được cấu hình cho thương hiệu, phục vụ việc quản lý của quản trị viên.

Tham số

brandId `string` (bắt buộc) ID của thương hiệu cần liệt kê banner

Điểm cuối

GET /api/brands/{brandId}/dashboard-banners

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/dashboard-banners \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo hoặc cập nhật một banner bảng điều khiển

Tạo một banner bảng điều khiển mới cho thương hiệu, hoặc cập nhật banner hiện có khi `bannerId` được cung cấp trong nội dung yêu cầu. Banner có thể được lên lịch (thời điểm bắt đầu/kết thúc tính bằng giây unix, null = không giới hạn) và nhắm đến toàn bộ thương hiệu, các vùng cụ thể (mã ISO) hoặc các cơ sở cụ thể.

Tham số

brandId `string` (bắt buộc) ID của thương hiệu sở hữu banner

Nội dung yêu cầu

Điểm cuối

PUT /api/brands/{brandId}/dashboard-banners

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/brands/{brandId}/dashboard-banners \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Lấy các biểu ngữ bảng điều khiển đang hoạt động của một cơ sở

Xác định các biểu ngữ bảng điều khiển cần hiển thị hiện tại cho một cơ sở, dựa trên thương hiệu, vùng (mã quốc gia ISO) của cơ sở và cờ bật, khung thời gian lịch và đối tượng nhắm đến của từng biểu ngữ. Được giao diện bảng điều khiển sử dụng.

Tham số

facilityId `string` (bắt buộc) ID của cơ sở cần xác định biểu ngữ

Điểm cuối

GET /api/facilities/{facilityId}/dashboard-banners

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/dashboard-banners \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về tài liệu KYC của một câu lạc bộ.

Tham số

clubId `string` (bắt buộc) ID của câu lạc bộ. key `string` (bắt buộc) Khóa của tài liệu KYC.

Điểm cuối

GET /api/clubs/{clubId}/kyc-assets/{key}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/kyc-assets/{key} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về thông tin KYC của câu lạc bộ.

Điểm cuối

GET /api/clubs/{clubId}/kyc

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/kyc \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật thông tin KYC của câu lạc bộ.

Tham số

clubId `string` (bắt buộc) ID của câu lạc bộ cần cập nhật. body `object` (bắt buộc)

Điểm cuối

PUT /api/clubs/{clubId}/kyc

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubId}/kyc \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tải lên tài liệu KYC cho một câu lạc bộ.

Tham số

clubId `string` (bắt buộc) ID của câu lạc bộ. file `string` (bắt buộc) Tệp cần tải lên.

Điểm cuối

POST /api/clubs/{clubId}/kyc-assets

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubId}/kyc-assets \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về cài đặt tùy chọn của câu lạc bộ.

Điểm cuối

GET /api/club/preferences/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/club/preferences/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo hoặc cập nhật mục tùy chọn của câu lạc bộ.

Nội dung yêu cầu

Điểm cuối

POST /api/club/preferences/:club

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/club/preferences/:club \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Trả về danh sách hội viên kèm thỏa thuận.

Điểm cuối

GET /api/clubpass/user/email/exist/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubpass/user/email/exist/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách hội viên kèm thỏa thuận.

Điểm cuối

GET /api/clubpass/user/phone/exist/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubpass/user/phone/exist/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách người dùng thuộc câu lạc bộ được chỉ định

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập

Điểm cuối

GET /api/clubs/{club}/members

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/members \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về việc câu lạc bộ có mở cửa vào ngày đã cho hay không.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. date `string` (bắt buộc) Ngày cần kiểm tra theo định dạng unix

Điểm cuối

GET /api/club-busy-hours/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/club-busy-hours/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về toàn bộ siêu dữ liệu của câu lạc bộ được hiển thị trên các trang web Example Club.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/clubs/clubpage/clubdata/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/clubpage/clubdata/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật siêu dữ liệu của câu lạc bộ bằng dữ liệu mới được cung cấp từ front-end. Các trường không có trong nội dung yêu cầu được giữ nguyên (không SET, không REMOVE). Các trường được gửi dưới dạng `null` hoặc chuỗi rỗng sẽ bị xóa. Truyền `updateAll: false` để dùng cách hợp nhất một phần chuyên dụng; dù theo cách nào, bên gọi không bao giờ cần gửi những trường mà họ không sở hữu.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. body `string` (bắt buộc) Đối tượng JSON chứa dữ liệu câu lạc bộ mà bạn muốn cập nhật.

Điểm cuối

POST /api/clubs/clubpage/updateclub/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/clubpage/updateclub/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

thêm bản ghi theo dõi tùy chỉnh mới

Tham số

club `string` (bắt buộc) ID của câu lạc bộ body `string` (bắt buộc) Mảng các mục theo dõi tùy chỉnh.

Điểm cuối

POST /api/clubs/{club}/customtracking

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{club}/customtracking \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về dữ liệu theo dõi tùy chỉnh của một câu lạc bộ cụ thể

Điểm cuối

GET /api/clubs/customtracking/:clubID

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/customtracking/:clubID \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật các mục theo dõi tùy chỉnh

Tham số

club `string` (bắt buộc) ID của câu lạc bộ body `string` (bắt buộc) Đối tượng JSON chứa dữ liệu câu lạc bộ mà bạn muốn cập nhật.

Điểm cuối

POST /api/clubs/{club}/customtracking/update

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{club}/customtracking/update \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về hình ảnh mặt tiền mặc định của một câu lạc bộ.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/clubs/{club}/default-shop-front

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/default-shop-front \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các cửa có sẵn trong cơ sở

Tham số

body `object` (bắt buộc) Đối tượng JSON chứa dữ liệu câu lạc bộ mà bạn muốn cập nhật.

Điểm cuối

POST /api/clubs/integrations/doors/:facilityId

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/integrations/doors/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Mở khóa một cửa cụ thể trong cơ sở

Tham số

body `object` (bắt buộc) Đối tượng JSON chứa dữ liệu câu lạc bộ mà bạn muốn cập nhật.

Điểm cuối

POST /api/clubs/integrations/doors/unlock

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/integrations/doors/unlock \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về tất cả tích hợp và chi tiết cấu hình của câu lạc bộ được chỉ định.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/clubs/integrations/list/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/integrations/list/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật siêu dữ liệu của câu lạc bộ bằng dữ liệu mới được cung cấp từ front-end.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. body `object` (bắt buộc) Đối tượng JSON chứa dữ liệu câu lạc bộ mà bạn muốn cập nhật.

Điểm cuối

POST /api/clubs/integrations/update/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/integrations/update/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về giá trị boolean cho biết câu lạc bộ có ở quốc gia châu Âu hay không

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. date `string` (bắt buộc) Ngày cần kiểm tra theo định dạng unix

Điểm cuối

GET /api/clubs/is-eu/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/is-eu/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách tổng quan tất cả câu lạc bộ trong cơ sở dữ liệu của chúng tôi.

Điểm cuối

GET /api/clubs/listclubs

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/listclubs \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về việc câu lạc bộ có mở cửa vào ngày đã cho hay không.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. date `string` (bắt buộc) Ngày cần kiểm tra theo định dạng unix

Điểm cuối

GET /api/clubs/{club}/open-on/{date}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/open-on/{date} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy các đánh giá của câu lạc bộ từ DynamoDB.

Tham số

club `string` (bắt buộc) ID câu lạc bộ

Điểm cuối

GET /api/clubs/{club}/reviews

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/reviews \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy cài đặt đánh giá của câu lạc bộ từ DynamoDB.

Tham số

facilityId `string` (bắt buộc) ID cơ sở

Điểm cuối

GET /api/clubs/{club}/reviews-settings

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật cài đặt đánh giá của câu lạc bộ trên DynamoDB.

Tham số

club `string` (bắt buộc) ID câu lạc bộ

Điểm cuối

PUT /api/clubs/{club}/reviews-settings

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Bật lại tính năng tự động xuất bản trong cài đặt đánh giá.

Tham số

club `string` (bắt buộc) ID câu lạc bộ

Điểm cuối

PUT /api/clubs/{club}/reviews/publish-recent-reviews

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/publish-recent-reviews \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xuất bản một đánh giá

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. review `string` (bắt buộc) ID nội bộ của đánh giá mà bạn muốn xuất bản.

Điểm cuối

PUT /api/clubs/{club}/reviews/{review}/publish

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{review}/publish \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Bật lại tính năng tự động xuất bản trong cài đặt đánh giá.

Tham số

club `string` (bắt buộc) ID câu lạc bộ

Điểm cuối

PUT /api/clubs/{club}/reviews-settings/re-enable-auto-publish

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings/re-enable-auto-publish \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Đăng phản hồi cho một đánh giá thông qua nền tảng xuất bản gốc của đánh giá đó (Google, v.v.).

Tham số

club `string` (bắt buộc) ID cơ sở reviewId `string` (bắt buộc) ID đánh giá PH (được tra cứu trong bảng club-social-reviews) body `string` (bắt buộc)

Điểm cuối

POST /api/clubs/{club}/reviews/{reviewId}/respond

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{reviewId}/respond \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Hủy xuất bản một đánh giá

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. review `string` (bắt buộc) ID nội bộ của đánh giá mà bạn muốn hủy xuất bản.

Điểm cuối

PUT /api/clubs/{club}/reviews/{review}/un-publish

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{review}/un-publish \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách chủ sở hữu thuộc câu lạc bộ được chỉ định từ cơ sở dữ liệu PH

Tham số

clubID `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập

Điểm cuối

GET /api/clubs/{clubID}/owners

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/owners \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về tất cả gói hội viên của cơ sở.

Tham số

facilityId `string` (bắt buộc) ID nội bộ của cơ sở

Điểm cuối

GET /api/facilities/membership-plans/:facilityId

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/facilities/membership-plans/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật một bản ghi gói hội viên.

Tham số

facilityId `string` (bắt buộc) ID nội bộ của cơ sở body `object` (bắt buộc) Đối tượng JSON chứa dữ liệu gói hội viên mà bạn muốn cập nhật.

Điểm cuối

PUT /api/facilities/membership-plans/:facilityId

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/facilities/membership-plans/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Bật lại tính năng tự động xuất bản trong cài đặt đánh giá.

Tham số

club `string` (bắt buộc) ID câu lạc bộ

Điểm cuối

PUT /api/clubs/{club}/reviews/publish-recent-reviews

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/publish-recent-reviews \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Bật lại tính năng tự động xuất bản trong cài đặt đánh giá.

Tham số

club `string` (bắt buộc) ID câu lạc bộ

Điểm cuối

PUT /api/clubs/{club}/reviews-settings/re-enable-auto-publish

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings/re-enable-auto-publish \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách tất cả loại tiền tệ có sẵn

Điểm cuối

GET /api/currencies

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/currencies \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về vị trí địa lý dựa trên địa chỉ IP.

Tham số

ip `string` (bắt buộc) Địa chỉ IP cần tra cứu

Điểm cuối

GET /api/geo/ip-location/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/geo/ip-location/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về vị trí địa lý của người dùng hiện tại dựa trên IP của họ.

Điểm cuối

GET /api/geo/ip-current

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/geo/ip-current \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Chỉ trả về địa chỉ IP công khai của máy khách gửi yêu cầu (không tra cứu vị trí địa lý, không gọi API bên thứ ba). Được ứng dụng AI Agent dùng để so sánh IP công khai của trình duyệt với IP WAN mà thiết bị báo về nhằm phát hiện cùng mạng.

Điểm cuối

GET /api/geo/client-ip

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/geo/client-ip \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trình phân tích số điện thoại.

Tham số

body `string` (bắt buộc) Đối tượng Json chứa số điện thoại mà bạn muốn phân tích.

Điểm cuối

POST /api/phone/parser

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/phone/parser \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về thiết bị đồng hồ chính

Tham số

club_id `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn thêm thiết bị vào.

Điểm cuối

GET /api/clubs/{club_id}/smart-club/health-check/master-clock

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club_id}/smart-club/health-check/master-clock \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về thiết bị Sonos chính

Tham số

club_id `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn thêm thiết bị vào.

Điểm cuối

GET /api/clubs/{club_id}/smart-club/health-check/sonos-mqtt

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club_id}/smart-club/health-check/sonos-mqtt \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

lấy các thông báo pin yếu của thiết bị Duress cho một câu lạc bộ cụ thể.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/clubs/{club}/smart-club/health-check/low-battery-duress

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/smart-club/health-check/low-battery-duress \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về dữ liệu phân tích mạng

Tham số

club_id `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn thêm thiết bị vào.

Điểm cuối

GET /api/clubs/{club_id}/smart-club/health-check/network-analysis

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club_id}/smart-club/health-check/network-analysis \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

gửi các thông báo pin yếu của thiết bị Duress cho một câu lạc bộ cụ thể.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/clubs/{club}/smart-club/health-check/send-low-battery-duress-notifs

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/smart-club/health-check/send-low-battery-duress-notifs \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về dữ liệu kiểm tra tốc độ thiết bị cho từng loại thiết bị

Tham số

club_id `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn thêm thiết bị vào.

Điểm cuối

GET /api/clubs/{club_id}/smart-club/health-check/speed-test

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club_id}/smart-club/health-check/speed-test \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy thông tin chi tiết về trang thông tin của một cơ sở. Theo mặc định, trả về tổng số hằng ngày được tổng hợp trên các nhà xuất bản, hoặc một nhà xuất bản khi cung cấp `publisherId`.

Tham số

facilityId `string` (bắt buộc) publisherId `string` (tùy chọn) startDate `string` (bắt buộc) endDate `string` (bắt buộc)

Điểm cuối

GET /api/facilities/{facilityId}/directory-insights

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/directory-insights \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy thông tin chi tiết tổng hợp về trang thông tin của một thương hiệu trên tất cả nhà xuất bản.

Tham số

brandId `string` (bắt buộc) startDate `string` (bắt buộc) endDate `string` (bắt buộc)

Điểm cuối

GET /api/brands/{brandId}/directory-insights

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/directory-insights \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Các từ khóa tìm kiếm hàng đầu (phân tách có thương hiệu/không thương hiệu) của một cơ sở, hiện lấy từ Google Business Profile.

Tham số

facilityId `string` (bắt buộc) publisherId `string` (tùy chọn) Mặc định là "google"; hiện chỉ hỗ trợ Google. startDate `string` (bắt buộc) endDate `string` (bắt buộc) limit `string` (tùy chọn)

Điểm cuối

GET /api/facilities/{facilityId}/directory-search-keywords

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/directory-search-keywords \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Các từ khóa tìm kiếm hàng đầu của một thương hiệu, tổng hợp trên tất cả cơ sở.

Tham số

brandId `string` (bắt buộc) startDate `string` (bắt buộc) endDate `string` (bắt buộc) limit `string` (tùy chọn)

Điểm cuối

GET /api/brands/{brandId}/directory-search-keywords

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/directory-search-keywords \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê hỏi và đáp của một cơ sở.

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/facilities/{facilityId}/qna

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả lời một câu hỏi.

Điểm cuối

POST /api/facilities/{facilityId}/qna/{questionId}/answer

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna/{questionId}/answer \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa một câu trả lời.

Điểm cuối

DELETE /api/facilities/{facilityId}/qna/{questionId}/answer/{answerId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna/{questionId}/answer/{answerId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về các nhà xuất bản được bật cho tổ chức của cơ sở, kèm trạng thái kết nối.

Tham số

facilityId `string` (bắt buộc) organisationId `string` (bắt buộc)

Điểm cuối

GET /api/facilities/{facilityId}/directory-publishers/resolved

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/directory-publishers/resolved \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy cài đặt Door/Gate Access dùng chung của một cơ sở

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/rules/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/rules/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật cài đặt Door/Gate Access dùng chung của một cơ sở

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

PUT /api/door-access/rules/{facilityId}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/door-access/rules/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Lấy Access Policies của một cơ sở

Cấu hình truy cập hiện có được tự động chuyển đổi thành các chính sách tương đương được thực thi ở lần đọc đầu tiên.

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/policies/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thay thế Access Policies bằng cơ chế kiểm tra phiên bản lạc quan

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

PUT /api/door-access/policies/{facilityId}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Tạo một Access Policy

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

POST /api/door-access/policies/{facilityId}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật một Access Policy

Tham số

facilityId `string` (bắt buộc) policyId `string` (bắt buộc)

Điểm cuối

PATCH /api/door-access/policies/{facilityId}/{policyId}

Yêu cầu mẫu

curl -X PATCH https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa một Access Policy

Tham số

facilityId `string` (bắt buộc) policyId `string` (bắt buộc) revision `integer` (bắt buộc)

Điểm cuối

DELETE /api/door-access/policies/{facilityId}/{policyId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Nhân bản một Access Policy với một ID ổn định mới

Tham số

facilityId `string` (bắt buộc) policyId `string` (bắt buộc)

Điểm cuối

POST /api/door-access/policies/{facilityId}/{policyId}/duplicate

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId}/duplicate \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Đếm số người dùng và cửa bị ảnh hưởng bởi tất cả Access Policies

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/policies/{facilityId}/impacts

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/impacts \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Đếm số người dùng và cửa bị ảnh hưởng bởi một Access Policy

Tham số

facilityId `string` (bắt buộc) policyId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/policies/{facilityId}/{policyId}/impact

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId}/impact \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các loại người, trạng thái và thẻ của cơ sở

Trả về các giá trị loại người, trạng thái thành viên và thẻ khác nhau có trên các dòng User Access của cơ sở (ph-door-access-users), lấy từ đồng bộ với đối tác + nhập thủ công. Ứng dụng door-gate-access dùng các giá trị này để điền vào danh sách thả xuống của quy tắc truy cập. Thẻ là hợp của `tags` đã đồng bộ và `customTags` do quản trị viên đặt, khớp với bộ đánh giá quy tắc.

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/people-config/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/people-config/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các bộ điều khiển cửa tại một cơ sở cùng các quy tắc Door/Gate Access đang có hiệu lực

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/doors/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lưu các thiết lập ghi đè theo từng cửa, biểu tượng và cấu hình phía thiết bị

Điểm ghi duy nhất cho mọi thứ mà ứng dụng quản trị DGA chỉnh sửa trên một cửa: - `accessRulesOverride` / `geofenceOverride`: truyền `null` để xóa và quay về giá trị mặc định của cơ sở. - `icon`: khóa truyền ổn định (xem services/door-access/door-icons.js); giá trị không xác định trả về 400. - `holdTimeSeconds` (1\u201330), `maintenanceMode` (`off` / `force-open` / `force-closed`), `doorLocation` (văn bản tự do, \u226464 ký tự), `playNotificationSoundOnRelayToggle` (boolean), `autoUnlockSchedule` (lưới khung giờ hằng tuần). Trước đây đây là các trường chỉ có trong Quản lý thiết bị, nhưng giờ ứng dụng ghi trực tiếp các trường này để quản trị viên không cần rời ngăn kéo cửa khi thay đổi cấu hình hằng ngày. Khi bất kỳ trường phía thiết bị nào được thay đổi, route này cũng đẩy các biến môi trường Balena tương ứng (`RELAY_NOTIFICATION_SOUND`, `DOOR_MAINTENANCE_MODE`, `DOOR_AUTO_UNLOCK_SCHEDULE`) và gửi lệnh MQTT `unlockUpdates` để thiết bị nhận cấu hình mới mà không cần chờ lần làm mới biến môi trường Balena tiếp theo. Thực hiện theo khả năng \u2014 phản hồi vẫn là 200 ngay cả khi tạm thời không kết nối được Balena.

Tham số

facilityId `string` (bắt buộc) doorId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

PUT /api/door-access/doors/{facilityId}/{doorId}/override

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/override \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Kiểm tra nhẹ trạng thái Balena cho thông báo tải lại trong ngăn kéo cửa

Ngăn kéo của ứng dụng DGA tải dữ liệu này khi quản trị viên mở một cửa để hiển thị đúng nội dung "lưu sẽ tải lại bộ điều khiển": biến thể mặc định "vài giây", hoặc biến thể mạnh hơn "vài phút" khi cũng có một bản cập nhật phát hành đang chờ. Trả về một ảnh chụp phẳng lấy từ `balena.models.device.get()`. Khi lỗi sẽ trả về `data: null` (thay vì lỗi 5xx) để sự cố Balena chỉ làm giảm chất lượng nội dung thông báo thay vì ngăn ngăn kéo mở ra.

Tham số

facilityId `string` (bắt buộc) doorId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/doors/{facilityId}/{doorId}/device-status

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/device-status \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Ghi đè của quản trị viên: mở khóa cửa từ ứng dụng

Bật relay trong thời gian ngắn theo `holdTimeSeconds` hiện tại của cửa, ghi một dòng kiểm toán `admin-override` vào ph-door-app-access-events để có thể truy nguyên hành động trong Nhật ký truy cập. Luôn thành công bất kể `maintenanceMode === 'force-closed'`; đây là lối thoát dành cho quản trị viên. Trả về 200 ngay khi lệnh MQTT publish được gửi đi; không chờ các trạng thái confirmed / failed / timed_out tại đây (luồng cũ /api/devices/door-controllers + /api/ics/devices/command cũng chỉ gửi đi mà không chờ phản hồi).

Tham số

facilityId `string` (bắt buộc) doorId `string` (bắt buộc)

Điểm cuối

POST /api/door-access/doors/{facilityId}/{doorId}/unlock

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/unlock \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Phát chuỗi tiếng bíp định vị trên bộ điều khiển cửa

Gửi lệnh MQTT `beep` để bộ điều khiển phát ba tiếng bíp dài vừa (~500 ms mỗi tiếng, cách nhau ~350 ms, tổng ~2 s). Được quản trị viên dùng để tìm vị trí thực tế của bộ điều khiển cửa tại chỗ. Nút Quản lý thiết bị cũ phát một chuỗi bíp ngắn ~30 s nhưng trình điều khiển còi của firmware chỉ phát ổn định tiếng đầu tiên, vì vậy ứng dụng gửi một chuỗi ngắn hơn, đáng tin cậy hơn thay thế. Không có dòng kiểm toán \u2014 đây là thao tác chẩn đoán không ảnh hưởng đến kiểm soát truy cập.

Tham số

facilityId `string` (bắt buộc) doorId `string` (bắt buộc)

Điểm cuối

POST /api/door-access/doors/{facilityId}/{doorId}/identify

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/identify \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Khởi động lại bộ điều khiển cửa từ xa

Gửi cùng lệnh MQTT `rebootDevice` (gửi đi không chờ phản hồi) mà nút "Remotely Reboot Device" của Quản lý thiết bị cũ gửi, nhưng được kiểm soát bởi mô-đun `door-gate-access` để quản trị viên DGA có thể khởi động lại bộ điều khiển từ mục Advanced của ngăn kéo cửa mà không cần quyền `device-management` riêng. Trả về 200 ngay khi lệnh được gửi đi; thiết bị sẽ ngoại tuyến trong suốt thời gian khởi động lại.

Tham số

facilityId `string` (bắt buộc) doorId `string` (bắt buộc)

Điểm cuối

POST /api/door-access/doors/{facilityId}/{doorId}/reboot

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/reboot \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các dòng User Access tại một cơ sở

Trả về mọi dòng user-access chưa bị xóa tại cơ sở. Hỗ trợ các bộ lọc phía máy khách (source, search, accessEnabled, hasGrants). Phép tính `hideExcluded` phía máy chủ của Giai đoạn 4 sẽ được bổ sung khi bộ đánh giá quyền kết hợp được triển khai; hiện tại tham số được chấp nhận nhưng vẫn trả về toàn bộ tập hợp.

Tham số

facilityId `string` (bắt buộc) search `string` (tùy chọn) source `string` (tùy chọn) accessEnabled `string` (tùy chọn) hasGrants `string` (tùy chọn) hideExcluded `boolean` (tùy chọn) Khi là true, những người dùng được đồng bộ (source != manual) không thể đi qua bất kỳ cửa nào vào bất kỳ thời điểm nào tại cơ sở này sẽ bị ẩn. Phản hồi bao gồm một phần bao `hidden: { count, sample }`.

Điểm cuối

GET /api/door-access/users/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/users/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo thủ công một dòng User Access tại một cơ sở

Tạo một dòng mới với `source: 'manual'`. Trả về 409 kèm `existingUserId` nếu số điện thoại hoặc email được cung cấp đã gắn với một dòng tại cơ sở này.

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/door-access/users/{facilityId}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Lấy một dòng User Access

Tham số

facilityId `string` (bắt buộc) userId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/users/{facilityId}/{userId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật một phần dòng User Access

Chỉnh sửa bất kỳ tập con nào của các trường danh tính / ủy quyền. Truyền `null` để xóa một trường tùy chọn. Trả về 409 nếu số điện thoại hoặc email mới trùng với một dòng khác tại cùng cơ sở. `appMessage` chấp nhận cùng cấu trúc với thông báo toàn cơ sở trên PUT /api/door-access/rules/{facilityId}: nội dung, mức độ nghiêm trọng, liên kết tùy chọn, lịch bắt đầu/kết thúc tùy chọn. Ứng dụng di động hiển thị thông báo này trên bảng điều khiển chỉ cho người dùng được nhắm đến.

Tham số

facilityId `string` (bắt buộc) userId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

PATCH /api/door-access/users/{facilityId}/{userId}

Yêu cầu mẫu

curl -X PATCH https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Xóa mềm một dòng User Access

Đánh dấu dòng là `deleted: true` và tắt quyền truy cập. Liên kết nhật ký kiểm toán với userId được giữ lại; quản trị viên có thể bật lại thủ công.

Tham số

facilityId `string` (bắt buộc) userId `string` (bắt buộc)

Điểm cuối

DELETE /api/door-access/users/{facilityId}/{userId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Nguồn gốc quyền truy cập theo từng cửa của một người dùng

Với mỗi cửa, trả về kết quả ủy quyền xác định hiện tại (`allowedNow`, `allowedVia`, `deniedReason`) và các đường cấp quyền đã cấu hình cho Access Policies, quyền cấp vĩnh viễn, lịch của chính sách, quyền theo khung giờ do quản trị viên cấp, và các khung giờ nguồn đối tác đã ánh xạ còn mới. Cũng trả về khả năng truy cập hiện tại/tiếp theo và độ mới của nguồn. Thiết lập blockAllAccess và bảo trì của cửa được đánh giá trước mọi đường cho phép.

Tham số

facilityId `string` (bắt buộc) userId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/users/{facilityId}/{userId}/effective-access

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/effective-access \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo hàng loạt dòng User Access từ tệp CSV nhập vào

Tạo nhiều dòng `source: 'manual'` trong một yêu cầu, dùng lại cùng logic xác thực, chuẩn hóa số điện thoại/email, kiểm tra trùng lặp theo cơ sở, tự động gửi tin nhắn và (tùy chọn) lời mời như khi tạo một dòng. Các dòng được xử lý theo thứ tự, nên một dòng sau trùng với một dòng đã tạo trước đó sẽ được báo là trùng lặp. Quyền được cung cấp dưới dạng ID cửa/nhóm đã được phân giải (máy khách phân giải tên thành ID). Quyền theo khung giờ cố ý bị từ chối khi tạo hàng loạt và phải được thêm qua endpoint thay thế theo từng người dùng sau khi nhập. Không bao giờ gây lỗi theo từng dòng; kết quả của mỗi dòng được báo cáo riêng.

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/door-access/users/{facilityId}/bulk

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/bulk \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Thay thế các quyền ủy quyền kết hợp trên một dòng User Access

Kết nối bộ đánh giá kết hợp của Giai đoạn 3. Quyền tồn tại song song với các quy tắc thẻ của cơ sở: người dùng được cho phép khi một trong hai khớp tại thời điểm mở khóa.

Tham số

facilityId `string` (bắt buộc) userId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

PUT /api/door-access/users/{facilityId}/{userId}/grants

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/grants \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Thay thế các quyền Access Time Window bổ sung trên một dòng User Access

Chỉ thay thế `timeWindowGrants`; `grants` vĩnh viễn và `sourceTimeWindows` của tích hợp không bị thay đổi. Mỗi mục cần một phạm vi (`facilityWide`, `doors` hoặc `groups`) và một `window` tuyệt đối hoặc hằng tuần. Gửi một mảng rỗng sẽ xóa rõ ràng tất cả khung giờ do quản trị viên đặt.

Tham số

facilityId `string` (bắt buộc) userId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

PUT /api/door-access/users/{facilityId}/{userId}/time-window-grants

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/time-window-grants \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Cố định một dòng User Access trước các cập nhật đồng bộ từ nguồn

Đặt `decoupledFromSource: true`, xóa tất cả `sourceTimeWindows` thuộc tích hợp, và khiến quá trình đồng bộ (cron + streams) ghi nhật ký + bỏ qua dòng này cho đến khi quản trị viên xóa cờ qua /recouple.

Tham số

facilityId `string` (bắt buộc) userId `string` (bắt buộc)

Điểm cuối

POST /api/door-access/users/{facilityId}/{userId}/decouple

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/decouple \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Gắn lại một dòng User Access với các cập nhật đồng bộ từ nguồn

Tham số

facilityId `string` (bắt buộc) userId `string` (bắt buộc)

Điểm cuối

POST /api/door-access/users/{facilityId}/{userId}/recouple

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/recouple \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thu hồi tất cả refresh token của ứng dụng Door/Gate Access của một người dùng

Thu hồi theo số điện thoại/email đã lưu của người dùng (bảng refresh-token được khóa theo `sha256(plaintext)`; các GSI byMobilePhone / byEmail cho phép xóa lan tỏa từ một người dùng). Những người dùng khác dùng chung số điện thoại/email tại cơ sở khác cũng sẽ bị đăng xuất.

Tham số

facilityId `string` (bắt buộc) userId `string` (bắt buộc)

Điểm cuối

POST /api/door-access/users/{facilityId}/{userId}/logout

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/logout \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Gửi (lại) email mời dùng ứng dụng Door/Gate Access cho một người dùng

Buộc gửi email mời tải ứng dụng đến địa chỉ email đã lưu của người dùng (chỉ email; không gửi SMS). Bỏ qua các điều kiện kiểm tra tính đủ điều kiện và đã gửi mà luồng đồng bộ tự động sử dụng, vì đây là một thao tác rõ ràng của quản trị viên. Trả về 400 nếu người dùng chưa có email trong hồ sơ.

Tham số

facilityId `string` (bắt buộc) userId `string` (bắt buộc)

Điểm cuối

POST /api/door-access/users/{facilityId}/{userId}/resend-invite

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/resend-invite \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xem trước người nhận của một lần gửi lời mời ứng dụng hàng loạt

Tính toán tập hợp người dùng sẽ nhận email mời dùng ứng dụng. Nhóm cơ sở là mọi người dùng chưa bị xóa có email và chưa từng dùng ứng dụng (`appLastSeenAt` trống). Theo mặc định, nhóm này được thu hẹp chỉ còn những người dùng hiện có quyền truy cập (khớp quy tắc hoặc được cấp quyền) và chưa từng được mời; `includeAlreadyInvited` và `includeNoAccess` mở rộng nhóm này. Không gửi email nào; trả về số lượng, một mẫu nhỏ và các userId ứng viên cho endpoint thực thi.

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/door-access/users/{facilityId}/bulk-invite/preview

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/bulk-invite/preview \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Gửi email mời dùng ứng dụng cho một nhóm người dùng

Gửi email mời tải ứng dụng đến từng userId được cung cấp (tối đa 50 mỗi yêu cầu; máy khách chia toàn bộ danh sách ứng viên từ bản xem trước thành từng lô). Mỗi người dùng được xác thực lại lúc gửi: các dòng không còn tồn tại, không có email hoặc đã dùng ứng dụng kể từ lúc xem trước sẽ bị bỏ qua, không bị tính là thất bại. Kết quả của từng người dùng được báo cáo riêng để máy khách có thể tổng hợp số đã gửi / thất bại / bỏ qua.

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/door-access/users/{facilityId}/bulk-invite

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/bulk-invite \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Liệt kê các Door Group tại một cơ sở

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/door-groups/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo một Door Group

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/door-access/door-groups/{facilityId}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Lấy một Door Group

Tham số

facilityId `string` (bắt buộc) groupId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/door-groups/{facilityId}/{groupId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật một Door Group

Tham số

facilityId `string` (bắt buộc) groupId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

PATCH /api/door-access/door-groups/{facilityId}/{groupId}

Yêu cầu mẫu

curl -X PATCH https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Xóa mềm một Door Group

Tham số

facilityId `string` (bắt buộc) groupId `string` (bắt buộc)

Điểm cuối

DELETE /api/door-access/door-groups/{facilityId}/{groupId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các tích hợp đối tác được cấu hình tại một cơ sở

Trả về các tích hợp đối tác của cơ sở (id, tên, logo, trạng thái bật) bằng cách nối ph-facility-partner-config với danh mục ph-partners. Thuộc phạm vi door-gate-access (để quản trị viên không có quyền truy cập external-integrations vẫn có thể hiển thị huy hiệu đối tác và danh sách đồng bộ theo từng đối tác).

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/partners/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/partners/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Đọc cấu hình đồng bộ User Access của một cơ sở

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/sync-config/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/sync-config/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật cấu hình đồng bộ User Access của một cơ sở

Chỉ chấp nhận các trường do quản trị viên kiểm soát (`enabled`, `requireIdentifier` và bản đồ `partners` của đối tác); `lastRunAt` và `lastRunCounts` do chính công cụ đồng bộ ghi. `partner.partners` là bản đồ bật theo từng đối tác, có khóa là partnerId (chọn không tham gia): khi `partner.enabled` chính được bật, một đối tác sẽ đồng bộ trừ khi có mục `{ enabled: false }` rõ ràng tại đây.

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

PUT /api/door-access/sync-config/{facilityId}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/door-access/sync-config/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Đọc cấu hình gửi tin nhắn tự động theo từng người dùng của một cơ sở

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/auto-messages/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật cấu hình gửi tin nhắn tự động theo từng người dùng của một cơ sở

Lưu các quy tắc, sau đó đánh giá lại ngay mọi dòng User Access tại cơ sở để người dùng hiện có nhận/mất tin nhắn tự động ngay lập tức. Tin nhắn thủ công và các dòng đã tách khỏi nguồn không bị thay đổi.

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

PUT /api/door-access/auto-messages/{facilityId}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Trạng thái của lượt đánh giá lại tin nhắn tự động chạy nền

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/auto-messages/{facilityId}/sweep-status

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId}/sweep-status \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Chạy đồng bộ User Access theo yêu cầu cho một cơ sở

Quét đồng bộ mọi nguồn đang bật (partner / cctv) tại cơ sở và hợp nhất các dòng ph-door-access-users qua chuỗi loại bỏ trùng lặp. Trả về số lượng theo từng nguồn. Các nguồn bị tắt hiển thị là `skippedSyncDisabled: 1` thay vì bị bỏ trống để giao diện có thể hiển thị cả hai dòng một cách nhất quán.

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

POST /api/door-access/sync/{facilityId}/run

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/run \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xem trước chạy thử một lần xóa hàng loạt dữ liệu đồng bộ từ đối tác

Trả về số lượng + một mẫu các dòng user-access sẽ bị xóa mềm, cùng một confirmToken phải được gửi lại cho endpoint thực thi. Không có dữ liệu nào bị sửa đổi. Nhật ký truy cập không bao giờ bị ảnh hưởng.

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/door-access/sync/{facilityId}/bulk-delete/preview

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/bulk-delete/preview \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Thực thi xóa hàng loạt dữ liệu đồng bộ từ đối tác (xóa mềm)

Xóa mềm mọi dòng user-access đồng bộ từ đối tác trong phạm vi. Yêu cầu confirmToken do bản xem trước trả về; nếu tập dữ liệu hiện tại đã thay đổi kể từ lúc xem trước, token sẽ không khớp và yêu cầu bị từ chối (409) để quản trị viên xem xét lại. Nhật ký truy cập được giữ nguyên.

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/door-access/sync/{facilityId}/bulk-delete

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/bulk-delete \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Hoạt động đồng bộ User Access gần đây (nhật ký khắc phục sự cố)

Trả về các kết quả đồng bộ gần nhất của một cơ sở (đã tạo / bỏ qua / đã tắt) kèm lý do, để quản trị viên biết vì sao một thành viên được hoặc không được đồng bộ. Mới nhất trước.

Tham số

facilityId `string` (bắt buộc) limit `integer` (tùy chọn)

Điểm cuối

GET /api/door-access/sync/{facilityId}/log

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/log \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các sự kiện Door/Gate Access của một cơ sở

Trả về các sự kiện mở khóa từ thiết bị di động, ghi đè của quản trị viên và Partner API bên ngoài trong một luồng theo thứ tự thời gian đảo ngược.

Tham số

facilityId `string` (bắt buộc) from `integer` (tùy chọn) to `integer` (tùy chọn) limit `integer` (tùy chọn)

Điểm cuối

GET /api/door-access/events/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/events/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Chạy thử đánh giá geofence cho ghim chế độ thử nghiệm của quản trị viên

Nội dung yêu cầu

Điểm cuối

POST /api/door-access/geofence/test

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/door-access/geofence/test \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Lấy trạng thái bắt đầu sử dụng / kích hoạt của một cơ sở

Cung cấp dữ liệu cho trang "Get Started" và biểu ngữ tiến độ thiết lập của ứng dụng. Trả về số cửa + số người dùng hiện tại, hai bước cốt lõi được suy ra (có một người dùng, có một cửa), các cờ "reviewed" tùy chọn đã lưu, và cơ sở đã được kích hoạt hay chưa (đã hoàn tất cả hai bước cốt lõi). Lần đầu tiên một cơ sở được kích hoạt, dấu thời gian activatedAt sẽ được ghi.

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/door-access/onboarding/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/door-access/onboarding/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật các cờ "reviewed" tùy chọn trong quá trình bắt đầu sử dụng của một cơ sở

Lưu các cờ tùy chọn trong danh sách kiểm tra thiết lập mà quản trị viên đánh dấu (quy tắc truy cập, cài đặt đồng bộ, geofencing). Các bước cốt lõi và trạng thái kích hoạt được suy ra trực tiếp từ số lượng dữ liệu và không thể đặt tại đây. Trả về toàn bộ trạng thái bắt đầu sử dụng đã làm mới.

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

PUT /api/door-access/onboarding/{facilityId}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/door-access/onboarding/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Trả về phản hồi JSON chứa dữ liệu phân tích của cơ sở.

Tham số

clubId `string` (tùy chọn) ID của cơ sở cần lấy dữ liệu phân tích. fromDate `string` (tùy chọn) Ngày bắt đầu của dữ liệu phân tích cần lấy. toDate `string` (tùy chọn) Ngày kết thúc của dữ liệu phân tích cần lấy.

Điểm cuối

GET /clubs/{clubId}/lead-events

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/lead-events \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về phản hồi JSON chứa dữ liệu phân tích của cơ sở.

Tham số

clubId `string` (tùy chọn) ID của cơ sở cần lấy dữ liệu phân tích. fromDate `string` (tùy chọn) Ngày bắt đầu của dữ liệu phân tích cần lấy. toDate `string` (tùy chọn) Ngày kết thúc của dữ liệu phân tích cần lấy.

Điểm cuối

GET /clubs/{clubId}/analytics/page-views

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/page-views \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về phản hồi JSON chứa dữ liệu phân tích của cơ sở.

Tham số

clubId `string` (tùy chọn) ID của cơ sở cần lấy dữ liệu phân tích. fromDate `string` (tùy chọn) Ngày bắt đầu của dữ liệu phân tích cần lấy. toDate `string` (tùy chọn) Ngày kết thúc của dữ liệu phân tích cần lấy.

Điểm cuối

GET /clubs/{clubId}/analytics/referrers

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/referrers \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về phản hồi JSON chứa dữ liệu phân tích của cơ sở.

Tham số

clubId `string` (tùy chọn) ID của cơ sở cần lấy dữ liệu phân tích. fromDate `string` (tùy chọn) Ngày bắt đầu của dữ liệu phân tích cần lấy. toDate `string` (tùy chọn) Ngày kết thúc của dữ liệu phân tích cần lấy.

Điểm cuối

GET /clubs/{clubId}/analytics/socials

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/socials \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về phản hồi JSON chứa dữ liệu phân tích của cơ sở.

Tham số

clubId `string` (tùy chọn) ID của cơ sở cần lấy dữ liệu phân tích. fromDate `string` (tùy chọn) Ngày bắt đầu của dữ liệu phân tích cần lấy. toDate `string` (tùy chọn) Ngày kết thúc của dữ liệu phân tích cần lấy.

Điểm cuối

GET /clubs/{clubId}/analytics/top-cities

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/top-cities \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về phản hồi JSON chứa dữ liệu phân tích của cơ sở.

Tham số

clubId `string` (tùy chọn) ID của cơ sở cần lấy dữ liệu phân tích. fromDate `string` (tùy chọn) Ngày bắt đầu của dữ liệu phân tích cần lấy. toDate `string` (tùy chọn) Ngày kết thúc của dữ liệu phân tích cần lấy.

Điểm cuối

GET /clubs/{clubId}/analytics/total-page-views

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/total-page-views \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về phản hồi JSON chứa dữ liệu phân tích của cơ sở.

Tham số

clubId `string` (tùy chọn) ID của cơ sở cần lấy dữ liệu phân tích. fromDate `string` (tùy chọn) Ngày bắt đầu của dữ liệu phân tích cần lấy. toDate `string` (tùy chọn) Ngày kết thúc của dữ liệu phân tích cần lấy.

Điểm cuối

GET /clubs/{clubId}/analytics/traffic

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/traffic \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo JWT (Json Web Token) tạm thời phía giao diện cho các biểu đồ nhúng Google Analytics trên trang 'analytics' phía giao diện.

Điểm cuối

GET /api/ga/onetimetoken

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/ga/onetimetoken \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về các widget bảng điều khiển từ 'The Training Camp' nếu cơ sở có thành viên đang hoạt động.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/reporting/apps/widgets/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/reporting/apps/widgets/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về tất cả ngày nghỉ của cơ sở chưa được xem xét.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/reporting/club/{club}/unreviewed-holidays

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/reporting/club/{club}/unreviewed-holidays \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Đặt tất cả ngày nghỉ của cơ sở chưa được xem xét thành đã xem xét.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

PUT /api/reporting/club/{club}/review-holidays

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/reporting/club/{club}/review-holidays \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về Báo cáo KPI ở định dạng CSV, chia theo từng tháng trong 12 tháng gần nhất. *LƯU Ý* Thao tác này tạo một báo cáo duy nhất cho TẤT CẢ cơ sở trong hệ thống. Không chạy nhiều lần song song, nếu không bạn sẽ làm quá tải GymMaster!

Tham số

months `string` (tùy chọn) Số tháng (tính từ ngày hiện tại) cần lấy (mặc định là 12)

Điểm cuối

GET /api/reporting/gymmaster/all-clubs-kpi-report

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/reporting/gymmaster/all-clubs-kpi-report \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về (các) biểu đồ doanh thu của MMS cho một cơ sở.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. range `string` (tùy chọn) Khoảng thời gian tính bằng ngày (tính ngược từ ngày hiện tại) cần lấy

Điểm cuối

GET /api/reporting/gymmaster/revenuegraph/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/reporting/gymmaster/revenuegraph/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về dữ liệu/phân tích MMS (Member Management System) của bảng điều khiển cho một cơ sở. Dữ liệu bao gồm thống kê GymMaster/Perfect Gym cùng các chỉ số nội bộ khác do hệ thống thu thập.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. range `string` (tùy chọn) Khoảng thời gian tính bằng ngày (tính ngược từ ngày hiện tại) cần lấy

Điểm cuối

GET /api/reporting/gymmaster/widgets/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/reporting/gymmaster/widgets/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về dữ liệu widget Myzone của bảng điều khiển cho một cơ sở.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/reporting/myzone/widgets/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/reporting/myzone/widgets/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về một đối tượng gồm các dịch vụ được xác định là ngoại tuyến từ một hoặc nhiều endpoint trang trạng thái/giám sát, được cấu hình qua công cụ nội bộ 'Uptime Kuma'.

Điểm cuối

GET /api/reporting/statuspage/events

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/reporting/statuspage/events \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về các lượt đặt buổi tập sắp tới trong 7 ngày tiếp theo.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/reporting/clubs/{club}/workout-bookings

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/reporting/clubs/{club}/workout-bookings \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách các ngày nghỉ trước đây của một cơ sở.

Tham số

clubId `string` (tùy chọn) ID câu lạc bộ fromDate `string` (tùy chọn) Dấu thời gian Unix của ngày bắt đầu khoảng ngày nghỉ cần trả về. toDate `string` (tùy chọn) Dấu thời gian Unix của ngày kết thúc khoảng ngày nghỉ cần trả về.

Điểm cuối

GET /api/clubs/{clubId}/historical-holidays

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/historical-holidays \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về các tự động hóa thiết bị liên kết với cơ sở.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn liệt kê thiết bị.

Điểm cuối

GET /api/ics/automations/list/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/ics/automations/list/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật cấu hình thiết bị cho một màn hình/thiết bị hiện có.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở mà bạn muốn cập nhật thiết bị. body `string` (bắt buộc) Đối tượng JSON chứa các tham số cập nhật.

Điểm cuối

POST /api/ics/automations/update/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/ics/automations/update/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm/liên kết một thiết bị màn hình/máy tính thực với cơ sở của bạn.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn thêm thiết bị vào. body `string` (bắt buộc) Đối tượng JSON của màn hình mới cần liên kết.

Điểm cuối

POST /api/ics/devices/add/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/ics/devices/add/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Yêu cầu thiết bị kết nối với SSID mới dựa trên các tham số.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở mà bạn muốn cập nhật thiết bị. body `string` (bắt buộc) Đối tượng JSON chứa các tham số cập nhật.

Điểm cuối

POST /api/ics/devices/changewifi/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/ics/devices/changewifi/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật cấu hình thiết bị cho một màn hình/thiết bị hiện có.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở mà bạn muốn cập nhật thiết bị. body `string` (bắt buộc) Đối tượng JSON chứa các tham số cập nhật.

Điểm cuối

POST /api/ics/devices/command/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/ics/devices/command/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tải một URL/trang web trên màn hình của một thiết bị cụ thể.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở mà bạn muốn cập nhật thiết bị. body `string` (bắt buộc) Đối tượng JSON chứa các tham số cập nhật.

Điểm cuối

POST /api/ics/devices/loadurl/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/ics/devices/loadurl/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật cấu hình thiết bị cho một màn hình/thiết bị hiện có.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở mà bạn muốn cập nhật thiết bị. body `string` (bắt buộc) Đối tượng JSON chứa các tham số cập nhật.

Điểm cuối

PUT /api/ics/devices/update/{club}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/ics/devices/update/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Đổi tên một màn hình/thiết bị. Chỉ thay đổi bản đăng ký: khác với endpoint cập nhật, thao tác này không đẩy gì xuống thiết bị, nên cũng dùng được cho các màn hình đang chạy bản phần mềm đã ngừng hỗ trợ.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở mà thiết bị thuộc về. body `string` (bắt buộc) Đối tượng Json chứa các tham số đổi tên.

Điểm cuối

PUT /api/ics/devices/rename/{club}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/ics/devices/rename/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy các widget và liên kết đến nội dung đa phương tiện ngoại tuyến của một cơ sở, dựa trên ngày được cung cấp.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở mà bạn muốn thay đổi chương trình Templated content. date `string` (bắt buộc) Ngày cần trả về URL widget. Dùng định dạng `YYYY-MM-DD`.

Điểm cuối

GET /api/ics/external-resources/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/ics/external-resources/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy các widget và liên kết đến nội dung đa phương tiện ngoại tuyến của một cơ sở, dựa trên ngày được cung cấp.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở mà bạn muốn thay đổi chương trình Templated content.

Điểm cuối

GET /api/ics/list-scheduled-workouts/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/ics/list-scheduled-workouts/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thay đổi chương trình Templated content của một cơ sở.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở mà bạn muốn thay đổi chương trình Templated content. body `string` (bắt buộc) Đối tượng Json chứa chương trình Templated content mới cần thay đổi.

Điểm cuối

POST /api/ics/loadprogram/{club}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/ics/loadprogram/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy cấu hình chương trình của một màn hình/thiết bị hiện có.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở mà bạn muốn lấy dữ liệu chương trình.

Điểm cuối

GET /api/ics/programs/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/ics/programs/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật cấu hình chương trình của một màn hình/thiết bị hiện có.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở mà bạn muốn cập nhật thiết bị. body `string` (bắt buộc) Đối tượng JSON chứa các tham số cập nhật.

Điểm cuối

PUT /api/ics/programs/{club}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/ics/programs/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy các tùy chọn cấu hình chương trình.

Điểm cuối

GET /api/ics/programs/options/{facilityID}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/ics/programs/options/{facilityID} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trò chuyện với ngữ cảnh RAG. Endpoint này không có quyền truy cập công cụ, chỉ là một công cụ yêu cầu|phản hồi API đơn giản cho phép bạn lấy trực tiếp kiến thức từ cơ sở kiến thức.

Tham số

organisationId `string` (tùy chọn) ID tổ chức (sẽ được tự động phát hiện nếu không cung cấp)

Nội dung yêu cầu

Điểm cuối

POST /api/llm/chat

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/llm/chat \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Xóa embedding của bài viết khỏi kho vector và cập nhật trạng thái theo dõi embedding

Nội dung yêu cầu

Điểm cuối

DELETE /api/llm/delete-article

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/llm/delete-article \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Liệt kê các bản ghi theo dõi embedding theo tổ chức và trạng thái

Tham số

organisationId `string` (tùy chọn) ID tổ chức (tự động xác định nếu bỏ trống) status `string` (bắt buộc) Trạng thái để lọc (phải là một trong in_queue, done, anomaly, fail, deleted) Limit `string` (tùy chọn) Số mục tối đa mỗi trang LastEvaluatedKey `string` (tùy chọn) JSON của DynamoDB LastEvaluatedKey để phân trang

Điểm cuối

GET /api/llm/embedding-track/by-org-and-status

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/llm/embedding-track/by-org-and-status \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các bản ghi theo dõi embedding theo tổ chức (có thể lọc theo loại tài nguyên)

Tham số

organisationId `string` (tùy chọn) ID tổ chức (tự động xác định nếu bỏ trống) resourceType `string` (tùy chọn) Loại tài nguyên tùy chọn (ví dụ: "article"). Khi được cung cấp, lọc các bản ghi có resourceTypeId bắt đầu bằng "{type}#". Limit `string` (tùy chọn) Số mục tối đa mỗi trang LastEvaluatedKey `string` (tùy chọn) JSON của DynamoDB LastEvaluatedKey để phân trang

Điểm cuối

GET /api/llm/embedding-track/by-org

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/llm/embedding-track/by-org \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Khởi tạo bộ sưu tập cơ sở dữ liệu vector của tổ chức

Tham số

organisationId `string` (tùy chọn) ID tổ chức (sẽ được tự động phát hiện nếu không cung cấp)

Điểm cuối

POST /api/llm/init-org

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/llm/init-org \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm kiếm ngữ nghĩa trong cơ sở kiến thức

Tham số

organisationId `string` (tùy chọn) ID tổ chức (sẽ được tự động phát hiện nếu không cung cấp)

Nội dung yêu cầu

Điểm cuối

POST /api/llm/semantic-search

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/llm/semantic-search \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Bắt đầu xử lý dạng luồng các bài viết trong hàng đợi để tạo embedding, kèm cập nhật tiến độ theo thời gian thực

Tham số

organisationId `string` (tùy chọn) ID tổ chức (sẽ được tự động phát hiện nếu không cung cấp)

Điểm cuối

POST /api/llm/start-embedding-stream

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/llm/start-embedding-stream \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm hoặc cập nhật embedding bài viết vào cơ sở dữ liệu vector

Xử lý embedding bài viết dựa trên trạng thái hiện tại: - Nếu bài viết chưa xuất bản HOẶC ở chế độ riêng tư: xóa embedding - Nếu bài viết đã xuất bản VÀ ở chế độ công khai: tạo lại embedding với toàn bộ nội dung Luôn yêu cầu toàn bộ nội dung bài viết.

Tham số

organisationId `string` (tùy chọn) ID tổ chức (sẽ được tự động phát hiện nếu không cung cấp)

Nội dung yêu cầu

Điểm cuối

POST /api/llm/upsert-embeddings

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/llm/upsert-embeddings \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Endpoint kiểm thử để xóa hàng loạt embedding bài viết theo tổ chức và trạng thái tùy chọn

Tham số

organisationId `string` (tùy chọn) ID tổ chức (tự động xác định từ ngữ cảnh người dùng nếu bỏ trống) status `string` (tùy chọn) Trạng thái để lọc (tùy chọn; nếu bỏ trống, sẽ xóa TẤT CẢ bài viết của tổ chức bất kể trạng thái) hardDelete `string` (tùy chọn) Xóa cứng các bản ghi theo dõi embedding (true) hay xóa mềm bằng cách cập nhật trạng thái (false)

Điểm cuối

DELETE /api/llm/test/batch-delete-by-status

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/llm/test/batch-delete-by-status \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Chuyển đổi và chia nhỏ văn bản kèm thống kê chi tiết

Endpoint kiểm thử chuyển đổi văn bản và chia nhỏ văn bản, sau đó cung cấp thống kê chi tiết về phân bố các đoạn, bao gồm số ký tự, tỷ lệ phần trăm và các chỉ số chất lượng để giúp đánh giá hiệu quả chia đoạn.

Nội dung yêu cầu

Điểm cuối

POST /api/llm/test/transform-chunk

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/llm/test/transform-chunk \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Lấy tổng số vector trong chỉ mục vector của tổ chức

Endpoint kiểm thử để đếm tất cả vector trong chỉ mục vector của tổ chức của người dùng hiện tại

Tham số

organisationId `string` (tùy chọn) ID tổ chức (sẽ được tự động phát hiện nếu không cung cấp)

Điểm cuối

GET /api/llm/test/vector-count

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-count \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa tất cả vector của một articleId cụ thể khỏi chỉ mục vector

Endpoint kiểm thử để xóa tất cả vector liên kết với một articleId cụ thể khỏi chỉ mục vector của tổ chức của người dùng hiện tại.

Tham số

organisationId `string` (tùy chọn) ID tổ chức (sẽ được tự động phát hiện nếu không cung cấp) articleId `string` (bắt buộc) articleId cần xóa vector dryRun `string` (tùy chọn) Nếu là true, chỉ hiển thị những gì sẽ bị xóa mà không thực sự xóa

Điểm cuối

DELETE /api/llm/test/vector-delete-article

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/llm/test/vector-delete-article \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Kiểm thử Vector SDK bằng cách liệt kê tất cả chỉ mục

Endpoint kiểm thử để xác minh kết nối Vector SDK và liệt kê tất cả chỉ mục trong vector bucket

Điểm cuối

GET /api/llm/test/vector-indices

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-indices \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Khởi tạo chỉ mục Vector cho một tổ chức

Tạo Vector bucket và chỉ mục cho tổ chức của người dùng hiện tại

Tham số

organisationId `string` (tùy chọn) ID tổ chức (sẽ được tự động phát hiện nếu không cung cấp)

Điểm cuối

POST /api/llm/test/vector-init-index

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/llm/test/vector-init-index \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy tất cả siêu dữ liệu vector của một articleId cụ thể

Endpoint kiểm thử để lấy tất cả các đoạn vector và siêu dữ liệu của chúng cho một articleId cụ thể từ chỉ mục vector. Hữu ích để kiểm tra cách một bài viết được chia đoạn và lưu trữ. Việc lọc do dịch vụ kho vector xử lý.

Tham số

organisationId `string` (tùy chọn) ID tổ chức (sẽ được tự động phát hiện nếu không cung cấp) articleId `string` (bắt buộc) ID bài viết cần lấy siêu dữ liệu vector

Điểm cuối

GET /api/llm/test/vector-metadata-by-article

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-metadata-by-article \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy các vector gần đây kèm siêu dữ liệu từ chỉ mục vector

Endpoint kiểm thử để lấy 10 vector gần nhất kèm siêu dữ liệu (nhưng không có dữ liệu vector) từ chỉ mục vector của tổ chức của người dùng hiện tại. Hữu ích để kiểm tra cấu trúc siêu dữ liệu.

Tham số

organisationId `string` (tùy chọn) ID tổ chức (sẽ được tự động phát hiện nếu không cung cấp) limit `string` (tùy chọn) Số vector gần đây cần trả về (tối đa 100)

Điểm cuối

GET /api/llm/test/vector-recent

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-recent \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tải một tài sản cho Marketing Manager/Designer lên S3 Storage.

Tham số

file `string` (tùy chọn) Tên của tệp/tài nguyên cần tải lên.

Điểm cuối

POST /api/marketing/design/static/download

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/marketing/design/static/download \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về từng tài sản ở định dạng JSON để tải vào trình quản lý tài sản.

Tham số

id `string` (bắt buộc) ID của tài sản cần lấy. organisationId `string` (bắt buộc) ID tổ chức của cơ sở mà tài sản thuộc về.

Điểm cuối

GET /api/marketing/assets/get/{id}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets/get/{id} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về tất cả tài sản thiết kế.

Tham số

body `string` (bắt buộc) Đối tượng Json chứa dữ liệu cơ sở mà bạn muốn lưu. organisationId `string` (bắt buộc) ID tổ chức của cơ sở mà tài sản thuộc về. useCache `string` (tùy chọn) search `string` (tùy chọn) Truy vấn tìm kiếm để lọc tài sản theo tên hoặc thẻ. brand `string` (tùy chọn) Thương hiệu để lọc tài sản. tag `string` (tùy chọn) Thẻ để lọc tài sản.

Điểm cuối

GET /api/marketing/assets/get

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets/get \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về một trang tài sản in ấn tiếp thị của một tổ chức. Sử dụng Algolia để tìm kiếm theo mức độ liên quan + phân trang theo trang (kèm tổng số), và chuyển sang DynamoDB khi Algolia không khả dụng.

Tham số

organisationId `string` (bắt buộc) ID tổ chức của cơ sở mà các tài sản thuộc về. search `string` (tùy chọn) Truy vấn tìm kiếm để lọc tài sản theo tên hoặc thẻ. brand `string` (tùy chọn) Thương hiệu để lọc tài sản. tag `string` (tùy chọn) Thẻ để lọc tài sản. page `string` (tùy chọn) Số trang cần lấy (bắt đầu từ 0). limit `string` (tùy chọn) Số tài sản mỗi trang (tối đa 300). useCache `string` (tùy chọn) Khi là false, bỏ qua Algolia và truy vấn trực tiếp DynamoDB.

Điểm cuối

GET /api/marketing/assets

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách các tài sản khả dụng đã được tải lên qua trình quản lý tài sản.

Tham số

organisationId `string` (bắt buộc)

Điểm cuối

GET /api/marketing/assets/list

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets/list \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm/lưu một tài sản.

Tham số

body `string` (bắt buộc) Đối tượng Json chứa dữ liệu cơ sở mà bạn muốn lưu. organisationId `string` (bắt buộc) ID tổ chức của cơ sở mà tài sản thuộc về.

Điểm cuối

PUT /api/marketing/assets/save

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/assets/save \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tải một tài sản cho Marketing Manager/Designer lên S3 Storage.

Tham số

file `string` (tùy chọn) Tên của tệp/tài nguyên cần tải lên. organisationId `string` (tùy chọn) ID của tổ chức mà tài sản thuộc về.

Điểm cuối

POST /api/marketing/assets/upload

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/marketing/assets/upload \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách tất cả trang tùy chỉnh của một tổ chức.

Tham số

organisationId `string` (bắt buộc) ID nội bộ của tổ chức cần trả về các trang tùy chỉnh.

Điểm cuối

GET /api/marketing/custom-pages

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/marketing/custom-pages \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm hoặc cập nhật một trang tùy chỉnh cho một tổ chức.

Tham số

organisationId `string` (bắt buộc) ID nội bộ của tổ chức cần trả về các trang tùy chỉnh. body `object` (bắt buộc) Dữ liệu trang tùy chỉnh cần thêm hoặc cập nhật.

Điểm cuối

PUT /api/marketing/custom-pages

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/custom-pages \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách tất cả trang tùy chỉnh của một cơ sở.

Tham số

facilityId `string` (bắt buộc) ID nội bộ của cơ sở cần trả về các trang tùy chỉnh.

Điểm cuối

GET /api/facilities/{facilityId}/marketing/custom-pages

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/marketing/custom-pages \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về tất cả thiết kế đã xuất/kết xuất của một ID cơ sở cụ thể.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở gửi yêu cầu. sort `string` (tùy chọn) Bộ lọc để sắp xếp thiết kế, hỗ trợ 'oldest', 'newest' hoặc 'design'.

Điểm cuối

GET /api/marketing/designs/{club}/exports

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/{club}/exports \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về nội dung HTML riêng của một thiết kế ở định dạng JSON để tải vào trình chỉnh sửa.

Tham số

id `string` (bắt buộc) ID của thiết kế cần lấy.

Điểm cuối

GET /api/marketing/designs/get/{id}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/get/{id} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách ánh xạ dữ liệu đầu vào trong các thiết kế tiếp thị và in ấn cũng như các mẫu thiết kế

Tham số

clubId `string` (bắt buộc) ID nội bộ của cơ sở gửi yêu cầu. availableFeatures `string` (tùy chọn) Trả về tất cả các mục có tính năng cụ thể brand `string` (tùy chọn) Lọc thiết kế theo thương hiệu features `string` (tùy chọn) Lọc kết quả dựa trên tính năng

Điểm cuối

GET /api/marketing/designs/input-mapping/{clubId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/input-mapping/{clubId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách các thiết kế khả dụng của một cơ sở, có thể dùng trong các thiết kế (Print Designs) được tạo bằng trình chỉnh sửa tiếp thị/in ấn của hub.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở gửi yêu cầu. designAdmin `string` (tùy chọn) Trả về tất cả dữ liệu thiết kế (chế độ xem quản trị / yêu cầu người dùng là quản trị viên). brand `string` (tùy chọn) Lọc thiết kế theo thương hiệu

Điểm cuối

GET /api/marketing/designs/{club}/list

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/{club}/list \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Buộc hệ thống kết xuất/kết xuất lại tất cả hình thu nhỏ và bản xem trước của thiết kế (chủ yếu dùng khi thay đổi các tài sản 'nguồn' trong S3, v.v.)... **LƯU Ý** Bạn chỉ có thể gọi hàm này một lần mỗi X phút (hoặc không thể gọi khi đang có một lần kết xuất chạy). Điều này nhằm tránh gây tải quá mức cho máy chủ khi kết xuất tất cả thiết kế...

Điểm cuối

GET /api/marketing/designs/render-all-thumbnails

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/render-all-thumbnails \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Bắt đầu kết xuất một Dynamic Design

Tham số

body `string` (bắt buộc) Đối tượng Json chứa dữ liệu cơ sở mà bạn muốn gửi đến bộ xử lý kết xuất thiết kế...

Điểm cuối

POST /api/marketing/designs/dynamic/render-design

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/marketing/designs/dynamic/render-design \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm/lưu/cập nhật một thiết kế.

Tham số

body `string` (bắt buộc) Đối tượng Json chứa dữ liệu cơ sở mà bạn muốn lưu.

Điểm cuối

PUT /api/marketing/designs/{club}/save

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/designs/{club}/save \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về từng thiết kế tĩnh ở định dạng JSON để tải

Tham số

id `string` (bắt buộc) ID của thiết kế tĩnh cần lấy.

Điểm cuối

GET /api/marketing/designs/static/get/{id}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/static/get/{id} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm/lưu/cập nhật một mẫu thiết kế tĩnh.

Tham số

body `string` (bắt buộc) Đối tượng Json chứa dữ liệu cơ sở mà bạn muốn lưu.

Điểm cuối

PUT /api/marketing/designs/static/{club}/save

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/designs/static/{club}/save \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa một biến do người dùng đặt khỏi hệ thống.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở gửi yêu cầu. body `string` (bắt buộc) Json chứa ID của biến cần xóa.

Điểm cuối

DELETE /api/marketing/variables/{club}/delete

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/marketing/variables/{club}/delete \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách các biến khả dụng của một cơ sở, có thể dùng trong các thiết kế (Print Designs) được tạo bằng trình chỉnh sửa tiếp thị/in ấn của hub.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở gửi yêu cầu.

Điểm cuối

GET /api/marketing/variables/{club}/list

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/marketing/variables/{club}/list \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo một 'biến' mới do người dùng định nghĩa cho cơ sở đã chỉ định.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở gửi yêu cầu. body `string` (bắt buộc) Đối tượng Json của biến mới.

Điểm cuối

POST /api/marketing/variables/{club}/new

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/marketing/variables/{club}/new \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm/lưu/cập nhật một hoặc nhiều biến thiết kế trong hệ thống qua một mảng đối tượng.

Tham số

club `string` (bắt buộc) ID nội bộ của cơ sở gửi yêu cầu. body `string` (bắt buộc) Mảng gồm một hoặc nhiều đối tượng Json cần thêm/cập nhật (cho phép lưu nhiều mục/đối tượng trong một yêu cầu API).

Điểm cuối

PUT /api/marketing/variables/{club}/save

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/variables/{club}/save \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về tệp kê khai tài liệu MCP cho người dùng đã đăng nhập

Cung cấp dữ liệu cho trang `/mcp-docs` trong ứng dụng. Trả về URL máy chủ MCP, các header xác thực được hỗ trợ, danh tính/cờ quản trị viên của bên gọi, và danh sách công cụ đã lọc (lọc giống hệt `/mcp/tools/list`, nên trang tài liệu không bao giờ hiển thị công cụ mà bên gọi thực sự không thể dùng).

Điểm cuối

GET /api/mcp/docs-manifest

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/mcp/docs-manifest \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo thỏa thuận người dùng.

Tham số

body `object` (bắt buộc) Đối tượng Json chứa dữ liệu cơ sở mà bạn muốn lưu.

Điểm cuối

POST /api/member-agreements/contracts-tna/:club

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách thỏa thuận.

Điểm cuối

GET /api/member-agreements/contracts-tna/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa thỏa thuận người dùng.

Điểm cuối

DELETE /api/member-agreements/contracts-tna/:club/:id

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về chi tiết của thỏa thuận.

Điểm cuối

GET /api/member-agreements/contracts-tna/:club/:id

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật thỏa thuận người dùng.

Tham số

body `object` (bắt buộc) Đối tượng Json chứa dữ liệu cơ sở mà bạn muốn lưu.

Điểm cuối

PATCH /api/member-agreements/contracts-tna/:club/:id

Yêu cầu mẫu

curl -X PATCH https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy các thỏa thuận mặc định của cơ sở.

Tham số

body `object` (bắt buộc) Đối tượng Json chứa dữ liệu cơ sở mà bạn muốn lưu.

Điểm cuối

GET /api/member-agreements/default-tna/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/default-tna/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Đặt thỏa thuận mặc định của cơ sở.

Tham số

body `object` (bắt buộc) Đối tượng Json chứa dữ liệu cơ sở mà bạn muốn lưu.

Điểm cuối

POST /api/member-agreements/default-tna/:club

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/member-agreements/default-tna/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách thỏa thuận toàn cầu hoặc theo vùng.

Điểm cuối

GET /api/member-agreements/global-tna/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/global-tna/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách hội viên kèm thỏa thuận.

Điểm cuối

GET /api/member-agreements/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách thành viên của cơ sở theo mùa cho ứng dụng trại huấn luyện.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. season `string` (tùy chọn) Mùa của trại huấn luyện mà bạn muốn lọc. userIds `string` (tùy chọn) Mảng ID người dùng để lọc. useCache `string` (tùy chọn) Có dùng bộ nhớ đệm hay không. isUserMemberInfo `string` (tùy chọn) Nếu bật, dữ liệu sẽ được lọc theo userIds (khuyến nghị chỉ dùng một ID người dùng) và bao gồm dữ liệu cần thiết như bảng xếp hạng và tùy chọn của người dùng.

Điểm cuối

GET /api/members-leads/trainingcamp/club/season-members/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/members-leads/trainingcamp/club/season-members/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa nhiều khách hàng tiềm năng đặt buổi tập.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. body `string` (bắt buộc)

Điểm cuối

DELETE /api/members-leads/workout-booking/club/leads/{club}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách khách hàng tiềm năng đặt buổi tập của một cơ sở.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. all `string` (tùy chọn) Hiển thị tất cả khách hàng tiềm năng hay chỉ những người sắp tới.

Điểm cuối

GET /api/members-leads/workout-booking/club/leads/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật một khách hàng tiềm năng đặt buổi tập.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập. body `string` (bắt buộc)

Điểm cuối

PUT /api/members-leads/workout-booking/club/leads/{club}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Bật/tắt trạng thái gắn cờ của một khách hàng tiềm năng đặt buổi tập.

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ. body `string` (bắt buộc)

Điểm cuối

PATCH /api/members-leads/workout-booking/club/leads/{club}/flag

Yêu cầu mẫu

curl -X PATCH https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club}/flag \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy các mô-đun có hiệu lực của một cơ sở

Trả về tất cả mô-đun khả dụng cho một cơ sở bằng cách phân giải theo thứ bậc: tùy chọn của cơ sở → mô-đun của thương hiệu → mô-đun của tổ chức. Kết quả được lưu đệm trong Redis để tăng hiệu năng.

Tham số

facilityId `string` (bắt buộc) ID cơ sở cần phân giải mô-đun

Điểm cuối

GET /api/facilities/{facilityId}/modules

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/modules \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

[]

Trả về danh mục mô-đun cùng cấu hình hiển thị menu bên. Toàn bộ danh sách mô-đun được trả về để trình hiển thị phía giao diện quyết định khả năng hiển thị theo từng người dùng; ACL vẫn được thực thi ở phía máy chủ qua `auth.checkModuleAccess()`.

Điểm cuối

GET /api/modules

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/modules \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

lấy các danh mục thông báo.

Điểm cuối

GET /api/notification/categories

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/notification/categories \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa thông báo đã xem.

Điểm cuối

DELETE /api/club/notification/consumed/:club

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/club/notification/consumed/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

tạo tin nhắn thông báo.

Điểm cuối

POST /api/club/notification/consumed/:club

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/club/notification/consumed/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về mảng các thông báo đã xem.

Điểm cuối

GET /api/club/notification/consumed/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/club/notification/consumed/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa tin nhắn thông báo.

Điểm cuối

DELETE /api/club/notification/messages/:club

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về mảng các tin nhắn thông báo.

Điểm cuối

GET /api/club/notification/messages/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

cập nhật tin nhắn thông báo.

Điểm cuối

PATCH /api/club/notification/messages/:club

Yêu cầu mẫu

curl -X PATCH https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

tạo tin nhắn thông báo.

Tham số

body `string` (bắt buộc)

Điểm cuối

POST /api/club/notification/messages/:club

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

lấy những người đã xem thông báo theo cơ sở.

Điểm cuối

POST /api/club/notification/viewers/:club

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/club/notification/viewers/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

lấy các danh mục thông báo theo người dùng.

Điểm cuối

GET /api/club/notification/user-categories/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/club/notification/user-categories/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

tạo tin nhắn thông báo.

Điểm cuối

POST /api/notification/webhook

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/notification/webhook \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy khóa công khai VAPID cho thông báo đẩy HTML5

Trả về khóa công khai VAPID dùng để tạo đăng ký nhận thông báo đẩy trên trình duyệt.

Điểm cuối

GET /html5-push/vapid-public-key

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/html5-push/vapid-public-key \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lưu hoặc cập nhật một đăng ký nhận thông báo đẩy HTML5

Lưu một đăng ký nhận thông báo đẩy trên trình duyệt cho người dùng hiện tại.

Nội dung yêu cầu

Điểm cuối

POST /html5-push/subscribe

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/html5-push/subscribe \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Xóa một đăng ký nhận thông báo đẩy HTML5

Xóa một đăng ký nhận thông báo đẩy trên trình duyệt của người dùng hiện tại.

Nội dung yêu cầu

Điểm cuối

POST /html5-push/unsubscribe

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/html5-push/unsubscribe \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Lấy trạng thái bắt đầu sử dụng địa điểm cho người dùng gọi

Trả về hai phần bắt đầu sử dụng của một cơ sở: thiết lập (thông tin chi tiết + lựa chọn sản phẩm, lưu trong tùy chọn của cơ sở) và thanh toán (suy ra trực tiếp từ bản ghi payment-settings của hệ thống thanh toán SaaS), cùng một cờ `required` được cá nhân hóa theo bên gọi mà khung ứng dụng dùng để kiểm soát. Chỉ áp dụng cho địa điểm thuộc nhóm công nghệ; địa điểm thuộc nhóm kinh doanh luôn trả về required=false.

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/onboarding/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/onboarding/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lưu tiến độ đang thực hiện của trình hướng dẫn bắt đầu sử dụng cho một cơ sở

Lưu trạng thái chưa hoàn tất của trình hướng dẫn (lựa chọn sản phẩm, văn bản tự do "Other", thông tin doanh nghiệp đã xem lại, bước hiện tại) để khi làm mới/bỏ dở có thể tiếp tục từ chỗ người dùng dừng lại. Không bao giờ ghi nhận hoàn tất; xem endpoint complete.

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

PUT /api/onboarding/{facilityId}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/onboarding/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Tạo gợi ý điền sẵn bằng AI cho trình hướng dẫn bắt đầu sử dụng

Dùng ngữ cảnh hiện có của cơ sở/thương hiệu/tổ chức để đề xuất thông tin chi tiết của cơ sở (nội dung giới thiệu, các trường liên hệ đã chỉnh gọn), lựa chọn sản phẩm được gợi ý và các mẹo ngắn được cá nhân hóa. Kết quả được lưu đệm trong Redis trong 7 ngày. Gợi ý chỉ mang tính tham khảo: máy khách hiển thị chúng trong một biểu mẫu xem lại có thể chỉnh sửa. Luôn phản hồi 200; `suggestions` là null khi AI không khả dụng để trình hướng dẫn vẫn hoạt động bình thường.

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

POST /api/onboarding/{facilityId}/ai-prefill

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/onboarding/{facilityId}/ai-prefill \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Hoàn tất phần thiết lập trong quá trình bắt đầu sử dụng địa điểm

Xác thực các lựa chọn/thông tin đã xác nhận, lưu thông tin doanh nghiệp vào bản ghi của cơ sở, khởi tạo bố cục tech-menu của cơ sở từ các lựa chọn sản phẩm (trừ khi đã có bố cục tùy chỉnh), và ghi nhận hoàn tất thiết lập. Phần thanh toán cố ý KHÔNG thể hoàn tất tại đây: phần này được suy ra trực tiếp từ bản ghi payment-settings của hệ thống thanh toán SaaS, nên không thể bỏ qua yêu cầu bắt buộc về thẻ bằng cách gọi endpoint này. Trả về trạng thái đã làm mới.

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/onboarding/{facilityId}/complete

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/onboarding/{facilityId}/complete \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Kích hoạt một hành động tích hợp đối tác đã khai báo cho một cơ sở

Chạy một hành động "Run integration" được khai báo trên bản ghi đối tác (ph-partners.actions[]), trong phạm vi một cơ sở. Khóa single-flight của Redis ngăn các lần chạy thủ công đồng thời cho cùng hành động + cơ sở.

Tham số

partnerId `string` (bắt buộc) actionId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/partners/{partnerId}/actions/{actionId}/run

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/partners/{partnerId}/actions/{actionId}/run \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Đọc trạng thái chạy của một hành động tích hợp đối tác

Trả về việc có lần chạy thủ công nào đang diễn ra hay không (đang giữ khóa single-flight) cùng lần chạy được yêu cầu gần nhất, để nút cài đặt thăm dò.

Tham số

partnerId `string` (bắt buộc) actionId `string` (bắt buộc) facilityId `string` (bắt buộc)

Điểm cuối

GET /api/partners/{partnerId}/actions/{actionId}/status

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/partners/{partnerId}/actions/{actionId}/status \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy tất cả cấu hình đối tác của một thương hiệu

Tham số

brandId `string` (bắt buộc) ID thương hiệu

Điểm cuối

GET /api/partners/brand-config/{brandId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/partners/brand-config/{brandId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

[]

Tạo hoặc cập nhật cấu hình đối tác của thương hiệu

Tham số

body `object` (bắt buộc)

Điểm cuối

PUT /api/partners/brand-config

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/partners/brand-config \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Di chuyển dữ liệu tích hợp GymMaster sang facility-partner-config

Truy vấn tất cả cơ sở có các trường gymMasterAPI và gymMasterDomain, sau đó tạo/cập nhật các bản ghi facility-partner-config tương ứng. Đây là endpoint di chuyển dữ liệu chỉ dùng một lần.

Tham số

partnerId `string` (bắt buộc) ID đối tác GymMaster dùng cho tất cả bản ghi được di chuyển dryRun `boolean` (tùy chọn) Nếu là true, chỉ báo cáo những gì sẽ được di chuyển mà không ghi vào cơ sở dữ liệu

Điểm cuối

GET /api/partners/migrate-gymmaster

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/partners/migrate-gymmaster \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Bật một đối tác cho một tổ chức.

Tham số

partnerId `string` (bắt buộc) ID của đối tác

Điểm cuối

POST /api/partners/organisation/enable

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/partners/organisation/enable \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các đối tác của tổ chức. Quản trị viên tổ chức chỉ thấy các đối tác của tổ chức mình.

Điểm cuối

GET /api/partners/organisation

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/partners/organisation \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Gỡ một đối tác của tổ chức.

Tham số

keyId `string` (bắt buộc) ID khóa của đối tác tổ chức organisationId `string` (bắt buộc) ID tổ chức của đối tác

Điểm cuối

DELETE /api/partners/organisation/{keyId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/partners/organisation/{keyId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật chế độ truy cập và mô-đun của đối tác tổ chức.

Tham số

keyId `string` (bắt buộc) ID khóa của đối tác tổ chức organisationId `string` (bắt buộc) ID tổ chức của đối tác partnerId `string` (bắt buộc) ID đối tác accessMode `string` (bắt buộc) Chế độ truy cập của đối tác modules `string` (tùy chọn) Danh sách mô-đun cho chế độ truy cập LIMITED

Điểm cuối

PUT /api/partners/organisation/update-access

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/partners/organisation/update-access \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo lượt check-in cho một cơ sở

Chấp nhận một mảng đối tượng check-in và chuyển tiếp chúng đến Partner API để xử lý. Tối đa 25 lượt check-in mỗi yêu cầu.

Nội dung yêu cầu

Điểm cuối

POST /api/partners/check-ins

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/partners/check-ins \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Xóa cấu hình đối tác của một cơ sở

Xóa cấu hình của một tích hợp đối tác tại một cơ sở

Tham số

facilityId `string` (bắt buộc) ID cơ sở (club ID) partnerId `string` (bắt buộc) ID đối tác

Điểm cuối

DELETE /api/partners/facility-config/{facilityId}/{partnerId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/partners/facility-config/{facilityId}/{partnerId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê tất cả cấu hình đối tác của một cơ sở

Trả về tất cả tích hợp đối tác được cấu hình cho cơ sở đã chỉ định

Tham số

facilityId `string` (bắt buộc) ID cơ sở (club ID)

Điểm cuối

GET /api/partners/facility-config/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/partners/facility-config/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo hoặc cập nhật cấu hình đối tác cho một cơ sở

Thêm hoặc cập nhật cấu hình của một tích hợp đối tác tại một cơ sở

Nội dung yêu cầu

Điểm cuối

POST /api/partners/facility-config

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/partners/facility-config \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Xóa một thành viên theo memberId

Xóa một bản ghi thành viên hiện có bằng memberId.

Tham số

memberId `string` (bắt buộc) Mã định danh duy nhất của thành viên

Điểm cuối

DELETE /api/partners/members/{memberId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/partners/members/{memberId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật một thành viên theo memberId

Cập nhật một bản ghi thành viên hiện có bằng memberId.

Tham số

memberId `string` (bắt buộc) Mã định danh duy nhất của thành viên

Nội dung yêu cầu

Điểm cuối

PUT /api/partners/members/{memberId}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/partners/members/{memberId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Lấy trạng thái của một thao tác đồng bộ thành viên

Trả về trạng thái hiện tại của một thao tác tạo/xóa thành viên bất đồng bộ đã được bắt đầu qua POST /api/partners/members hoặc DELETE /api/partners/members/{memberId}. Giao diện thăm dò endpoint này để thay thế luồng cũ thăm dò danh sách + so khớp tên. LƯU Ý Việc giới hạn phạm vi partnerId/facilityId ở cấp dòng là bắt buộc theo các quy tắc cách ly đa đối tượng thuê nhưng được hoãn sang một PR tăng cường bảo mật Giai đoạn 3a.1: operationId là UUID 128 bit và route này đã được kiểm soát bởi quyền truy cập mô-đun `external-integrations`. Bất kỳ ai có operationId hợp lệ và quyền truy cập mô-đun quản trị đều có thể truy vấn trạng thái.

Tham số

operationId `string` (bắt buộc) UUID được trả về từ POST/DELETE

Điểm cuối

GET /api/partners/members/operations/{operationId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/partners/members/operations/{operationId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo hoặc cập nhật thành viên cho một cơ sở

Chấp nhận một mảng đối tượng thành viên và chuyển tiếp chúng đến Partner API để xử lý. Tối đa 25 thành viên mỗi yêu cầu.

Nội dung yêu cầu

Điểm cuối

POST /api/partners/members

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/partners/members \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Tạo hoặc cập nhật gói thành viên cho một cơ sở

Chấp nhận một mảng đối tượng gói thành viên và chuyển tiếp chúng đến Partner API để xử lý. Tối đa 25 gói thành viên mỗi yêu cầu.

Nội dung yêu cầu

Điểm cuối

POST /api/partners/membership-plans

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/partners/membership-plans \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Tạo một vai trò mới

Tham số

body `string` (bắt buộc) Đối tượng vai trò

Điểm cuối

POST /api/roles

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/roles \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách tất cả vai trò

Điểm cuối

GET /api/roles

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/roles \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa một vai trò theo ID

Điểm cuối

DELETE /api/roles/{roleId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/roles/{roleId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật một vai trò theo ID

Tham số

body `string` (bắt buộc) Đối tượng vai trò

Điểm cuối

PUT /api/roles/{roleId}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/roles/{roleId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo một mục bổ sung mới cho hóa đơn thanh toán SaaS

Tham số

organisationId `string` (tùy chọn) ID tổ chức cần tạo mục bổ sung body `string` (tùy chọn) Nội dung của yêu cầu

Điểm cuối

POST /api/saas-billing/additional-line-items

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách các mục bổ sung cho hóa đơn thanh toán SaaS

Tham số

organisationId `string` (bắt buộc) ID tổ chức

Điểm cuối

GET /api/saas-billing/additional-line-items

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách các mục bổ sung cho hóa đơn thanh toán SaaS của cơ sở

Điểm cuối

GET /api/clubs/{clubId}/saas-billing/additional-line-items

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/saas-billing/additional-line-items \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật một mục bổ sung cho hóa đơn thanh toán SaaS

Tham số

itemId `string` (bắt buộc) ID của mục bổ sung cần cập nhật body `string` (bắt buộc) Nội dung của yêu cầu

Điểm cuối

PUT /api/saas-billing/additional-line-items/{itemId}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items/{itemId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Đơn giá Cloud Agent theo giờ đã gộp cho Your Rates

Trả về các kích cỡ Cloud Agent được cung cấp với một mức giá theo giờ đã gộp (lưu trữ + phần mềm). Không bao gồm phần chia tách. usedPlans là các SKU mà cơ sở này đã chạy trong 30 ngày gần nhất.

Tham số

clubID `string` (bắt buộc)

Điểm cuối

GET /api/clubs/{clubID}/saas-billing/cloud-agent-rates

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/cloud-agent-rates \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa báo cáo hằng tháng đã nhập

Tham số

club `string` (tùy chọn) ID câu lạc bộ reportId `string` (tùy chọn) ID báo cáo

Điểm cuối

DELETE /api/saas-billing/extended-access/monthly-usage-report/{reportId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/{reportId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy báo cáo dung lượng lưu trữ camera giám sát mới nhất của một cơ sở

Trả về ảnh chụp dung lượng lưu trữ camera giám sát hằng ngày gần nhất của cơ sở từ nhật ký thanh toán đã lưu (tối đa 31 ngày gần nhất). Bao gồm totalStorage, ngày và các khoản phí liên quan đến lưu trữ.

Tham số

club `string` (bắt buộc) ID câu lạc bộ

Điểm cuối

GET /api/saas-billing/extended-access/latest-cctv-storage-report/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/latest-cctv-storage-report/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về hóa đơn PDF của cơ sở cho kỳ đã chỉ định.

Tham số

club `string` (tùy chọn) ID câu lạc bộ month `string` (tùy chọn) tháng của báo cáo ở dạng số. 1 = tháng Một, 2 = tháng Hai, v.v. year `string` (tùy chọn) năm của báo cáo ở dạng số, ví dụ: 2021

Điểm cuối

GET /api/saas-billing/extended-access/monthly-usage-report/:club/invoice

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/:club/invoice \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Gói các hóa đơn nền tảng dạng PDF cho các tháng sử dụng đã chọn, dưới dạng ZIP. Phiên bản hàng loạt của endpoint .../invoice đơn lẻ, phục vụ tính năng tải xuống nhiều mục trên thẻ Invoices & Receipts của ứng dụng Billing & Cost Management.

Tham số

club `string` (tùy chọn) ID câu lạc bộ months `string` (tùy chọn) Các tháng sử dụng/báo cáo phân tách bằng dấu phẩy ở định dạng YYYY-MM (tối đa 24)

Điểm cuối

GET /api/saas-billing/extended-access/monthly-usage-report/{club}/invoices.zip

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/{club}/invoices.zip \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về báo cáo sử dụng hằng tháng cho nhiều tháng sử dụng trong một lần gọi. Phục vụ biểu đồ Cost History và mức chênh lệch giữa các tháng trong ứng dụng Billing & Cost Management. Các tháng chưa có dữ liệu sử dụng trả về report: null (khớp với giao diện 404 → $0 của endpoint theo từng tháng).

Tham số

club `string` (tùy chọn) ID câu lạc bộ months `string` (tùy chọn) Các tháng sử dụng phân tách bằng dấu phẩy ở định dạng YYYY-MM (tối đa 12)

Điểm cuối

GET /api/saas-billing/extended-access/monthly-usage-report/{club}/batch

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/{club}/batch \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Nhập báo cáo hằng tháng cho cơ sở.

Tham số

club `string` (tùy chọn) ID câu lạc bộ

Điểm cuối

PUT /api/saas-billing/extended-access/usage-report/:club

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về báo cáo CSV về mức sử dụng camera giám sát trong 30 ngày gần nhất của tất cả cơ sở.

Điểm cuối

GET /api/saas-billing/extended-access/usage-report/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê tất cả báo cáo hằng ngày trong tháng của cơ sở.

Tham số

club `string` (tùy chọn) ID câu lạc bộ month `string` (tùy chọn) tháng của báo cáo ở dạng số. 1 = tháng Một, 2 = tháng Hai, v.v. year `string` (tùy chọn) năm của báo cáo ở dạng số, ví dụ: 2021

Điểm cuối

GET /api/saas-billing/extended-access/monthly-usage-report/{club}/daily-reports

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/{club}/daily-reports \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách báo cáo hằng tháng đã nhập cho quản trị viên

Tham số

organisationId `string` (bắt buộc) ID tổ chức

Điểm cuối

GET /api/saas-billing/extended-access/usage-report/imported

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/imported \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về báo cáo CSV về mức sử dụng camera giám sát trong 30 ngày gần nhất của tất cả cơ sở.

Tham số

club `string` (tùy chọn) ID câu lạc bộ month `string` (tùy chọn) tháng của báo cáo ở dạng số. 1 = tháng Một, 2 = tháng Hai, v.v. year `string` (tùy chọn) năm của báo cáo ở dạng số, ví dụ: 2021

Điểm cuối

GET /api/saas-billing/extended-access/monthly-usage-report/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về báo cáo sử dụng định kỳ của cơ sở.

Tham số

club `string` (tùy chọn) ID câu lạc bộ periodStart `string` (tùy chọn) Ngày bắt đầu của kỳ ở định dạng YYYY-MM-DD periodEnd `string` (tùy chọn) Ngày kết thúc của kỳ ở định dạng YYYY-MM-DD

Điểm cuối

GET /api/saas-billing/extended-access/periodical-usage-report/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/periodical-usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Gói các chứng từ thanh toán dạng PDF trong một tệp ZIP duy nhất, kết hợp nhiều loại chứng từ: hóa đơn nền tảng (theo tháng sử dụng), biên lai nạp tiền ví SaaS và biên lai nạp tiền Model Router. Phiên bản hàng loạt của các endpoint invoices.zip / receipts.zip theo từng loại, dành cho thẻ Invoices & Receipts hợp nhất. Mọi tháng/id được yêu cầu phải tương ứng với một chứng từ thuộc sở hữu của cơ sở; chỉ cần một giá trị không hợp lệ là toàn bộ gói sẽ thất bại.

Tham số

clubID `string` (bắt buộc) invoiceMonths `string` (tùy chọn) Các tháng sử dụng phân tách bằng dấu phẩy ở định dạng YYYY-MM walletIds `string` (tùy chọn) Các ID giao dịch nạp tiền ví SaaS phân tách bằng dấu phẩy aiIds `string` (tùy chọn) Các ID giao dịch nạp tiền Model Router phân tách bằng dấu phẩy

Điểm cuối

GET /api/clubs/{clubID}/saas-billing/documents.zip

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/documents.zip \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm ghi chú vào một bản ghi hằng tháng

Tham số

recordID `string` (tùy chọn) ID của bản ghi cần lấy note `string` (tùy chọn) Ghi chú cần thêm vào bản ghi

Điểm cuối

POST /api/saas-billing/monthly-records/{recordID}/notes

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{recordID}/notes \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách bản ghi thanh toán SaaS hằng tháng

Tham số

club `string` (tùy chọn) ID của cơ sở cần lấy month `string` (tùy chọn) Tháng thanh toán ở định dạng YYYY-MM

Điểm cuối

GET /api/saas-billing/monthly-records/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách bản ghi thanh toán SaaS hằng tháng bị lỗi hoặc cần xác thực 3D Secure

Tham số

clubID `string` (tùy chọn) ID của cơ sở cần lấy các bản ghi hằng tháng bị lỗi

Điểm cuối

GET /api/clubs/:clubID/saas-billing/flagged

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/:clubID/saas-billing/flagged \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về TẤT CẢ bản ghi thanh toán SaaS hằng tháng (sổ hóa đơn) của một cơ sở, tháng thanh toán mới nhất trước. Phiên bản trong phạm vi cơ sở của endpoint paginate-monthly-records chỉ dành cho quản trị viên, phục vụ thẻ "Invoices & Receipts" dành cho khách hàng trong ứng dụng Billing & Cost Management.

Tham số

clubID `string` (tùy chọn) ID của cơ sở cần liệt kê các bản ghi hằng tháng

Điểm cuối

GET /api/clubs/{clubID}/saas-billing/monthly-records

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/monthly-records \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách bản ghi thanh toán SaaS hằng tháng

Tham số

organisationId `string` (tùy chọn) ID tổ chức month `string` (tùy chọn) Tháng ở định dạng MM. year `string` (tùy chọn) Năm ở định dạng YYYY. filters `string` (tùy chọn) Các bộ lọc chuỗi truy vấn do Datatable tạo. order `string` (tùy chọn) Chuỗi truy vấn do Datatable tạo.

Điểm cuối

GET /api/saas-billing/monthly-records

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/monthly-records \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thử lại các khoản thanh toán thất bại của một cơ sở

Tham số

clubID `string` (tùy chọn) ID của cơ sở cần lấy các bản ghi hằng tháng bị lỗi

Điểm cuối

PUT /api/clubs/:clubID/saas-billing/retry-failed-payments

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/:clubID/saas-billing/retry-failed-payments \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật một bản ghi hằng tháng

Tham số

recordID `string` (tùy chọn) ID của bản ghi cần lấy status `string` (tùy chọn) Trạng thái cần cập nhật cho bản ghi

Điểm cuối

PUT /api/saas-billing/monthly-records/{recordID}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{recordID} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Kiểm tra xem các khoản thanh toán đã thành công chưa và cập nhật trạng thái của bản ghi

Tham số

clubID `string` (tùy chọn) recordID `string` (tùy chọn) ID của bản ghi cần lấy

Điểm cuối

PUT /api/clubs/{clubID}/saas-billing/monthly-records/{recordID}/validate

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/monthly-records/{recordID}/validate \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thêm một phương thức thanh toán cho một cơ sở.

Tham số

clubID `string` (tùy chọn)

Điểm cuối

POST /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Đồng bộ các phương thức thanh toán của một cơ sở với Stripe.

Tham số

clubID `string` (tùy chọn)

Điểm cuối

PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về ngân sách chi tiêu của cơ sở cùng số liệu từ đầu tháng đến nay (MTD)/dự báo đã tính.

Tham số

clubID `string` (tùy chọn)

Điểm cuối

GET /api/clubs/{clubID}/saas-billing/budget

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/budget \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo/cập nhật/xóa ngân sách chi tiêu của cơ sở.

Tham số

clubID `string` (tùy chọn) body `object` (tùy chọn)

Điểm cuối

PUT /api/clubs/{clubID}/saas-billing/budget

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/budget \
  -H "x-api-key: YOUR_API_KEY"

Xóa một phương thức thanh toán khỏi cài đặt thanh toán của cơ sở.

Tham số

clubID `string` (tùy chọn) paymentMethodID `string` (tùy chọn)

Điểm cuối

DELETE /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy cài đặt thanh toán của một cơ sở.

Tham số

clubID `string` (tùy chọn)

Điểm cuối

GET /api/clubs/{clubID}/saas-billing/payment-settings

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật cài đặt thanh toán của một cơ sở.

Tham số

clubID `string` (tùy chọn) lockedOut `boolean` (tùy chọn) Cơ sở có bị khóa khỏi hệ thống hay không. pauseBilling `boolean` (tùy chọn) Có tạm dừng thanh toán tự động cho cơ sở hay không. customerID `string` (tùy chọn) Thêm giá trị này sẽ cập nhật ID khách hàng Stripe của cơ sở. deleteSourceID `string` (tùy chọn) Có xóa khách hàng nguồn khỏi Stripe hay không.

Điểm cuối

PUT /api/clubs/{clubID}/saas-billing/payment-settings

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy tháng thanh toán sớm nhất của tất cả cơ sở.

Tham số

clubID `string` (tùy chọn)

Điểm cuối

GET /api/saas-billing/payment-settings/earliest-billed-month

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/payment-settings/earliest-billed-month \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các tài khoản có thể gỡ khóa thanh toán cho một cơ sở, theo thứ tự ưu tiên: người dùng có mô-đun thanh toán trước, quản trị viên tổ chức chỉ là phương án dự phòng khi không có ai có mô-đun đó.

Tham số

clubID `string` (bắt buộc)

Điểm cuối

GET /api/clubs/{clubID}/saas-billing/lockout-contacts

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/lockout-contacts \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Phân trang qua tất cả cơ sở trong hệ thống và trả về ID khách hàng của từng cơ sở.

Tham số

clubID `string` (tùy chọn) organisationId `string` (tùy chọn) ID tổ chức

Điểm cuối

GET /api/saas-billing/payment-settings/customer-ids

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/payment-settings/customer-ids \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Đặt phương thức thanh toán chính cho một cơ sở.

Tham số

clubID `string` (tùy chọn)

Điểm cuối

PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}/primary

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}/primary \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật hồ sơ thanh toán của một cơ sở.

Tham số

clubID `string` (tùy chọn) invoiceEntity `string` (tùy chọn) billingContacts `string` (tùy chọn) Danh sách UUID của các liên hệ KYC ccEmails `string` (tùy chọn) Danh sách email nhận bản sao (CC) hóa đơn

Điểm cuối

PUT /api/clubs/{clubID}/saas-billing/payment-settings/billing-profile

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/billing-profile \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật một phương thức thanh toán của một cơ sở.

Tham số

clubID `string` (tùy chọn) cardID `string` (tùy chọn)

Điểm cuối

PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{cardID}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{cardID} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về bảng phân tích theo từng cơ sở của tất cả các khoản phí sản phẩm áp dụng và các mục bổ sung để xuất CSV. Phân giải thứ bậc ghi đè toàn cầu/vùng/cơ sở cho mọi cơ sở mà người dùng có quyền truy cập.

Tham số

organisationId `string` (bắt buộc) ID tổ chức cho ACL

Điểm cuối

GET /api/saas-billing/charges-config/export

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/charges-config/export \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về cấu hình phí của một đối tượng cụ thể

Tham số

clubId `string` (tùy chọn) ID của cơ sở cần lấy cấu hình phí

Điểm cuối

GET /api/saas-billing/charges-config/{clubId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/charges-config/{clubId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tóm tắt thanh toán của tổ chức sở hữu cơ sở này: phạm vi bên thanh toán đang có hiệu lực, mọi thay đổi hợp nhất đã lên lịch và bên gọi có được quản lý nút bật/tắt hợp nhất hay không.

Tham số

clubID `string` (bắt buộc)

Điểm cuối

GET /api/clubs/{clubID}/saas-billing/org/summary

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/org/summary \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Các bản ghi hằng tháng hợp nhất của tổ chức (bảng sao kê) kèm phân tích theo từng cơ sở, mới nhất trước. Để trống cho đến khi tháng hợp nhất đầu tiên của tổ chức được quyết toán.

Tham số

clubID `string` (bắt buộc)

Điểm cuối

GET /api/clubs/{clubID}/saas-billing/org/monthly-records

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/org/monthly-records \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tóm tắt ví trả trước: số dư, các khoản trừ sử dụng từ đầu tháng đến nay, cấu hình tự động nạp tiền, phương thức thanh toán.

Tham số

clubID `string` (bắt buộc)

Điểm cuối

GET /api/clubs/{clubID}/saas-billing/wallet

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Sổ cái ví, mới nhất trước. Ví trong phạm vi tổ chức bao gồm các dòng của tất cả cơ sở (mỗi dòng mang clubID gốc của nó).

Tham số

clubID `string` (bắt buộc) limit `string` (tùy chọn) types `string` (tùy chọn) các loại giao dịch phân tách bằng dấu phẩy from `string` (tùy chọn) to `string` (tùy chọn) cursor `string` (tùy chọn) nextCursor từ trang trước

Điểm cuối

GET /api/clubs/{clubID}/saas-billing/wallet/transactions

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/transactions \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Biên lai PDF có thương hiệu cho một giao dịch ví (nạp tiền và ghi có).

Tham số

clubID `string` (bắt buộc) txId `string` (bắt buộc)

Điểm cuối

GET /api/clubs/{clubID}/saas-billing/wallet/transactions/{txId}/receipt.pdf

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/transactions/{txId}/receipt.pdf \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Gói các biên lai PDF có thương hiệu cho các giao dịch nạp tiền ví đã chọn, dưới dạng ZIP. Mọi id phải là một lần nạp tiền (bằng thẻ hoặc hóa đơn) thuộc ví của cơ sở này; các khoản trừ sử dụng và điều chỉnh không có biên lai và sẽ bị từ chối.

Tham số

clubID `string` (bắt buộc) ids `string` (bắt buộc) Các ID giao dịch phân tách bằng dấu phẩy (tối đa 50)

Điểm cuối

GET /api/clubs/{clubID}/saas-billing/wallet/transactions/receipts.zip

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/transactions/receipts.zip \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trừ tiền từ thẻ thanh toán SaaS đã lưu để thêm số dư trả trước. Trả về requires_action + clientSecret khi cần xác thực 3DS.

Tham số

clubID `string` (bắt buộc) body `object` (tùy chọn)

Điểm cuối

POST /api/clubs/{clubID}/saas-billing/wallet/topup

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/topup \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Hoàn tất một lần nạp tiền ví sau khi ứng dụng hoàn tất xác thực 3DS. Có tính lũy đẳng.

Tham số

clubID `string` (bắt buộc)

Điểm cuối

POST /api/clubs/{clubID}/saas-billing/wallet/topup/confirm

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/topup/confirm \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật quy tắc tự động nạp tiền của cơ sở (lưu trên dòng ghi đè hồ sơ thanh toán của cơ sở).

Tham số

clubID `string` (bắt buộc) body `object` (tùy chọn)

Điểm cuối

PATCH /api/clubs/{clubID}/saas-billing/wallet/auto-topup

Yêu cầu mẫu

curl -X PATCH https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/auto-topup \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Các hóa đơn nạp tiền cho ví của cơ sở này (phương thức thanh toán bằng hóa đơn), mới nhất trước.

Tham số

clubID `string` (bắt buộc)

Điểm cuối

GET /api/clubs/{clubID}/saas-billing/wallet/invoices

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/invoices \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Yêu cầu một hóa đơn nạp tiền thanh toán theo mã tham chiếu (chỉ dành cho phương thức thanh toán bằng hóa đơn). Mỗi ví có tối đa một hóa đơn đang chờ; yêu cầu thứ hai sẽ trả về hóa đơn hiện có với alreadyPending=true.

Tham số

clubID `string` (bắt buộc) body `string` (tùy chọn) { amountCents: number }

Điểm cuối

POST /api/clubs/{clubID}/saas-billing/wallet/topup-invoice

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/topup-invoice \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách đơn hàng của cơ sở.

Tham số

facilityID `string` (tùy chọn)

Điểm cuối

GET /api/store/facilities/:facilityID/orders

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/store/facilities/:facilityID/orders \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về danh sách sản phẩm khả dụng cho cơ sở.

Tham số

clubID `string` (bắt buộc) search `string` (tùy chọn) limit `string` (tùy chọn) page `string` (tùy chọn) Số trang để phân trang (bắt đầu từ 1).

Điểm cuối

GET /api/store/clubs/{clubID}/products

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/store/clubs/{clubID}/products \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các bản ghi Stripe của cơ sở.

Tham số

club `string` (bắt buộc) fromDate `string` (tùy chọn) Dấu thời gian Unix toDate `string` (tùy chọn) Dấu thời gian Unix socketID `string` (bắt buộc) Mã định danh duy nhất cho yêu cầu socket

Điểm cuối

GET /api/club/{club}/stripe/records

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/records \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Hủy một payment intent

Tham số

club `string` (bắt buộc) paymentIntent `string` (tùy chọn)

Điểm cuối

GET /api/club/{club}/stripe/payment-intent/:paymentIntent/cancel

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/payment-intent/:paymentIntent/cancel \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo một Stripe Account Session cho các thành phần nhúng

Tạo một Stripe Account Session cho một tài khoản được kết nối. Trả về client_secret dùng để khởi tạo các thành phần nhúng Connect (tranh chấp, chi trả, quản lý tài khoản, tài liệu).

Nội dung yêu cầu

Điểm cuối

POST /api/stripe/account-session

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/stripe/account-session \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Tạo một liên kết dùng một lần đến trang KYC của Stripe cho một tài khoản được kết nối.

Tham số

club `string` (bắt buộc)

Điểm cuối

GET /api/club/{club}/stripe/generate-kyc-token

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/generate-kyc-token \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy thông tin chi tiết tài khoản của một tài khoản Stripe được kết nối trong quy trình KYC.

Tham số

club `string` (bắt buộc)

Điểm cuối

GET /api/club/{club}/stripe/connect-account-details

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/connect-account-details \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Trả về toàn bộ lịch sử yêu cầu hỗ trợ dựa trên Club ID

Tham số

club `string` (bắt buộc) ID nội bộ của câu lạc bộ mà bạn muốn truy cập.

Điểm cuối

GET /api/ticketing/clubtickets/{club}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/ticketing/clubtickets/{club} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy danh sách phòng ban

Điểm cuối

GET /api/ticketing/departments

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/ticketing/departments \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy thông tin chi tiết của một yêu cầu hỗ trợ

Tham số

user `string` (bắt buộc) email của người dùng. ticketNumber `string` (bắt buộc) ID gồm 6 chữ số của yêu cầu hỗ trợ mà bạn muốn truy cập. club `string` (bắt buộc) ID cơ sở đã chọn.

Điểm cuối

GET /api/ticketing/ticket-details/:ticketNumber/:club

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/ticketing/ticket-details/:ticketNumber/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy danh sách chủ đề

Điểm cuối

GET /api/ticketing/topics

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/ticketing/topics \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy tất cả yêu cầu hỗ trợ do người dùng đang đăng nhập tạo. Lưu ý: giá trị này được đặt từ các header do dịch vụ Google SSO cung cấp.

Tham số

user `string` (bắt buộc) Email của người dùng đang đăng nhập

Điểm cuối

GET /api/ticketing/usertickets

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/ticketing/usertickets \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo một yêu cầu hỗ trợ mới

Tham số

club `string` (bắt buộc) ID cơ sở đã chọn.

Điểm cuối

POST /api/ticketing/clubticket/:club

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/ticketing/clubticket/:club \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo một yêu cầu hỗ trợ mới

Tham số

subject `string` (bắt buộc) Tiêu đề của yêu cầu hỗ trợ. message `string` (bắt buộc) Toàn bộ nội dung của yêu cầu hỗ trợ.

Điểm cuối

POST /api/ticketing/userticket

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/ticketing/userticket \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo phản hồi cho một yêu cầu hỗ trợ hiện có

Tham số

subject `string` (bắt buộc) Tiêu đề của yêu cầu hỗ trợ. message `string` (bắt buộc) Toàn bộ nội dung của yêu cầu hỗ trợ.

Điểm cuối

POST /api/ticketing/user-reply

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/ticketing/user-reply \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy tùy chọn của một người dùng

Điểm cuối

GET /api/user-preferences

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/user-preferences \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật tùy chọn của một người dùng

Tham số

body `string` (bắt buộc)

Điểm cuối

PUT /api/user-preferences

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/user-preferences \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Đổi mật khẩu người dùng

Đổi mật khẩu của người dùng. Yêu cầu xác minh OTP nếu người dùng có số điện thoại, hoặc yêu cầu thêm số điện thoại nếu chưa có.

Nội dung yêu cầu

Điểm cuối

POST /api/user/change-password

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/user/change-password \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Kiểm tra trạng thái 2FA của người dùng

Trả về việc 2FA có được bật cho người dùng hay không và có vai trò nào của họ bắt buộc 2FA hay không

Điểm cuối

GET /api/user/check-2fa-status

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/user/check-2fa-status \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các tổ chức, cơ sở và vùng mà người dùng có quyền truy cập đối với một mô-đun cụ thể.

Tham số

moduleId `string` (bắt buộc)

Điểm cuối

POST /api/user/me/modules/{moduleId}/org-access

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/user/me/modules/{moduleId}/org-access \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo một 'Yêu cầu liên kết' từ người dùng cuối, yêu cầu 'Tham gia' một cơ sở.

Tham số

body `string` (bắt buộc) Đối tượng JSON của câu lạc bộ mới cần thêm vào hệ thống.

Điểm cuối

POST /api/user/linkclub

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/user/linkclub \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê tất cả cơ sở mà người dùng được cấp quyền.

Điểm cuối

GET /api/user/listauthorised

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/user/listauthorised \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Gửi OTP qua hai kênh (email + SMS)

Gửi mã OTP đến cả địa chỉ email của người dùng và một số điện thoại được chỉ định. Dùng cho các thao tác yêu cầu bảo mật cao như xác minh số điện thoại lần đầu. Endpoint này chỉ gửi OTP và không sửa đổi dữ liệu người dùng.

Nội dung yêu cầu

Điểm cuối

POST /api/user/send-dual-otp

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/user/send-dual-otp \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Gửi OTP đến số điện thoại hoặc email

Gửi mã OTP đến số điện thoại (SMS) hoặc địa chỉ email của người dùng để xác minh

Nội dung yêu cầu

Điểm cuối

POST /api/user/send-otp

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/user/send-otp \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Kiểm tra người dùng có quyền truy cập trang nhạy cảm hợp lệ hay không

Trả về việc người dùng có phiên đã xác minh OTP hợp lệ để truy cập các trang nhạy cảm hay không

Điểm cuối

GET /api/user/sensitive-page-access

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/user/sensitive-page-access \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xác minh OTP và cấp quyền truy cập trang nhạy cảm

Xác minh mã OTP và cấp quyền truy cập các trang nhạy cảm trong 1 giờ nếu hợp lệ

Nội dung yêu cầu

Điểm cuối

POST /api/user/sensitive-page-access/verify

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/user/sensitive-page-access/verify \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Thu hồi quyền truy cập trang nhạy cảm (đăng xuất khỏi các trang nhạy cảm)

Thu hồi phiên truy cập trang nhạy cảm hiện tại của người dùng

Điểm cuối

POST /api/user/sensitive-page-access/revoke

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/user/sensitive-page-access/revoke \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Bật hoặc tắt 2FA

Bật hoặc tắt xác thực hai yếu tố cho người dùng. Yêu cầu số điện thoại và xác minh OTP.

Nội dung yêu cầu

Điểm cuối

POST /api/user/toggle-2fa

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/user/toggle-2fa \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Cập nhật hồ sơ của chính người dùng

Cho phép người dùng cập nhật thông tin hồ sơ của chính mình (tên, họ, số điện thoại). Khi thêm số điện thoại lần đầu, cần xác minh OTP qua hai kênh (cả mã qua email và SMS). Khi thay đổi số điện thoại hiện có, chỉ cần OTP qua email.

Nội dung yêu cầu

Điểm cuối

PATCH /api/user/update-profile

Yêu cầu mẫu

curl -X PATCH https://portal.hub.gymsystems.co/api/user/update-profile \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Lấy biểu tượng dựa trên URL.

Điểm cuối

GET /api/website-icon

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/website-icon \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các mẫu mục trong kho mật khẩu

Tham số

organisationId `string` (tùy chọn) Ngữ cảnh tổ chức để kiểm tra quyền truy cập mô-đun

Điểm cuối

GET /api/vault/templates

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/vault/templates \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các mục hiển thị trong kho mật khẩu

Tham số

organisationId `string` (bắt buộc) scope `string` (tùy chọn)

Điểm cuối

GET /api/vault/entries

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/vault/entries \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo một mục trong kho mật khẩu

Điểm cuối

POST /api/vault/entries

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/vault/entries \
  -H "x-api-key: YOUR_API_KEY"

Lấy một mục trong kho mật khẩu mà không hiển thị các giá trị bí mật

Tham số

entryId `string` (bắt buộc) organisationId `string` (bắt buộc)

Điểm cuối

GET /api/vault/entries/{entryId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Cập nhật một mục trong kho mật khẩu

Điểm cuối

PUT /api/vault/entries/{entryId}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa một mục trong kho mật khẩu

Điểm cuối

DELETE /api/vault/entries/{entryId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Hiển thị các trường ẩn hoặc bí mật đã chọn

Điểm cuối

POST /api/vault/entries/{entryId}/reveal

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/vault/entries/{entryId}/reveal \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê tóm tắt các thư mục trong kho mật khẩu

Điểm cuối

GET /api/vault/folders

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/vault/folders \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các mục có mã xác thực

Điểm cuối

GET /api/vault/authenticator

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/vault/authenticator \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các loại node workflow đã đăng ký

Điểm cuối

GET /api/workflow-engine/node-types

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/node-types \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy dữ liệu giờ làm việc của cơ sở mà các khối workflow sử dụng

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/workflow-engine/facility-hours/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/facility-hours/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xem trước người gửi email workflow mang thương hiệu của cơ sở

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/workflow-engine/email-branding/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/email-branding/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê tài nguyên của cơ sở để cấu hình trình kích hoạt

Tham số

facilityId `string` (bắt buộc) resourceType `string` (bắt buộc)

Điểm cuối

GET /api/workflow-engine/resources/{facilityId}/{resourceType}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/resources/{facilityId}/{resourceType} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các workflow của một cơ sở

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/workflow-engine/workflows/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo một workflow nháp từ một đồ thị không rỗng

Trình chỉnh sửa giữ workflow mới ở cục bộ cho đến khi có ít nhất một khối, nên lần lưu đầu tiên sẽ tạo workflow cùng đồ thị trong một lần gọi. Nội dung không có `nodes` sẽ bị từ chối thay vì được lưu.

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/workflow-engine/workflows/{facilityId}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Liệt kê các thông tin xác thực mà workflow của một cơ sở có thể sử dụng

Trả về thông tin xác thực riêng của cơ sở cùng mọi thông tin xác thực được chia sẻ ở cấp thương hiệu hoặc tổ chức của cơ sở. Bí mật không bao giờ được trả về; `hasValue` chỉ cho biết có một bí mật đã được lưu.

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/workflow-engine/credentials/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo một thông tin xác thực workflow

Cấp phạm vi lấy từ `scopeType`; ID thương hiệu và tổ chức được xác định từ cơ sở thay vì nhận từ bên gọi.

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/workflow-engine/credentials/{facilityId}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Cài đặt workflow toàn cơ sở (người nhận thông báo lỗi)

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/workflow-engine/facility-settings/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/facility-settings/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lưu người nhận thông báo lỗi trên toàn cơ sở

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

PUT /api/workflow-engine/facility-settings/{facilityId}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/facility-settings/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Thay thế một thông tin xác thực workflow

Một `secret` rỗng sẽ giữ bí mật đã lưu, nên có thể đổi tên thông tin xác thực mà không cần nhập lại. Không có cách nào đọc lại bí mật.

Tham số

facilityId `string` (bắt buộc) credentialId `string` (bắt buộc)

Điểm cuối

PUT /api/workflow-engine/credentials/{facilityId}/{credentialId}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId}/{credentialId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa một thông tin xác thực workflow

Các node tham chiếu đến thông tin xác thực này sẽ bị chặn (fail closed) ở lần gọi tiếp theo, kể cả trong các workflow đã xuất bản, vì ảnh chụp chỉ lưu tham chiếu.

Tham số

facilityId `string` (bắt buộc) credentialId `string` (bắt buộc)

Điểm cuối

DELETE /api/workflow-engine/credentials/{facilityId}/{credentialId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId}/{credentialId} \
  -H "x-api-key: YOUR_API_KEY"

Lấy URL webhook của trình kích hoạt workflow

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc) nodeId `string` (bắt buộc)

Điểm cuối

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xoay vòng URL webhook của trình kích hoạt workflow

Vô hiệu hóa ngay URL trước đó.

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc) nodeId `string` (bắt buộc)

Điểm cuối

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook/rotate

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook/rotate \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Lấy một workflow theo id

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc)

Điểm cuối

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo hoặc cập nhật một workflow nháp

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

PUT /api/workflow-engine/workflows/{facilityId}/{workflowId}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Cập nhật tên và/hoặc mô tả của workflow

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

PATCH /api/workflow-engine/workflows/{facilityId}/{workflowId}

Yêu cầu mẫu

curl -X PATCH https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Xóa một workflow và các phiên bản của nó

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc)

Điểm cuối

DELETE /api/workflow-engine/workflows/{facilityId}/{workflowId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Nhân bản một workflow thành một bản nháp mới chưa kích hoạt

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc)

Điểm cuối

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/duplicate

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/duplicate \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xuất bản bản nháp hiện tại (ảnh chụp phiên bản không thể thay đổi)

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/publish

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/publish \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Đặt lại bản nháp về phiên bản đã xuất bản gần nhất

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc)

Điểm cuối

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/discard

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/discard \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Bật hoặc tắt một workflow

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

PATCH /api/workflow-engine/workflows/{facilityId}/{workflowId}/active

Yêu cầu mẫu

curl -X PATCH https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/active \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Tạo hoặc chỉnh sửa đồ thị workflow bằng AI

Tham số

facilityId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/workflow-engine/generate/{facilityId}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/generate/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Liệt kê các mô hình mà một node Agent có thể chạy cho cơ sở này

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/workflow-engine/agent-models/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-models/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các công cụ MCP mà một node Agent có thể gắn cho cơ sở này

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/workflow-engine/agent-tools/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-tools/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm kiếm các cuộc hội thoại Agent đã lưu của cơ sở này (liên kết Conversation key)

Tham số

facilityId `string` (bắt buộc) deviceId `string` (tùy chọn) Giới hạn trong các cuộc hội thoại của một thiết bị Agent (deviceId đã cấu hình của node) q `string` (tùy chọn) So khớp chuỗi con không phân biệt chữ hoa chữ thường trên Conversation key, session id hoặc tên thiết bị limit `integer` (tùy chọn) offset `integer` (tùy chọn)

Điểm cuối

GET /api/workflow-engine/agent-conversations/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-conversations/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm kiếm các cuộc hội thoại được lưu trên chính thiết bị Agent của cơ sở

Liệt kê các phiên của chính thiết bị (các cuộc hội thoại ở thanh bên của giao diện Agent) để một workflow có thể tiếp tục một cuộc hội thoại hiện có cùng ngữ cảnh của nó. Thiết bị sở hữu lịch sử; khi cơ sở có nhiều thiết bị, `deviceId` chọn thiết bị nào (thiết bị đã cấu hình của node). Không kết nối được thiết bị → 502.

Tham số

facilityId `string` (bắt buộc) deviceId `string` (tùy chọn) Thiết bị Agent đã cấu hình của node; bỏ trống để dùng thiết bị duy nhất của cơ sở q `string` (tùy chọn) So khớp chuỗi con không phân biệt chữ hoa chữ thường trên tiêu đề hoặc id của phiên limit `integer` (tùy chọn) offset `integer` (tùy chọn)

Điểm cuối

GET /api/workflow-engine/agent-device-sessions/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-device-sessions/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm kiếm các bảng trên kanban của thiết bị Agent của cơ sở

Cung cấp dữ liệu cho bộ chọn Board ID của khối Agent: Kanban. So khớp chuỗi con không phân biệt chữ hoa chữ thường trên tên hoặc slug của bảng; `current` là slug của bảng đang hoạt động trên thiết bị để bộ chọn tác vụ dùng làm phạm vi mặc định. Khi cơ sở có nhiều thiết bị, `deviceId` chọn thiết bị nào. Không kết nối được thiết bị → 502.

Tham số

facilityId `string` (bắt buộc) deviceId `string` (tùy chọn) Thiết bị Agent đã cấu hình của node; bỏ trống để dùng thiết bị duy nhất của cơ sở q `string` (tùy chọn) So khớp chuỗi con không phân biệt chữ hoa chữ thường trên tên hoặc slug của bảng limit `integer` (tùy chọn) offset `integer` (tùy chọn)

Điểm cuối

GET /api/workflow-engine/kanban-boards/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/kanban-boards/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tìm kiếm các tác vụ của một bảng trên kanban của thiết bị Agent của cơ sở

Cung cấp dữ liệu cho bộ chọn Task ID của khối Agent: Kanban. So khớp chuỗi con không phân biệt chữ hoa chữ thường trên id, tiêu đề hoặc nội dung của tác vụ; tác vụ thuộc từng bảng (thiết bị không hỗ trợ tìm kiếm liên bảng), nên `board` giới hạn phạm vi truy xuất; bỏ trống để dùng bảng đang hoạt động trên thiết bị. Không kết nối được thiết bị → 502.

Tham số

facilityId `string` (bắt buộc) deviceId `string` (tùy chọn) Thiết bị Agent đã cấu hình của node; bỏ trống để dùng thiết bị duy nhất của cơ sở board `string` (tùy chọn) Slug của bảng cần liệt kê; bỏ trống để dùng bảng đang hoạt động trên thiết bị q `string` (tùy chọn) So khớp chuỗi con không phân biệt chữ hoa chữ thường trên id, tiêu đề hoặc nội dung của tác vụ limit `integer` (tùy chọn) offset `integer` (tùy chọn)

Điểm cuối

GET /api/workflow-engine/kanban-tasks/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/kanban-tasks/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các mẫu workflow được tuyển chọn, đã lọc cho cơ sở này

Tham số

facilityId `string` (bắt buộc)

Điểm cuối

GET /api/workflow-engine/templates/{facilityId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/templates/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo một đoạn đồ thị từ mẫu cho bản nháp đang mở

Tham số

facilityId `string` (bắt buộc) templateId `string` (bắt buộc)

Điểm cuối

POST /api/workflow-engine/templates/{facilityId}/{templateId}

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/templates/{facilityId}/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Ngữ cảnh bộ chọn phạm vi cho trang quản trị mẫu (các cấp quản trị)

Điểm cuối

GET /api/workflow-engine/template-admin/context

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/context \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Liệt kê các mẫu mà bên gọi có thể quản trị, kèm các cờ quyền

Điểm cuối

GET /api/workflow-engine/template-admin

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Tạo một mẫu (các cấp quản trị)

Nội dung yêu cầu

Điểm cuối

POST /api/workflow-engine/template-admin

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/template-admin \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Chi tiết mẫu bao gồm đồ thị, dành cho trình chỉnh sửa quản trị

Điểm cuối

GET /api/workflow-engine/template-admin/{templateId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Thay thế một mẫu (tổ chức sở hữu)

Điểm cuối

PUT /api/workflow-engine/template-admin/{templateId}

Yêu cầu mẫu

curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Xóa mềm một mẫu (tổ chức sở hữu)

Điểm cuối

DELETE /api/workflow-engine/template-admin/{templateId}

Yêu cầu mẫu

curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Nhân bản một mẫu đang hiển thị vào một phạm vi đích mà bên gọi có thể sử dụng

Nội dung yêu cầu

Điểm cuối

POST /api/workflow-engine/template-admin/{templateId}/duplicate

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId}/duplicate \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Chạy đồ thị đã xuất bản của một workflow từ trình kích hoạt thủ công

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/run

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/run \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Kiểm thử bản nháp đã lưu mà không xuất bản

Thực thi đồ thị nháp hiện tại và ghi lại kết quả với `mode: test` và không có `versionId`. Việc xuất bản, cờ live và `publishedVersionId` không bao giờ bị thay đổi. Theo mặc định, các tác động phụ được mô phỏng; `sideEffects: live` còn yêu cầu thêm `confirmLiveSideEffects: true`.

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/test

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/test \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Kiểm thử một node workflow nằm trong danh sách cho phép

Thực thi một node có thể kiểm thử độc lập từ bản nháp đã lưu. Giá trị biến có thể được cung cấp từ các bước chạy đã ghi lại. Các phương thức HTTP làm thay đổi dữ liệu cần xác nhận rõ ràng.

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/test-node

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/test-node \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Liệt kê các lần chạy gần đây của một workflow

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc)

Điểm cuối

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Đọc một lần chạy (trạng thái + các bước theo thứ tự)

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc) executionId `string` (bắt buộc)

Điểm cuối

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Hủy bước Delay đang chờ mà một lần chạy đang dừng tại đó

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc) executionId `string` (bắt buộc)

Điểm cuối

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/cancel

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/cancel \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Chạy lại một lần chạy đã hoàn tất từ dữ liệu kích hoạt đã ghi lại

`mode: published` thực thi lại đúng phiên bản mà lần chạy gốc đã được ghim, với các tác động phụ thực. `mode: draft-test` thực thi lại bản nháp hiện tại dưới dạng kiểm thử mô phỏng. Không thể chạy lại một lần chạy có dữ liệu kích hoạt đã bị cắt bớt khi ghi.

Tham số

facilityId `string` (bắt buộc) workflowId `string` (bắt buộc) executionId `string` (bắt buộc)

Nội dung yêu cầu

Điểm cuối

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/retry

Yêu cầu mẫu

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/retry \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Phản hồi

{}

Tra cứu theo chỉ mục các workflow chứa một loại node

Tham số

nodeType `string` (bắt buộc) facilityId `string` (tùy chọn) organisationId `string` (tùy chọn)

Điểm cuối

GET /api/workflow-engine/master-view/{nodeType}

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/master-view/{nodeType} \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Proxy chuyển hướng OAuth white-label (Connected Apps)

Phản hồi 302 công khai, không cần xác thực, chuyển tiếp callback của nhà cung cấp OAuth đến callback xác thực của nền tảng công cụ thượng nguồn, giữ nguyên chuỗi truy vấn. Cho phép các ứng dụng OAuth do PH sở hữu đăng ký URI chuyển hướng performancehub.co để tên miền của nhà cung cấp thượng nguồn không bao giờ xuất hiện trên thanh địa chỉ (cần cho dự án ứng dụng OAuth tùy chỉnh trong tương lai; không ảnh hưởng khi dùng xác thực được quản lý).

Điểm cuối

GET /guest/connected-apps/oauth-callback

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/oauth-callback \
  -H "x-api-key: YOUR_API_KEY"

Trang hoàn tất chuỗi kết nối (Connected Apps)

Trang "bạn có thể đóng cửa sổ này" gọn nhẹ cho thẻ OAuth mà chuỗi kết nối đã chạy trong đó. Gửi kết quả (bộ công cụ/toolkit đã kết nối + ID tài khoản mới, hoặc toolkit bị lỗi) trở lại thẻ marketplace qua window.opener.postMessage cùng nguồn gốc; khi liên kết với cửa sổ mở đã bị cắt, trang sẽ chuyển sang liên kết sâu vào ứng dụng ph-ai-agent để tái hiện trang đích trong ứng dụng. Chỉ mang tính thông tin: không chứa bí mật và không thực hiện thao tác ghi nào.

Tham số

connected `string` (tùy chọn) ID bộ công cụ hoặc slug toolkit đã kết nối xong (trường hợp thành công). accounts `string` (tùy chọn) Các ID tài khoản đã kết nối do chuỗi tạo, phân tách bằng dấu phẩy. connectError `string` (tùy chọn) Slug toolkit có bước bị lỗi (trường hợp thất bại).

Điểm cuối

GET /guest/connected-apps/finish

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/finish \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}

Callback chuỗi kết nối bộ công cụ (Connected Apps)

Bước callback OAuth cho luồng kết nối bộ công cụ bằng một lần nhấp. JWT trạng thái đã ký (HS256, TTL 30 phút) mã hóa { clubID, deviceId, suite, toolkits, step, caids }: các tài khoản kết nối với đúng thiết bị agent đó, và caids tích lũy ID tài khoản mà mỗi bước đã tạo (lần chuyển hướng cuối cùng về ứng dụng mang theo các ID này để marketplace đề xuất đặt nhãn cho tài khoản mới). Đánh dấu toolkit của bước là đã kết nối, sau đó chuyển hướng 302 đến Connect Link của toolkit tiếp theo, hoặc đến trang ứng dụng ph-ai-agent (liên kết sâu đến agent) khi bộ công cụ đã hoàn tất. Kết nối một toolkit đơn lẻ cũng chạy qua cùng trình xử lý với một bộ công cụ chỉ có một toolkit.

Tham số

state `string` (bắt buộc) JWT trạng thái chuỗi kết nối đã ký.

Điểm cuối

GET /guest/connected-apps/connect-next

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/connect-next \
  -H "x-api-key: YOUR_API_KEY"

Kích hoạt email thiết lập mật khẩu

Xác thực liên kết đã ký từ email chào mừng, kích hoạt email đặt lại mật khẩu và hiển thị trang xác nhận. Không cần xác thực.

Tham số

email `string` (bắt buộc) Địa chỉ email của người dùng sig `string` (bắt buộc) Chữ ký HMAC cho email

Điểm cuối

GET /guest/setup-password

Yêu cầu mẫu

curl -X GET https://portal.hub.gymsystems.co/guest/setup-password \
  -H "x-api-key: YOUR_API_KEY"

Phản hồi

{}