Pendahuluan

Selamat datang di Performance Hub API. API ini mengelola data klub & sistem utama yang terintegrasi dengan klub Anda dan sistem eksternalnya, dan bukan API yang dapat digunakan secara publik. Untuk informasi lebih lanjut tentang penggunaan berbagai sistem Performance Hub yang didukung API ini, lihat entri masing-masing sistem yang Anda perlukan di [dokumentasi Performance Hub](https://docs.performancehub.co).

URL Dasar

https://portal.hub.gymsystems.co

Autentikasi

Detail autentikasi akan diberikan setelah integrasi Anda disetujui.

Peristiwa "giliran agen selesai" yang dilaporkan perangkat (pemicu web push)

Dipanggil oleh sidecar perangkat Agen AI yang telah dipasangkan (tidak pernah oleh browser) ketika proses agen yang dimulai dari web UI selesai dan berjalan lebih lama dari ambang notifikasi perangkat. Diautentikasi dengan JWT HS256 per perangkat yang berumur pendek (aud 'events'). Diduplikasi per perangkat+sesi+mulai dan dibatasi lajunya per perangkat, lalu dikirim ke langganan push HTML5 milik pengguna yang memulainya dengan deep link ke percakapan.

Isi Permintaan

Titik akhir

POST /ai/events/agent-turn-complete

Contoh Permintaan

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 '{}'

Respons

{}

Notifikasi push yang dimulai agen (skill ph-notify)

Dipanggil oleh sidecar perangkat Agen AI yang telah dipasangkan atas nama agen di perangkat (skill ph-notify) untuk mengirim notifikasi apa pun ke browser dan perangkat seluler pengguna. Diautentikasi dengan JWT HS256 per perangkat yang berumur pendek (aud 'events'). Pengguna tujuan harus memiliki akses ke perangkat (kebijakan akses per agen); jika tidak diisi, notifikasi dikirim ke pemilik perangkat. Dibatasi lajunya per perangkat, terpisah dari peristiwa giliran selesai.

Isi Permintaan

Titik akhir

POST /ai/events/agent-notify

Contoh Permintaan

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 '{}'

Respons

{}

Unggah gambar notifikasi (skill ph-notify)

Menerima isi gambar mentah dari perangkat yang telah dipasangkan (JWT aud 'events') dan menyimpannya di bucket publik notify-media dengan kunci UUID yang tidak dapat ditebak. Objek terhapus otomatis setelah 7 hari (siklus hidup S3). Mengembalikan URL https publik untuk digunakan sebagai `imageUrl` di /ai/events/agent-notify. Batas 5 MB; hanya png/jpeg/gif/webp.

Isi Permintaan

Titik akhir

POST /ai/media/notify-image

Contoh Permintaan

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 '{}'

Respons

{}

Relay MCP perangkat untuk Connected Apps (alat SaaS eksternal)

Endpoint MCP Streamable-HTTP untuk perangkat Agen AI yang telah dipasangkan (server MCP "connected_apps" pada listener :8790 sidecar perangkat). Diautentikasi dengan JWT HS256 per perangkat berumur pendek (aud 'mcp', kredensial yang sama dengan /mcp) dan dibatasi oleh flag Connected Apps enabled milik AGEN (koneksi berlaku per perangkat agen, bukan per fasilitas). Permintaan dialirkan ke server MCP sesi platform alat upstream milik agen dengan header sesi yang disisipkan di sisi server; kredensial upstream tidak pernah sampai ke perangkat. Nama alat dan merek vendor di-white-label dua arah selama transit. Respons upstream 401/410 (sesi kedaluwarsa) memicu satu kali pembuatan ulang sesi + percobaan ulang.

Titik akhir

POST /mcp/apps

Contoh Permintaan

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

Respons

{}

Cari catatan audit API (akses modul IAM & Admin)

Cari dan filter log akses API dengan kemampuan pemfilteran lanjutan. Pengguna hanya dapat melihat log untuk organisasi yang dapat mereka akses.

Parameter

organisationId `string` (opsional) ID Organisasi untuk verifikasi ACL (wajib)

Isi Permintaan

Titik akhir

POST /api/admin/audit-logs/search

Contoh Permintaan

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 '{}'

Respons

{}

Dapatkan statistik catatan audit yang di-cache dari Redis (akses modul IAM & Admin)

Ambil statistik agregat dari cache Redis untuk pemuatan dasbor instan

Parameter

timeWindow `string` (opsional) Rentang waktu untuk statistik (default 12h)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Dapatkan statistik catatan audit (akses modul IAM & Admin)

Ambil statistik agregat untuk dasbor. Dibatasi pada organisasi pengguna.

Parameter

startTime `number` (opsional) Waktu mulai (stempel waktu Unix), default 24 jam yang lalu endTime `number` (opsional) Waktu selesai (stempel waktu Unix), default saat ini

Titik akhir

GET /api/admin/audit-logs/statistics

Contoh Permintaan

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

Respons

{}

Dapatkan data deret waktu untuk catatan audit (akses modul IAM & Admin)

Ambil data deret waktu per blok untuk visualisasi linimasa permintaan

Parameter

timeWindow `string` (opsional) Rentang waktu untuk data deret waktu: - 1h: 1 jam terakhir (blok 10 menit) - 12h: 12 jam terakhir (blok 10 menit) - 24h: 24 jam terakhir (blok 10 menit) - 7d: 7 hari terakhir (blok 1 jam) - 14d: 14 hari terakhir (blok 1 jam)

Titik akhir

GET /api/admin/audit-logs/timeseries

Contoh Permintaan

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

Respons

{}

Dapatkan organisasi yang dapat diakses pengguna untuk catatan audit (akses modul IAM & Admin)

Mengembalikan daftar organisasi yang catatan auditnya dapat dilihat oleh pengguna saat ini

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Panggilan awal untuk membuat klub baru. Perhatikan bahwa hanya objek klub 'template' yang dibuat. Permintaan API kedua kemudian diperlukan untuk memperbarui klub dengan datanya, seperti Jam Buka, Lokasi, URL Media Sosial, dll.

Parameter

body `string` (wajib) Objek JSON klub baru yang akan ditambahkan ke sistem.

Titik akhir

POST /api/admin/clubs/addclub

Contoh Permintaan

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

Respons

{}

Menambahkan pengguna baru ke sistem

Parameter

body `string` (wajib) Objek JSON data pengguna yang ingin Anda tambahkan/perbarui.

Titik akhir

POST /api/users

Contoh Permintaan

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

Respons

{}

Mencantumkan semua pengguna (Akun Google Apps) yang memiliki akses ke sistem/API backoffice

Titik akhir

GET /api/admin/users/listusers

Contoh Permintaan

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

Respons

{}

Cantumkan kunci MCP untuk pengguna (disamarkan). Pengguna dapat mencantumkan kunci mereka sendiri.

Parameter

userId `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Buat kunci API MCP baru untuk pengguna. Pengguna dapat membuat kunci mereka sendiri.

Parameter

userId `string` (wajib) body `object` (opsional)

Titik akhir

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

Contoh Permintaan

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

Cabut/hapus kunci API MCP. Pengguna dapat menghapus kunci mereka sendiri.

Parameter

userId `string` (wajib) keyId `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Hapus peran dari pengguna

Parameter

userId `string` (opsional) Email pengguna yang perannya ingin Anda hapus. roleId `string` (opsional) ID peran yang ingin Anda hapus dari pengguna.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Memperbarui detail profil pengguna yang ada (firstName, lastName, phoneNumber)

Parameter

userId `string` (wajib) Alamat email pengguna body `object` (wajib) Data profil pengguna yang akan diperbarui

Titik akhir

PATCH /api/users/{userId}

Contoh Permintaan

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

Respons

{}

Upsert peran pengguna

Parameter

body `object` (opsional)

Titik akhir

PUT /api/users/{userId}/roles

Contoh Permintaan

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

Respons

{}

Live Services yang berjalan di Agen AI fasilitas (pemilih publikasi)

Mengambil Live Services perangkat yang terdeteksi oleh bridge melalui tunnel untuk pemilih "Publish to Performance Hub" di applet. Memerlukan modul ph-ai-agent DAN akses per perangkat 'open' (syarat yang sama dengan publikasi itu sendiri). Setiap layanan diberi anotasi publishedAppId jika Custom App sudah ada untuk port-nya.

Parameter

club `string` (wajib) device `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Indeks nama ikon MDI yang tertanam di Agen AI fasilitas (pemilih ikon)

Meneruskan indeks ikon MDI yang tertanam di bridge perangkat (GET /__services/icons/mdi/index.json) melalui tunnel. Pemilih publikasi/edit menggunakan katalog bawaan applet (versi tetap 7.4.47 yang sama); SVG aplikasi yang diterbitkan diambil dari paket @mdi/js lokal portal-server. Syarat akses sama dengan pemilih layanan (modul ph-ai-agent + akses per perangkat 'open').

Parameter

club `string` (wajib) device `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Ambil sekumpulan SVG ikon MDI dari Agen AI fasilitas (pratinjau pemilih)

Mengambil hingga 60 glyph MDI bernama dari set ikon yang tertanam di perangkat dalam satu panggilan, disanitasi di sisi server dengan allowlist yang sama dengan yang diterapkan pada ikon aplikasi yang disimpan. Digunakan oleh pemilih ikon untuk menampilkan hasil pencarian; nama yang tidak dikenal dikembalikan sebagai null.

Parameter

club `string` (wajib) device `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Cakupan audiens yang dapat dipublikasikan oleh peminta dari fasilitas ini

Batas audiens yang dapat diberikan oleh penerbit untuk pemilih publikasi/edit: fasilitas yang dijangkau oleh peran ph-ai-agent mereka (cakupan multi-fasilitas), serta apakah mereka memiliki kedudukan tingkat organisasi yang diperlukan untuk audiens seluruh brand / seluruh organisasi di brand/organisasi fasilitas ini. Aturan yang sama diterapkan ulang di sisi server saat publikasi/pembaruan (validatePublishAudience); endpoint ini hanya membentuk UI.

Parameter

club `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Rekan pelengkapan otomatis untuk audiens aplikasi pengguna bernama

HANYA mencari pengguna yang sudah dapat dilihat oleh peminta, yaitu orang-orang yang perannya tumpang tindih dengan setidaknya satu fasilitas/wilayah/organisasi dari akses ph-ai-agent milik peminta. Kueri minimal 2 karakter dan batas 10 hasil membuat endpoint ini tidak berguna untuk scraping; himpunan jangkauan yang sama diterapkan ulang di sisi server saat audiens disimpan.

Parameter

club `string` (wajib) q `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Publikasikan Live Service Agen AI sebagai Custom App Performance Hub

Mendaftarkan aplikasi web yang dihosting oleh Agen AI fasilitas (Live Service yang terdeteksi oleh bridge) sebagai item menu samping "Custom Apps" untuk audiens yang dipilih. Memerlukan modul ph-ai-agent di fasilitas ini DAN akses per perangkat 'open'; audiens dibatasi oleh cakupan peran penerbit sendiri (Anda tidak pernah dapat memublikasikan lebih luas dari jangkauan Anda). Identitas layanan ditentukan secara LANGSUNG dari daftar /__services perangkat; skema http/https tidak pernah disimpan.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Custom Apps yang diterbitkan dan terlihat di fasilitas ini

Mengembalikan aplikasi terbitan yang aktif dan audiensnya mencakup fasilitas ini, dalam bentuk yang ditampilkan menu samping (appId, name, icon, description). Audiens ditentukan ulang secara langsung pada setiap panggilan sehingga perubahan akses langsung berlaku.

Parameter

club `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Aplikasi terbitan yang dikelola dari fasilitas ini (tampilan penerbit)

Baris aplikasi lengkap untuk aplikasi yang fasilitas UTAMA-nya adalah klub ini, untuk daftar kelola "Published Apps" di applet. Setiap baris diberi anotasi canManage untuk pengguna yang meminta (penerbit).

Parameter

club `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Buat token penampil bercakupan layanan untuk Custom App yang diterbitkan

Mengembalikan URL bertanda tangan + token berumur pendek yang digunakan browser untuk membuka SATU aplikasi terbitan langsung di relay gateway regional perangkat. Token membawa klaim svc yang menyebutkan port layanan, sehingga gateway membatasi sesi ke /__services/proxy//; chat/terminal agen tidak pernah dapat dijangkau dengan token ini. Penampil memerlukan modul custom-apps di fasilitas yang tercakup dalam audiens aplikasi; mereka TIDAK memerlukan modul ph-ai-agent atau akses agen per perangkat.

Parameter

club `string` (wajib) appId `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Atribusi dukungan untuk Custom App yang diterbitkan (kontak pemilik)

Siapa yang mendukung aplikasi terbitan pengguna ini: email penerbit (atau pemilik agen hosting sebagai cadangan). Ditampilkan pada panel offline/error penampil sehingga permintaan dukungan dikirim ke pemilik aplikasi, bukan ke Performance Hub; aplikasi terbitan bukan bagian dari dukungan inti PH. Audiens aplikasi diperiksa ulang terlebih dahulu; penampil yang tidak pernah diberi akses ke aplikasi tidak mendapatkan informasi apa pun. Aplikasi yang dijeda tetap dapat diselesaikan (pemilik juga menangani pertanyaan "mengapa aplikasi ini dijeda?").

Parameter

club `string` (wajib) appId `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Kirim email permintaan dukungan ke pemilik Custom App yang diterbitkan

Mengirim pesan penampil ke kontak dukungan aplikasi (penerbit, atau pemilik agen sebagai cadangan) sebagai email bermerek: To ke pemilik, CC ke penampil (sebagai catatan permintaan mereka), Reply-To ke penampil sehingga pemilik membalas langsung kepada mereka. Aplikasi terbitan dikelola oleh pengguna, sehingga dukungannya tidak masuk ke antrean Performance Hub. Audiens diperiksa ulang; satu permintaan per penampil per aplikasi setiap 15 menit (cooldown Redis, fail-open).

Parameter

club `string` (wajib) appId `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Perbarui Custom App yang diterbitkan (nama, ikon, deskripsi, status, audiens)

Hanya penerbit. Perubahan audiens divalidasi ulang terhadap cakupan peran EDITOR dengan aturan pembatasan yang sama seperti publikasi. Status beralih antara active dan paused (aplikasi yang dijeda hilang dari menu dan menolak pembuatan token).

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Batalkan publikasi Custom App (soft delete)

Hanya penerbit. Melakukan soft delete pada baris registri: aplikasi langsung hilang dari menu dan pembuatan token penampil ditolak; sesi gateway yang sudah diterbitkan berakhir saat token kedaluwarsa.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Alihkan kepemilikan Custom App yang diterbitkan

Mengikuti alur pengalihan pemilik Agen AI: penerbit saat ini atau pemilik akun (modul penagihan) dapat menyerahkan aplikasi ke pengguna lain, yang kemudian mengelolanya. Pemilik baru harus memiliki akses fasilitas di klub utama aplikasi.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Ekspor skill yang disiapkan di Agen AI fasilitas (pemilih berbagi)

Meneruskan daftar ekspor yang disiapkan dari bridge perangkat (GET /__skills/exports) melalui tunnel untuk pemilih "Share a skill" di applet. Ekspor disiapkan oleh proses keamanan/portabilitas ph-skill-sharing di perangkat; setiap entri membawa hasil pemindaian di sisi perangkat. Memerlukan modul ph-ai-agent DAN akses per perangkat 'open' (syarat yang sama dengan publikasi itu sendiri).

Parameter

club `string` (wajib) device `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Publikasikan ekspor skill yang disiapkan sebagai skill bersama BARU (versi draf)

Menarik tarball ekspor bernama yang telah disiapkan dari bridge perangkat melalui tunnel, mengekstraknya di memori (path traversal/symlink/ukuran berlebih ditolak), menjalankan pemindaian keamanan deterministik di sisi cloud, membangun manifes dari frontmatter SKILL.md, menyimpan tarball secara content-addressed di bucket skill privat, dan membuat head skill + versi DRAF. Jika pemindaian memblokir, TIDAK ADA yang disimpan dan temuan dikembalikan. Audiens dibatasi oleh cakupan peran penerbit sendiri. Kirim draf (POST submit) untuk memublikasikannya.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Publikasikan ekspor yang disiapkan sebagai VERSI BARU dari skill bersama yang ada

Alur yang sama dengan publikasi, terhadap skill yang sudah ada: nama SKILL.md pada ekspor harus cocok dengan skill, versinya harus baru (versi tidak dapat diubah), dan changelog wajib diisi. Hanya penerbit yang dapat menambahkan versi. Jika pemindaian memblokir, baris versi berstatus 'rejected' akan disimpan (hanya laporan, tanpa artefak) sehingga temuan terlihat di riwayat penerbit.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Laporan pemindaian lengkap (+ tinjauan LLM) untuk satu versi skill

Daftar temuan lengkap untuk suatu versi, hanya untuk penerbit dan admin organisasi (tinjauan persetujuan); penginstal melihat ringkasan jumlahnya di detail skill.

Parameter

club `string` (wajib) skillId `string` (wajib) version `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Kirim versi skill draf (publikasikan, atau masukkan ke antrean persetujuan)

Memajukan versi draf sesuai tata kelola organisasi. Jika organisasi telah memilih tinjauan LLM, tinjauan instruksi dijalankan terlebih dahulu (upaya terbaik; putusan 'fail' menolak, putusan 'flag' memaksa masuk antrean persetujuan). Berbagi tingkat fasilitas langsung dipublikasikan kecuali tata kelola mewajibkan persetujuan; berbagi pustaka organisasi (audiens brand/organisasi) secara default memerlukan persetujuan. Publikasi menetapkan latestVersion skill; instalasi dengan kebijakan 'auto' akan mengambilnya pada sapuan rekonsiliasi berikutnya.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Hapus skill bersama dari daftar (menghapusnya dari pustaka)

Hanya penerbit. Skill langsung hilang dari pustaka dan menolak instalasi baru; instalasi yang SUDAH ADA tetap berfungsi. Penghapusan dari daftar adalah tindakan pencantuman, bukan tombol pemati.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Edit daftar skill bersama (nama tampilan, deskripsi, ikon)

Hanya penerbit. Kolom khusus tampilan; nama skill kanonis adalah identitasnya (manifes, direktori instalasi, pencocokan versi) dan tidak pernah berubah. String kosong mengosongkan kolom kembali ke null (kembali ke nama kanonis / tanpa ikon). Ikon menggunakan katalog MDI (mdi:icon-name), format yang sama dengan aplikasi agen yang diterbitkan.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Alihkan kepemilikan skill bersama

Mengikuti alur pengalihan aplikasi terbitan: penerbit saat ini atau pemilik akun (modul penagihan) dapat menyerahkan skill ke pengguna lain, yang kemudian mengelola versi dan daftarnya. Pemilik baru harus memiliki akses fasilitas di klub utama skill.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Pustaka skill yang terlihat di fasilitas ini (difilter berdasarkan audiens)

Skill aktif dengan setidaknya satu versi terbitan yang audiensnya mencakup fasilitas ini (atau menyebutkan penampil), diberi anotasi ringkasan versi terbitan terbaru dan jejak adopsi organisasi (jumlah fasilitas yang berbeda, tidak pernah jumlah instalasi mentah). Audiens ditentukan ulang secara langsung pada setiap panggilan.

Parameter

club `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Detail skill (versi, persyaratan, ringkasan pemindaian, adopsi)

Detail lengkap untuk satu skill pustaka: riwayat versi dengan changelog dan ringkasan pemindaian (daftar endpoint per versi mendukung perbandingan pemindaian saat pembaruan), persyaratan yang dideklarasikan dari manifes, asal penerbit, dan sinyal adopsi berupa jumlah fasilitas. Audiens diperiksa ulang; penampil yang tidak pernah diberi akses ke skill tidak mendapatkan informasi apa pun (penerbit dan admin organisasi selalu dapat melihatnya).

Parameter

club `string` (wajib) skillId `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Skill yang dipublikasikan dari fasilitas ini (daftar kelola penerbit)

Baris skill lengkap yang fasilitas UTAMA-nya adalah klub ini, masing-masing diberi anotasi canManage untuk pengguna yang meminta dan ringkasan versi terbarunya (termasuk draf dan persetujuan yang tertunda; ini adalah tampilan kerja penerbit).

Parameter

club `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Instal skill pustaka ke Agen AI fasilitas

Dibatasi tata kelola: installSources organisasi harus mengizinkannya, audiens skill harus mencakup fasilitas ini (atau menyebutkan peminta), versi harus sudah dipublikasikan, dan peminta harus memenuhi tingkat whoCanInstall untuk perangkat tujuan (pemilik / pengguna yang diizinkan / admin fasilitas / admin organisasi; lihat tata kelola). Menulis baris siklus hidup instalasi (sumber kebenaran) dan langsung melakukan push dengan upaya terbaik; cron rekonsiliasi menjamin pengiriman setelah perangkat dapat dijangkau.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Setujui pembaruan skill yang tertunda untuk satu instalasi

Memindahkan desiredVersion instalasi ke versi terbitan terbaru (langkah manual untuk kebijakan 'notify' dan 'pinned', dan jalur yang digunakan ketika tata kelola menetapkan updatePosture 'approvalRequired'). Menyimpan versi saat ini sebagai target rollback satu langkah dan menghapus pin pembaruan pasca-rollback (skipVersion). Tingkat izin whoCanInstall sama dengan instalasi.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Kembalikan skill yang terinstal ke versi sebelumnya

Menetapkan desiredVersion ke previousVersion pada baris instalasi (disimpan setiap kali versi berpindah) dan membiarkan jalur pengiriman normal menginstalnya ulang. Satu langkah: versi bertukar, sehingga melakukan rollback dua kali akan kembali ke titik awal. Juga mem-pin pembaruan (skipVersion = versi asal rollback) sehingga kebijakan auto/notify membiarkan rollback tetap berlaku; pin dihapus ketika versi yang lebih baru dipublikasikan, saat update-approve, atau saat set-policy.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Hapus instalasi skill dari Agen AI fasilitas

Menandai baris instalasi sebagai pending-uninstall dan melakukan push status yang diinginkan; baris dihapus setelah perangkat mengonfirmasi penghapusan (pembacaan balik rekonsiliasi). Tingkat izin whoCanInstall sama dengan instalasi.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Tetapkan kebijakan pembaruan per instalasi untuk skill di satu perangkat

auto (rekonsiliasi menerapkan versi terbitan baru secara otomatis, kecuali updatePosture organisasi memerlukan persetujuan), notify (pemilik diberi tahu sekali untuk setiap versi baru dan menerapkannya secara manual) atau pinned (tidak pernah berpindah tanpa update-approve eksplisit). Mengubah kebijakan akan menghapus pin pembaruan pasca-rollback (skipVersion). Tingkat izin whoCanInstall sama dengan instalasi.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Instalasi skill di Agen AI fasilitas (tab Skills)

Baris siklus hidup instalasi untuk satu perangkat, masing-masing diberi anotasi kolom daftar skill dan apakah ada versi terbitan yang lebih baru. Memerlukan akses per perangkat 'open' (tab Skills berada di dalam drawer agen).

Parameter

club `string` (wajib) device `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Versi skill yang menunggu persetujuan di organisasi fasilitas ini

Antrean persetujuan admin organisasi: setiap versi yang menunggu persetujuan di seluruh skill organisasi, dengan daftar skill dan ringkasan pemindaian/LLM. Hanya untuk admin organisasi.

Parameter

club `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Setujui versi skill yang tertunda (memublikasikannya)

Hanya admin organisasi. Versi menjadi terbit, latestVersion skill berpindah, dan penerbit diberi tahu. Instalasi dengan kebijakan 'auto' akan mengambil versi tersebut pada sapuan rekonsiliasi berikutnya.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Tolak versi skill yang tertunda

Hanya admin organisasi. Versi menjadi ditolak dengan alasan dari peninjau dan penerbit diberi tahu; penerbit dapat memperbaiki temuan dan mengirimkan versi baru (versi tidak dapat diubah).

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Tata kelola Agent Skill yang berlaku untuk organisasi fasilitas ini

Kebijakan per organisasi yang tersimpan, digabungkan di atas default platform (organisasi tanpa baris tersimpan hanya melihat default). Hanya untuk admin organisasi.

Parameter

club `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Perbarui tata kelola Agent Skill untuk organisasi fasilitas ini

Pembaruan sebagian; hanya kolom yang diberikan yang berubah, sedangkan yang lain tetap menggunakan nilai tersimpan/default-nya. Hanya untuk admin organisasi. Penggantian per perangkat berada di baris registrasi melalui rute konfigurasi perangkat yang ada.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Dapatkan data lingkungan untuk fasilitas

Mengembalikan kondisi cuaca terkini termasuk matahari terbit/terbenam (melalui Open-Meteo) dan suhu dalam ruangan fasilitas (dari sensor duress) untuk klub yang ditentukan. Di-cache di Redis selama 30 menit.

Parameter

clubId `string` (wajib) ID internal klub/fasilitas

Titik akhir

GET /api/clubs/{clubId}/environment

Contoh Permintaan

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

Respons

{}

Menambahkan/mengaitkan perangkat IoT generik dengan klub.

Parameter

club `string` (wajib) ID internal klub tempat Anda ingin menambahkan perangkat. body `string` (wajib) Objek JSON layar baru yang akan dikaitkan.

Titik akhir

POST /api/devices/addGenericDevice/{club}

Contoh Permintaan

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

Respons

{}

Hapus dan atur ulang pabrik layar tampilan

Menghapus kaitan fasilitas aktif layar dan menyiapkan pengaturan ulang pabrik yang persisten. Layar yang dimatikan akan menerapkan pengaturan ulang setelah dinyalakan dan terhubung kembali, lalu kembali ke halaman pemasangan HDMI-nya. Catatan penagihan historis tetap disimpan.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Mengaitkan pengontrol pintu dengan fasilitas.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Memperbarui pengaturan pengontrol pintu untuk fasilitas.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Menonaktifkan pengontrol pintu dari fasilitas.

Parameter

club `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mengembalikan konfigurasi relai untuk pengontrol pintu.

Parameter

uuid `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mengembalikan metadata perangkat

Parameter

uuid `string` (wajib) ID unik perangkat

Titik akhir

GET /api/devices/metadata/{uuid}

Contoh Permintaan

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

Respons

{}

Mengembalikan metadata perangkat. Respons berupa baris metadata di tingkat teratas (bentuk lama) ditambah `detectedType` (camera | ai-edge-processor | door-controller | ph-ai-agent | null) dan `online` (true jika diperbarui dalam 5 menit terakhir).

Parameter

deviceSerialNumber `string` (wajib) Nomor Seri perangkat

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mengembalikan data smart club untuk klub.

Parameter

club_id `string` (wajib) ID internal klub tempat Anda ingin menambahkan perangkat.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mengembalikan semua perangkat yang terkait dengan satu klub.

Parameter

club `string` (wajib) ID internal klub yang perangkatnya ingin Anda cantumkan.

Titik akhir

GET /api/devices/list/{club}

Contoh Permintaan

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

Respons

{}

Mengembalikan semua rilis aplikasi (versi) untuk perangkat balena kami.

Titik akhir

GET /api/devices/listReleases

Contoh Permintaan

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

Respons

{}

Memindahkan perangkat ke fasilitas (klub) baru dan memperbarui sistem terkait.

Parameter

club `string` (wajib) ID fasilitas sumber (klub tempat perangkat saat ini berada) body `object` (wajib) Parameter pemindahan

Titik akhir

POST /api/devices/move/{club}

Contoh Permintaan

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

Respons

{}

Mencoba membuat koneksi ke router fasilitas dengan memilih perangkat terbaik di dalam klub dan mengirimkan perintah MQTT untuk membuat tunnel.

Parameter

facilityID `string` (wajib) ID internal fasilitas yang koneksi routernya sedang dicoba.

Titik akhir

GET /api/devices/openRouterWebpage/{facilityID}

Contoh Permintaan

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

Respons

{}

Katalog Cloud Agent (zona, ukuran, harga jual terkini)

Parameter

club `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Penawaran harga Cloud Agent (perangkat lunak + hosting)

Titik akhir

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

Contoh Permintaan

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

Luncurkan Cloud Agent (antrekan penyediaan + kaitkan otomatis)

Titik akhir

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

Contoh Permintaan

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

Status tugas Cloud Agent

Titik akhir

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

Contoh Permintaan

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

Hapus permanen Cloud Agent (VM + balena + registrasi)

Titik akhir

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

Contoh Permintaan

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

Selesaikan penghapusan Cloud Agent yang tertunda (coba ulang pencadangan, hapus tanpa pencadangan, atau batalkan)

Titik akhir

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

Contoh Permintaan

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

Cantumkan Connected Apps agen (suite + aplikasi dengan akun yang terhubung)

Mengembalikan status Connected Apps agen: flag aktif, rekap per suite (Google Workspace, Microsoft 365), dan katalog aplikasi pilihan dengan akun terhubung setiap aplikasi (multi-akun: agen dapat memiliki beberapa akun per aplikasi, masing-masing dengan alias opsional) yang diambil dari sesi upstream agen.

Parameter

facilityId `string` (wajib) deviceId `string` (wajib) UUID balena perangkat agen.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Katalog marketplace Connected Apps lengkap untuk agen

Mengembalikan setiap aplikasi yang dapat dihubungkan (katalog toolkit managed-auth lengkap, di-cache di sisi server selama sekitar 12 jam) dengan tingkat unggulan/suite dan akun terhubung agen per aplikasi, ditambah rekap per suite dan permintaan koneksi agen yang tertunda; satu payload untuk marketplace aplikasi yang dapat dicari di sisi klien.

Parameter

facilityId `string` (wajib) deviceId `string` (wajib) UUID balena perangkat agen.

Titik akhir

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

Contoh Permintaan

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"

Respons

{}

Abaikan permintaan koneksi agen yang tertunda

Menandai permintaan koneksi agen yang tertunda untuk toolkit sebagai diabaikan (permintaan tersebut hilang dari bagian "Requested by your agent" di marketplace). Idempoten: mengabaikan permintaan yang tidak tertunda tidak berpengaruh apa pun.

Parameter

facilityId `string` (wajib) deviceId `string` (wajib) UUID balena perangkat agen.

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Aktifkan atau nonaktifkan Connected Apps untuk agen

Menyimpan sakelar Connected Apps agen dan melakukan push variabel perangkat Balena PH_APPS_MCP_ENABLED ke perangkat tersebut (upaya terbaik; flag di sisi PH adalah gerbang utama pada relai MCP).

Parameter

facilityId `string` (wajib) deviceId `string` (wajib) UUID balena perangkat agen.

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Payload persiapan koneksi untuk satu aplikasi (mode, kolom kredensial, panduan penyiapan)

Semua yang dibutuhkan dialog koneksi sebelum memulai koneksi: cara aplikasi terhubung (oauth = alur persetujuan yang dihosting, credentials = formulir di dalam produk), kolom kredensial yang perlu dikumpulkan untuk mode credentials, dan panduan penyiapan di dalam produk (ditulis khusus untuk aplikasi prioritas, selain itu dibuat dari metadata kolom aplikasi; tidak pernah berupa tautan ke dokumentasi eksternal). Aplikasi OAuth bring-your-own juga menyertakan apakah aplikasi OAuth pelanggan sudah didaftarkan untuk agen INI (byoConfigured) dan URL pengalihan untuk didaftarkan ke penyedia.

Parameter

facilityId `string` (wajib) deviceId `string` (wajib) UUID balena perangkat agen. toolkit `string` (wajib)

Titik akhir

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

Contoh Permintaan

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"

Respons

{}

Hubungkan aplikasi dengan kredensial yang diberikan pengguna (kunci API, dll., tanpa OAuth)

Membuat akun terhubung untuk aplikasi mode credentials langsung dari formulir di dalam produk, tanpa alur persetujuan yang dihosting. Kolom kredensial berasal dari payload connect-info aplikasi; setiap kolom wajib harus diisi. Kredensial divalidasi dengan penyedia jika didukung (upaya terbaik; beberapa aplikasi baru menolak kunci yang salah saat agen pertama kali memanggil alat). Alias opsional memberi label pada akun baru (multi-akun: menghubungkan aplikasi yang sudah terhubung akan menambahkan akun LAIN).

Parameter

facilityId `string` (wajib) deviceId `string` (wajib) UUID balena perangkat agen.

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Daftarkan aplikasi OAuth milik pelanggan untuk aplikasi BYO dan mulai alur koneksinya

Untuk aplikasi OAuth bring-your-own (Xero, Shopify, ...): menerima client ID dan client secret dari aplikasi OAuth yang dibuat pelanggan di penyedia (dipandu oleh panduan penyiapan aplikasi), mendaftarkannya untuk agen INI (secret hanya disimpan di platform integrasi upstream, tidak pernah di Performance Hub), dan langsung memulai alur masuk yang dihosting terhadapnya. Mengembalikan URL persetujuan tujuan pengguna, dengan kontrak yang sama seperti endpoint connect. Mengirim ulang akan mengganti aplikasi terdaftar agen (mis. setelah rotasi secret); akun yang sudah terhubung tetap berfungsi.

Parameter

facilityId `string` (wajib) deviceId `string` (wajib) UUID balena perangkat agen.

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Putuskan satu akun terhubung dari agen

Menghapus satu akun terhubung (multi-akun: akun lain dari aplikasi yang sama tetap terhubung). Akun divalidasi sebagai milik agen ini sebelum dihapus; jika itu adalah akun TERAKHIR aplikasi tersebut, toolkit dihapus dari kumpulan yang terhubung milik agen (sesi dibuat ulang secara lazy agar daftar alat agen diperbarui).

Parameter

facilityId `string` (wajib) deviceId `string` (wajib) UUID balena perangkat agen.

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Ganti nama (alias ulang) salah satu akun terhubung milik agen

Menetapkan alias tampilan satu akun terhubung. Alias biasanya ditetapkan secara otomatis setelah OAuth (dari identitas yang masuk); endpoint ini mendukung penggantian nama manual di dialog detail aplikasi. Alias kosong akan menghapus label. Akun divalidasi sebagai milik agen ini sebelum pembaruan upstream.

Parameter

facilityId `string` (wajib) deviceId `string` (wajib) UUID balena perangkat agen.

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Aktifkan/nonaktifkan layanan bawaan Performance Hub untuk agen

Mengaktifkan atau menonaktifkan satu layanan bawaan yang selalu aktif (Smart Search, Weather, ...) untuk agen ini. Layanan bawaan tidak memerlukan koneksi atau OAuth; layanan ini disertakan di setiap agen dan aktif secara default. Sakelar ini menyimpan penggantian per agen dan langsung membuat ulang sesi upstream agen agar kumpulan alat diperbarui. Perhatikan sakelar "External apps" yang terpisah (rute /enable) adalah sakelar mati utama atas seluruh server MCP aplikasi; jika dimatikan, layanan bawaan juga tidak tersedia terlepas dari sakelar masing-masing.

Parameter

facilityId `string` (wajib) deviceId `string` (wajib) UUID balena perangkat agen. slug `string` (wajib) Slug layanan bawaan.

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Kaitkan perangkat Agen AI dengan fasilitas

Pengaitan dengan mengutamakan metadata. Mencari perangkat berdasarkan nomor seri di metadata perangkat langsung, mewajibkan perangkat online, lalu membuat baris registrasi secara lazy, menetapkan wilayah relai Chisel + port tunnel + secret, mendaftarkan slot tersebut di relai, dan melakukan push konfigurasi fasilitas + tunnel ke perangkat melalui Balena. Perangkat baru juga diberi akun layanan MCP default (aktif, dibatasi ke fasilitas ini, semua kemampuan); pemasangan ulang mempertahankan izin MCP yang ada. Pengaturan lanjutan opsional menggantikan default yang ditetapkan saat pemasangan (konfigurasi pencadangan, MCP aktif/nonaktif, pembatasan akses), dan `restoreFrom` mengisi perangkat baru dari cadangan cloud perangkat fasilitas lain (sumber aktif atau yang dinonaktifkan; memasukkan pemulihan lintas repositori ke antrean, dikembalikan sebagai `restoreRequest` untuk polling progres).

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Cantumkan perangkat Agen AI untuk fasilitas

Mengembalikan perangkat Agen AI fasilitas dengan status online + tunnel langsung (digunakan oleh pengalih perangkat di applet).

Parameter

club `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Status pembaruan + online Agen AI

Mengembalikan apakah perangkat online, apakah pembaruan tersedia/tertunda, dan rilis yang ditawarkan (pin armada jika armada di-pin; versi berhasil tertinggi jika armada mengikuti versi terbaru).

Parameter

club `string` (wajib) uuid `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Status perangkat + metrik langsung Agen AI

Mengembalikan snapshot pilihan untuk strip metrik dan drawer pengelolaan di applet: kolom identitas + registrasi, keaktifan + koneksi, versi perangkat lunak, dan metrik heartbeat terbaru (CPU, suhu, memori, penyimpanan per mount, uptime, jaringan). Meratakan beacon metadata perangkat + status pembaruan Balena; salah satu bagian mungkin tidak ada saat terjadi gangguan sementara.

Parameter

club `string` (wajib) uuid `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Narasi AI untuk laporan kesehatan perangkat

Mengembalikan penjelasan singkat untuk operator tentang masalah kesehatan turunan saat ini. Fakta dan langkah playbook selalu ada di device-status; paragraf tambahan ini bersifat upaya terbaik dan mungkin bernilai null.

Parameter

club `string` (wajib) uuid `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Buat token akses langsung ke relai untuk Agen AI

Mengembalikan URL bertanda tangan berumur pendek yang digunakan browser untuk terhubung LANGSUNG ke relay gateway regional perangkat (memangkas lompatan global PH/Sydney), ditambah token HS256. PH tetap menjadi otoritas (Google SSO + pemeriksaan modul/fasilitas di sini); relay-gateway memverifikasi token. Proxy /ai-agent-ui tetap menjadi cadangan.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Kirim pesan chat ke sesi Agen AI (balasan langsung dari notifikasi)

Relai sisi server yang digunakan oleh tindakan balasan langsung pada notifikasi web push; service worker melakukan POST ke sini (origin yang sama, cookie SSO) sehingga balasan berfungsi tanpa tab Performance Hub yang terbuka. PH menentukan target relai perangkat (pencarian yang sama dengan proxy /ai-agent-ui), menambahkan x-ph-user untuk atribusi giliran (push penyelesaian yang dihasilkan kembali ke pengguna ini), dan meneruskannya ke /api/chat/start perangkat dengan id sesi.

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Baca pengaturan kontrol akses Agen AI (pemilik)

Mengembalikan blok akses perangkat (mode, allowlist, visibilitas, sakelar PH Support) beserta permintaan akses yang tertunda. Dapat dibaca oleh pemilik perangkat; pengguna lain mendapatkan 403.

Parameter

club `string` (wajib) uuid `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Perbarui pengaturan kontrol akses Agen AI (pemilik)

Menulis mode (org/restricted), allowlist terbatas, visibilitas daftar (all/admins), dan sakelar "permit access from Performance Hub Support". Diizinkan untuk pemilik perangkat. Pemilik itu sendiri hanya dapat diubah melalui reallocate-owner. Permintaan akses yang disetujui bersifat persisten; peminta yang masih disetujui digabungkan kembali ke allowlist yang disimpan; menghapus salah satunya dari daftar yang dikirim akan mencabut persetujuannya (permintaan berubah menjadi denied; mereka dapat meminta lagi).

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Tetapkan ulang pemilik Agen AI

Menetapkan ulang kepemilikan perangkat ke pengguna Performance Hub lain. Terbatas untuk pemilik akun (akses modul penagihan SaaS); ini adalah jalan keluar ketika pemilik agen terbatas keluar. Pemilik sebelumnya dan pemilik baru sama-sama diberi tahu (di aplikasi + push + email).

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Daftar pengguna fasilitas untuk pemilih allowlist / pemilik Agen AI

Mengembalikan email + nama (+ flag isOrgAdmin) untuk setiap pengguna yang perannya memberi akses ke fasilitas INI. Dibatasi untuk pemilik perangkat dan pihak yang dapat mengalihkan (pemilik akun) agar pengguna biasa tidak dapat menghitung basis pengguna.

Parameter

club `string` (wajib) uuid `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Minta akses ke Agen AI yang dibatasi

Membuat (atau membuka kembali) permintaan akses peminta untuk perangkat yang dibatasi; idempoten per pengguna+perangkat. Pemilik diberi tahu melalui notifikasi di aplikasi, web push, dan email dengan deep link ke modul agen.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Setujui atau tolak permintaan akses Agen AI (pemilik)

Penyelesaian permintaan yang tertunda oleh pemilik perangkat. Menyetujui akan menambahkan peminta ke allowlist perangkat; hasil mana pun akan diberitahukan kepada peminta (di aplikasi + push + email).

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Izinkan + terapkan pembaruan Agen AI

Mem-pin perangkat ke rilis yang ditawarkan (pin armada, atau versi berhasil tertinggi jika armada mengikuti versi terbaru) dan melepaskan kunci pembaruan agar supervisor balena menerapkannya. Status pada volume data perangkat tetap bertahan setelah pembaruan.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Jadwalkan pembaruan Agen AI untuk nanti

Menyimpan waktu instalasi terjadwal pada registrasi perangkat. Tugas backend berulang (setiap 5 menit) menerapkan pembaruan (pin + buka kunci) setelah waktu terjadwal terlewati. Penjadwalan menggantikan jadwal yang sudah ada untuk perangkat tersebut.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Batalkan pembaruan Agen AI yang terjadwal

Menghapus instalasi terjadwal yang tertunda untuk perangkat (tidak berpengaruh apa pun jika tidak ada yang dijadwalkan).

Parameter

club `string` (wajib) uuid `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Jalankan perintah jarak jauh pada perangkat Agen AI

Memublikasikan perintah MQTT yang ada di daftar izin (reboot, mulai ulang container, kunci/buka kunci pembaruan, manajemen Wi-Fi) ke device-controller yang berjalan di Agen AI. Perangkat harus dikaitkan dengan fasilitas.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Perbarui konfigurasi Agen AI yang terkait dengan fasilitas

Menyimpan pengaturan yang dapat diubah operator untuk Agen AI terkait: nama perangkat, lokasi fisik perangkat, dan jadwal reboot terjadwal. Jadwal reboot juga dikirim ke perangkat sebagai variabel lingkungan Balena REBOOT_DEVICE (pukul 02.00 waktu setempat), sama seperti perilaku Display Screens.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Fasilitas tujuan pemindahan Agen AI di fasilitas ini

Mengembalikan fasilitas dalam organisasi yang sama yang dapat diakses pengguna yang sedang masuk (tidak termasuk fasilitas saat ini), untuk pemilih "Pindahkan ke fasilitas lain". Pemindahan itu sendiri dilakukan oleh POST /api/devices/move/:club, yang menerapkan aturan organisasi yang sama dan akses ke tujuan yang sama di sisi server.

Parameter

club `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Cakupan akses MCP yang dapat diberikan peminta untuk Agen AI suatu fasilitas

Mengembalikan apa yang boleh diberikan pengguna yang sedang masuk kepada akun layanan MCP Agen AI di organisasi fasilitas ini: fasilitas/wilayah dalam akses mereka sendiri, apakah mereka boleh memberikan cakupan seluruh organisasi, semua modul yang mereka miliki, dan katalog lengkap alat MCP (untuk mask per alat tingkat lanjut). UI menggunakannya agar pengguna hanya melihat opsi dalam cakupan izin mereka sendiri; endpoint POST mcp-access menerapkan pembatasan yang sama di sisi server.

Parameter

club `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mendapatkan konfigurasi akun layanan MCP Agen AI

Mengembalikan konfigurasi akses MCP perangkat (cakupan, modul, mask alat, bidang audit).

Parameter

club `string` (wajib) uuid `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mengonfigurasi akun layanan MCP Agen AI

Menyimpan konfigurasi akses MCP perangkat dengan pembatasan saat pemberian. Peminta hanya dapat memberikan fasilitas/wilayah dalam akses mereka sendiri, cakupan organisasi hanya jika mereka memiliki peran seluruh organisasi, dan modul yang mereka miliki sendiri di organisasi fasilitas tersebut. Flag enabled juga dikirim ke perangkat sebagai variabel lingkungan Balena PH_MCP_ENABLED.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Mendapatkan konfigurasi VPN Agen AI (disamarkan)

Mengembalikan flag dukungan VPN dan daftar koneksi perangkat. Isi profil dan nilai kredensial tidak pernah dikembalikan, hanya metadata saat impor (remote, rute, DNS) dan flag keberadaan kredensial. Status langsung per koneksi berasal dari endpoint device-status (beacon metadata.vpn).

Parameter

club `string` (wajib) uuid `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mengaktifkan atau menonaktifkan dukungan VPN Agen AI

Mengaktifkan/menonaktifkan fitur VPN perangkat. Mengirim variabel perangkat balena PH_VPN_ENABLED dan memberi sinyal ke perangkat (MQTT vpnConfigChanged); koneksi tetap disimpan saat dinonaktifkan (tunnel berhenti; konfigurasi tetap ada untuk diaktifkan kembali).

Parameter

club `string` (wajib) uuid `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Mengimpor profil OpenVPN ke Agen AI

Menerima unggahan berenkode base64: satu file .ovpn/.conf, bundel file terpisah (konfigurasi + sertifikat/kunci), dan arsip (.zip, ekspor Pritunl .tar/.tgz, .tblk Tunnelblick, .visc/.visz Viscosity). Profil dinormalisasi ke bentuk inline kanonis; setiap profil menjadi satu koneksi (diimpor dalam keadaan terputus; masukkan kredensial, lalu sambungkan). Unggahan yang tidak dapat digunakan menghasilkan error 400 yang jelas tindak lanjutnya.

Parameter

club `string` (wajib) uuid `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Memperbarui koneksi VPN Agen AI (nama / kredensial / split-DNS)

Memperbarui koneksi yang tersimpan. Bidang kredensial hanya dapat ditulis (dihilangkan = pertahankan nilai tersimpan; string kosong = hapus). Perubahan kredensial/split-DNS menaikkan revisi koneksi sehingga tunnel yang aktif dimulai ulang dengan nilai baru.

Parameter

club `string` (wajib) uuid `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Menghapus koneksi VPN Agen AI

Menghapus koneksi dari registrasi dan memberi sinyal ke perangkat, yang kemudian menutup tunnel dan menghapus profil/kredensial yang tersimpan di cache.

Parameter

club `string` (wajib) uuid `string` (wajib) connectionId `string` (wajib)

Titik akhir

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

Contoh Permintaan

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"

Respons

{}

Menyambungkan / memutuskan koneksi VPN Agen AI

Model status yang diinginkan: menetapkan flag enabled koneksi pada registrasi dan memberi sinyal ke perangkat (MQTT vpnConfigChanged tanpa payload); perangkat mengambil status otoritatif melalui panggilan universal-api yang diautentikasi JWT dan menyelaraskan tunnel-nya. Sinyal yang terlewat akan tersinkron pada sinkronisasi berkala.

Parameter

club `string` (wajib) uuid `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Mendapatkan konfigurasi dan status cadangan cloud Agen AI

Mengembalikan pengaturan cadangan perangkat (diaktifkan, retensi, wilayah penyimpanan), status cadangan berjalan (cadangan terakhir, ukuran, error), wilayah otomatis yang ditentukan, dan wilayah penyimpanan yang tersedia untuk pemilih. Kata sandi repo restic tidak pernah dikembalikan.

Parameter

club `string` (wajib) uuid `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Memperbarui konfigurasi cadangan cloud Agen AI

Menyimpan pengaturan enabled/retensi/wilayah. Berlaku pada siklus pencadangan per jam berikutnya di perangkat (perangkat meminta konteks eksekusi dari PH sebelum setiap eksekusi), sehingga perangkat tidak perlu dimulai ulang.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Mencantumkan sumber pemulihan cadangan untuk memasangkan Agen AI baru

Tampilan seluruh fasilitas untuk opsi "pulihkan dari cadangan" pada dialog penambahan agen: setiap registrasi di fasilitas, baik yang aktif MAUPUN yang dinonaktifkan/diganti, yang masih memiliki repo cadangan yang dapat didekripsi dan setidaknya satu titik pemulihan yang dapat digunakan, beserta snapshot terbarunya. Juga mengembalikan daftar opsi konfigurasi cadangan (allowedRetentionDays, availableRegions) sehingga dialog tidak memerlukan UUID perangkat untuk mengisi pilihannya.

Parameter

club `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mencantumkan titik pemulihan cadangan Agen AI

Mengembalikan indeks snapshot perangkat (terbaru lebih dulu) dari DynamoDB, tanpa perlu menghubungi perangkat atau repo, serta status permintaan pencadangan manual / pemulihan saat ini untuk polling panel samping. Permintaan yang kedaluwarsa (tidak pernah diambil, atau tanpa heartbeat progres) ditampilkan sebagai gagal sehingga UI selalu dapat mengirim permintaan baru.

Parameter

club `string` (wajib) uuid `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Meminta pencadangan manual Agen AI sekarang

Menulis permintaan eksekusi manual (dengan catatan pengguna) ke baris registrasi dan memberi sinyal ke perangkat melalui MQTT. Perangkat mengambil permintaan terverifikasi melalui panggilan run-context universal-api yang diautentikasi JWT; tanpa MQTT pun permintaan akan diambil pada siklus penjadwal berikutnya. Ditolak saat pencadangan atau pemulihan lain sedang berlangsung.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Menyematkan atau melepas sematan titik pemulihan Agen AI

Titik pemulihan yang disematkan dilindungi dari pemangkasan retensi (pemeliharaan malam hari di perangkat menerima ID snapshot yang disematkan melalui panggilan run-context dan mengecualikannya dari restic forget) dan baris indeksnya tidak pernah kedaluwarsa karena TTL. Melepas sematan mengembalikan perilaku retensi normal.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Memulihkan Agen AI dari titik pemulihan cadangan

Menulis permintaan pemulihan ke baris registrasi dan memberi sinyal ke perangkat. Pemulihan penuh menimpa /data dan /home/hermeswebui (perangkat terlebih dahulu membuat snapshot pengaman otomatis sebelum pemulihan dan menghentikan agen selama pemulihan) dan memerlukan nama perangkat diketik sebagai konfirmasi. Mengirim `paths` justru melakukan pemulihan tingkat file tanpa gangguan hanya untuk jalur tersebut. Secara opsional, perangkat dikunci kembali ke rilis perangkat lunak snapshot setelah pemulihan data selesai (lihat backup-restore-release).

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Menerapkan rilis perangkat lunak yang tercatat pada pemulihan yang telah selesai

Langkah terakhir pemulihan yang meminta versi perangkat lunak snapshot: setelah perangkat melaporkan bahwa pemulihan data selesai, langkah ini mengunci perangkat ke rilis yang tersimpan dan membuka kunci pembaruan (mekanisme yang sama dengan endpoint pembaruan). Dijalankan oleh polling panel samping; idempoten, karena sematan yang tersimpan dihapus setelah diterapkan.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Menelusuri file di dalam titik pemulihan cadangan

Mencantumkan satu tingkat direktori snapshot restic, dilayani sepenuhnya di sisi server dari repo Wasabi (berfungsi saat perangkat offline). Hanya metadata tree yang dibaca; tidak ada data file yang diunduh untuk daftar.

Parameter

club `string` (wajib) uuid `string` (wajib) takenAt `number` (wajib) path `string` (opsional)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mencari nama file di dalam titik pemulihan cadangan

Pencarian nama file tanpa membedakan huruf besar/kecil dari suatu direktori ke bawah, dilayani di sisi server dari metadata tree restic (tidak ada data file yang dibaca; berfungsi saat perangkat offline). Daftar dialirkan dan berhenti pada 200 kecocokan pertama.

Parameter

club `string` (wajib) uuid `string` (wajib) takenAt `number` (wajib) q `string` (wajib) path `string` (opsional)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Perubahan di antara dua titik pemulihan cadangan

Menjalankan restic diff di sisi server antara dua snapshot perangkat (hanya metadata tree) dan mengembalikan daftar file yang ditambahkan/dihapus/diubah (dibatasi hingga 500 perubahan) beserta statistik ringkasan. Hasil disimpan di cache karena snapshot tidak dapat diubah.

Parameter

club `string` (wajib) uuid `string` (wajib) fromTakenAt `number` (wajib) toTakenAt `number` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Riwayat versi satu file di seluruh titik pemulihan

Satu restic find di sisi server di seluruh snapshot dalam repo perangkat, diringkas menjadi versi yang BERBEDA (hasil berurutan dengan ukuran+mtime identik digabungkan) dan dihubungkan dengan baris indeks snapshot untuk tanggal/jenis/catatan.

Parameter

club `string` (wajib) uuid `string` (wajib) path `string` (wajib)

Titik akhir

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

Contoh Permintaan

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"

Respons

{}

Mencari nama file di setiap titik pemulihan cadangan perangkat

Jalur pemulihan file yang terhapus: satu restic find di sisi server di SEMUA snapshot dalam repo (tanpa membedakan huruf besar/kecil, substring atau glob), dikelompokkan berdasarkan jalur beserta titik pemulihan tempat setiap file muncul. File yang dihapus dari perangkat tetap dapat ditemukan di sini selama ada titik pemulihan yang memuatnya.

Parameter

club `string` (wajib) uuid `string` (wajib) q `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mengunduh satu file dari titik pemulihan cadangan

Mengalirkan satu file langsung dari repo restic ke browser (sebagai lampiran). Direktori dialirkan sebagai arsip tar. Ukurannya dibatasi; dilayani di sisi server, sehingga berfungsi saat perangkat offline.

Parameter

club `string` (wajib) uuid `string` (wajib) takenAt `number` (wajib) path `string` (wajib)

Titik akhir

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

Contoh Permintaan

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"

Respons

{}

Menonaktifkan Agen AI dari fasilitas

Parameter

club `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Menghapus Agen AI dari fasilitas dan mereset perangkat keras ke setelan pabrik

Melepaskan perangkat sepenuhnya sehingga dapat dipasangkan di fasilitas MANA PUN, dan menghapus semua data di NUC. Penghapusan disiapkan melalui variabel perangkat balena PH_FACTORY_RESET (nonce sekali pakai) SEBELUM pembongkaran cloud, sehingga tetap berlaku meskipun perangkat offline saat dihapus; penghapusan dijalankan saat perangkat terhubung kembali. Sinyal MQTT factoryReset membuat penghapusan langsung berjalan jika perangkat online. Pembongkaran cloud kemudian mencabut setiap kredensial dan pemberian akses, menghapus ikatan fasilitas Balena (variabel perangkat + tag club) dan metadata clubID, serta menghapus permintaan akses dan catatan DNS LAN. Cadangan cloud TETAP DISIMPAN: indeks snapshot dan kata sandi repo tetap ada pada registrasi yang dihapus secara lunak, dan dapat digunakan sebagai sumber pemulihan saat menambahkan pengganti. Memerlukan nama perangkat diketik sebagai konfirmasi.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Mengganti Agen AI yang mati dengan NUC baru (pemulihan bencana)

Penggantian perangkat dalam satu langkah: mengaitkan NUC pengganti (slot tunnel, rahasia, variabel balena, seed cadangan), membawa nama, lokasi, jadwal reboot, pengaturan cadangan, blokir akses, dan pemberian MCP perangkat lama, mengganti kunci indeks snapshot lama ke perangkat baru (sehingga seluruh riwayat cadangannya tetap dapat ditelusuri), menonaktifkan registrasi lama (ditandai replacedBy / replacedFrom), dan, kecuali `restore` bernilai false, mengantrekan pemulihan penuh titik pemulihan yang dipilih dari repo cadangan perangkat LAMA ke perangkat keras baru. Berfungsi saat perangkat lama mati/offline; memerlukan nama perangkat lama diketik sebagai konfirmasi. Hanya untuk fasilitas yang sama.

Parameter

club `string` (wajib)

Isi Permintaan

Titik akhir

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

Contoh Permintaan

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 '{}'

Respons

{}

Menerjemahkan tautan pendek QR perangkat Performance Hub ke deep link yang dituju, sehingga pemindai Tambahkan Perangkat dapat mendeteksi jenis perangkat. Hanya host performancehub.co yang diikuti.

Parameter

url `string` (wajib) Tautan pendek yang dipindai

Titik akhir

GET /api/devices/resolve-qr

Contoh Permintaan

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

Respons

{}

Menguji konektivitas ke Unifi Controller fasilitas dan apakah kredensialnya benar.

Parameter

facilityID `string` (wajib) ID internal fasilitas yang ingin Anda uji konektivitas unifi-nya

Titik akhir

GET /api/devices/testUnifiController/{facilityID}

Contoh Permintaan

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

Respons

{}

Memperbarui perangkat IoT generik dengan fasilitas.

Parameter

club `string` (wajib) ID internal fasilitas yang perangkatnya ingin Anda perbarui. body `string` (wajib) Objek JSON parameter pembaruan.

Titik akhir

PUT /api/devices/updateGenericDevice/{club}

Contoh Permintaan

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

Respons

{}

Mencantumkan jumlah perjanjian yang belum diselesaikan dan memerlukan tindakan berdasarkan pengguna dan klub yang terkait dengannya

Titik akhir

GET /api/agreements/agreements-outstanding

Contoh Permintaan

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

Respons

{}

Mencantumkan semua perjanjian yang tersedia untuk klub

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. contracts-sort `string` (opsional) Urutkan perjanjian berdasarkan date-effective atau alfabet. Default-nya date-effective. contracts-acknowledgement `string` (opsional) Filter perjanjian berdasarkan all, acknowledged, atau unacknowledged. Default-nya all. contracts-requirement `string` (opsional) Filter perjanjian berdasarkan all, signature, checkbox, popup, atau none. Default-nya all. contracts-status `string` (opsional) Filter perjanjian berdasarkan all, active, atau archived. Default-nya all.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Menandatangani perjanjian berdasarkan ID-nya.

Parameter

club `string` (wajib) ID internal klub yang menandatangani perjanjian. agreementid `string` (wajib) ID perjanjian yang sedang ditandatangani. body `string` (wajib) Objek JSON yang berisi perjanjian dan parameter untuk ditambahkan/diunggah ke sistem.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Ringkasan Model Router fasilitas (konfigurasi, saldo, pengeluaran).

Parameter

clubID `string` (wajib) tz `string` (opsional) Zona waktu IANA penampil; cadangan untuk rentang pengeluaran harian/bulanan jika fasilitas tidak memiliki data zona waktu.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Katalog model yang tersedia dengan status aktif per fasilitas (default semua aktif).

Parameter

clubID `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Guardrail yang tersedia dan templat preset PH.

Parameter

clubID `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Layanan Model Router yang terhubung. Mencakup perangkat Agen AI yang dipasangkan, agen eksternal dengan tipe eksplisit, dan layanan Workflow fasilitas. Konfigurasi diedit melalui PATCH /keys/{keyHash}.

Parameter

clubID `string` (wajib) tz `string` (opsional) Zona waktu IANA penampil; cadangan untuk rentang pengeluaran harian/bulanan jika fasilitas tidak memiliki data zona waktu.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Aktifkan Model Router untuk fasilitas dan sediakan akses inferensinya.

Parameter

clubID `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Perbarui paket, allowlist model, guardrail, filter konten (redact/block regex di sisi PH), batas pengeluaran, dan konfigurasi isi ulang otomatis.

Parameter

clubID `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Atur ulang penghitung batas keras seumur hidup ke 0 (garis dasar ulang ke pengeluaran saat ini) dan catat periode yang ditutup ke riwayat.

Parameter

clubID `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Riwayat pengaturan ulang batas keras (terbaru lebih dulu): batas, pengeluaran, dan stempel waktu per periode yang ditutup.

Parameter

clubID `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Buat kunci API phk_ baru untuk fasilitas (teks biasa dikembalikan sekali). Menerima batas pengeluaran, allowlist model, guardrail, filter konten, dan batas laju rpmLimit/tpmLimit opsional.

Parameter

clubID `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Perbarui kolom kunci yang dapat diedit: label, batas pengeluaran per kunci, allowlist model, guardrail, filter konten, dan batas laju rpmLimit/tpmLimit (disinkronkan ke kunci).

Parameter

clubID `string` (wajib) keyHash `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Log inferensi per permintaan untuk fasilitas (langsung, hanya metadata).

Parameter

clubID `string` (wajib) page `string` (opsional) pageSize `string` (opsional) status `string` (opsional) model `string` (opsional) provider `string` (opsional) source `string` (opsional) `key` atau `agent` keyHash `string` (opsional) Filter ke satu kunci/agen berdasarkan keyHash PH-nya. q `string` (opsional) Pencarian teks bebas di seluruh id permintaan, label kunci/agen, model, penyedia, dan pengguna akhir. minutes `string` (opsional) Rentang kurang dari sehari (mis. Live=1440); menggantikan startDate/endDate. startTs `string` (opsional) Awal rentang dalam detik epoch (klik untuk zoom); menggantikan menit/tanggal. endTs `string` (opsional) Akhir rentang dalam detik epoch (klik untuk zoom); menggantikan menit/tanggal.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Histogram permintaan dari waktu ke waktu untuk tampilan Logs. Filternya sama dengan rute daftar, tetapi diagregasi di sisi server ke dalam blok waktu (jumlah berhasil/gagal) sehingga responsnya sangat kecil berapa pun volume lognya. Ukuran blok dipilih otomatis sesuai rentangnya.

Parameter

clubID `string` (wajib) status `string` (opsional) model `string` (opsional) provider `string` (opsional) source `string` (opsional) keyHash `string` (opsional) q `string` (opsional) minutes `string` (opsional) startDate `string` (opsional) endDate `string` (opsional) startTs `string` (opsional) endTs `string` (opsional)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Blok analitik penggunaan + total per model untuk suatu rentang (langsung).

Parameter

clubID `string` (wajib) range `string` (opsional) 24h | 7 | 30 | 90 | year | all (diabaikan jika startDate/endDate diberikan) startDate `string` (opsional) endDate `string` (opsional) groupBy `string` (opsional) model (default) | key | source | provider | status: dimensi untuk blok + grup subgroupBy `string` (opsional) dimensi kedua opsional yang bersarang di bawah setiap grup (Explore) keyHash `string` (opsional) filter analisis mendalam: batasi ke satu kunci/agen model `string` (opsional) filter analisis mendalam: batasi ke satu model provider `string` (opsional) source `string` (opsional) compare `string` (opsional) atur ke "prev" untuk juga mengembalikan groupsPrev (periode sebelumnya dengan panjang yang sama)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Kalender aktivitas harian selama setahun terakhir (gaya GitHub, sekitar 53 minggu).

Parameter

clubID `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Tagih kartu penagihan SaaS yang tersimpan untuk menambahkan kredit prabayar Model Router.

Parameter

clubID `string` (wajib) body `object` (opsional)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Selesaikan isi ulang setelah applet menyelesaikan autentikasi 3DS.

Parameter

clubID `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Ringkasan kartu penagihan SaaS tersimpan yang akan ditagih untuk isi ulang / isi ulang otomatis.

Parameter

clubID `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Transaksi buku besar untuk fasilitas, terbaru lebih dulu. Dapat difilter berdasarkan jenis (mis. `types=topup,adjustment` untuk riwayat pergerakan dana, atau `types=charge-reconcile` dengan `from`/`to` untuk potongan penggunaan dalam satu bulan).

Parameter

clubID `string` (wajib) limit `integer` (opsional) Jumlah baris maksimum (default 50, maks. 200) types `string` (opsional) Jenis transaksi yang dipisahkan koma (topup, charge-reconcile, refund, adjustment, trueup-shortfall) from `integer` (opsional) Hanya transaksi dengan createdAt >= from (detik unix) to `integer` (opsional) Hanya transaksi dengan createdAt <= to (detik unix)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Bulan `YYYY-MM` yang berbeda (UTC, terbaru lebih dulu) yang berisi setidaknya satu transaksi dari jenis yang diminta. Menjadi dasar dropdown filter tahun/bulan berbasis data sehingga UI hanya menawarkan periode yang benar-benar memiliki data.

Parameter

clubID `string` (wajib) types `string` (opsional) Jenis transaksi yang dipisahkan koma (topup, charge-reconcile, refund, adjustment, trueup-shortfall)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Tanda terima pembayaran PDF bermerek untuk satu transaksi Model Router.

Parameter

clubID `string` (wajib) txId `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Kumpulan tanda terima pembayaran PDF bermerek untuk transaksi isi ulang yang dipilih, dalam bentuk ZIP. Setiap id harus berupa isi ulang milik fasilitas; potongan penggunaan dan penyesuaian admin tidak memiliki tanda terima dan akan ditolak.

Parameter

clubID `string` (wajib) ids `string` (wajib) Id transaksi yang dipisahkan koma (maks. 50)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Rekap per bulan kalender (UTC) atas potongan penggunaan fasilitas, terbaru lebih dulu. Bulan berjalan selalu disertakan dan ditandai `isCurrentMonth` (bulan berjalan hingga hari ini).

Parameter

clubID `string` (wajib) months `integer` (opsional) Rentang lihat ke belakang dalam bulan (default 12, maks. 24; diabaikan jika `year` ditetapkan) year `integer` (opsional) Batasi rekap ke satu tahun kalender UTC (mis. 2026)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

PDF Usage Statement bulanan bermerek: ringkasan potongan penggunaan bulan tersebut (subtotal harian + total). Secara tegas bukan faktur atau tanda terima; potongan penggunaan tidak menagih pembayaran.

Parameter

clubID `string` (wajib) month `string` (wajib) Bulan kalender UTC, `YYYY-MM`

Titik akhir

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

Contoh Permintaan

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"

Respons

{}

Item baris potongan penggunaan mentah untuk satu bulan dalam format CSV (id transaksi, stempel waktu UTC, jumlah, saldo setelahnya, snapshot pengeluaran seumur hidup); ekspor detail yang direkonsiliasi dengan total laporan bulan tersebut.

Parameter

clubID `string` (wajib) month `string` (wajib) Bulan kalender UTC, `YYYY-MM`

Titik akhir

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

Contoh Permintaan

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"

Respons

{}

Ringkasan penggunaan/pengeluaran untuk fasilitas (langsung ditambah buku besar yang telah direkonsiliasi).

Parameter

clubID `string` (wajib) tz `string` (opsional) Zona waktu IANA penampil; cadangan untuk rentang pengeluaran harian/bulanan jika fasilitas tidak memiliki data zona waktu.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mengaitkan/memperbarui perangkat AI Edge Processor ke klub

Parameter

body `string` (wajib) Objek JSON untuk memperbarui registrasi Perangkat AI Edge Processor.

Titik akhir

POST /api/ai-edge-processor/devices

Contoh Permintaan

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

Respons

{}

Mengaitkan perangkat AI Edge Processor ke klub. Menentukan perangkat dengan mengutamakan metadata (heartbeat langsung yang diutamakan), mengisi baris registrasi jika perangkat tidak pernah mendaftar sendiri, dan membersihkan baris registrasi usang yang tertinggal oleh perangkat keras yang disediakan ulang.

Parameter

body `string` (wajib) Objek JSON untuk memperbarui registrasi Perangkat AI Edge Processor.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar catatan unggahan bbox di klub

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Indeks pencarian database kamera

Meneruskan indeks pencarian camera-db dari dokumentasi publik (produsen, seri, model, alias) yang digunakan oleh dialog Find my camera saat menambahkan kamera jaringan. Di-cache di sisi server selama 12 jam.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Templat produsen database kamera

Meneruskan templat URL RTSP dan default untuk satu produsen dari database kamera dokumentasi publik. Slug divalidasi untuk mencegah path traversal. Di-cache di sisi server selama 12 jam.

Parameter

slug `string` (wajib) Slug produsen (mis. hikvision)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar data check-in untuk fasilitas

Parameter

club `string` (wajib) ID internal klub/fasilitas yang ingin Anda akses. startDate `string` (opsional) Tanggal mulai dalam format YYYY-MM-DD endDate `string` (opsional) Tanggal selesai dalam format YYYY-MM-DD timezone `string` (opsional) Zona waktu untuk interpretasi tanggal (default Australia/Brisbane) nextToken `string` (opsional) Token paginasi untuk mengambil halaman berikutnya

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Ambil konfigurasi untuk Frontend atau UI CCTV

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/cctv/config/:club

Contoh Permintaan

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

Respons

{}

Dapatkan konfigurasi pengiriman konten CCTV

Mengembalikan domain konten yang digunakan klien CCTV untuk mengambil aset media. Domain ditentukan oleh variabel lingkungan CONTENT_DOMAIN, dengan cadangan default yang menyesuaikan tahap (produksi menyajikan /cctv, tahap lain menyajikan /cctv-stg).

Titik akhir

GET /api/cctv/content-config

Contoh Permintaan

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

Respons

{}

Ubah konfigurasi untuk Frontend atau UI CCTV

Parameter

body `object` (wajib) Objek JSON blok konfigurasi baru yang akan ditambahkan ke sistem.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar ketersediaan Region Bucket untuk konfigurasi penyedia penyimpanan CCTV

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Atur ulang koleksi wajah tak teridentifikasi

Mengatur ulang koleksi CompreFace tak teridentifikasi milik fasilitas dengan menghapus semua subjek. Catatan orang DynamoDB, deteksi wajah, dan blok linimasa OpenSearch TIDAK terpengaruh. Hanya data pengenalan wajah yang mendasarinya yang dihapus. Profil bayangan baru akan dibuat secara otomatis saat sistem memproses deteksi kamera baru.

Parameter

facilityId `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Dapatkan info koleksi tak teridentifikasi

Mengembalikan jumlah subjek saat ini di koleksi CompreFace tak teridentifikasi milik fasilitas.

Parameter

facilityId `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Menambahkan kamera jaringan (kamera OEM/IP) melalui URL stream (RTSP, HTTP, HTTPS)

Parameter

body `string` (wajib) Objek JSON untuk menambahkan kamera jaringan.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Tambahkan kamera jaringan secara massal ke Edge Processor

Mendaftarkan beberapa kamera jaringan RTSP/HTTP ke satu Edge Processor, lalu melakukan push FEED_CONFIG sekali sehingga perangkat memuat ulang konfigurasi hanya satu kali.

Parameter

body `object` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mengaitkan/memperbarui perangkat ke klub

Parameter

body `string` (wajib) Objek JSON untuk memperbarui registrasi Perangkat CCTV.

Titik akhir

POST /api/cctv/devices

Contoh Permintaan

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

Respons

{}

Mengaitkan perangkat ke klub

Parameter

body `string` (wajib) Objek JSON untuk memperbarui registrasi Perangkat CCTV.

Titik akhir

POST /api/cctv/devices/associate

Contoh Permintaan

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

Respons

{}

Mengirim Permintaan MQTT ke UUID perangkat tertentu, dan mengharapkan respons (melalui websocket) berupa kemampuan kamera yang tersedia.

Parameter

club `string` (wajib) ID internal klub pemilik perangkat yang Anda kueri. body `string` (wajib) Objek JSON parameter pembaruan.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Cantumkan registrasi perangkat

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/cctv/devices/:club

Contoh Permintaan

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

Respons

{}

Menghapus kamera jaringan dengan menandainya sebagai dihapus dan menghapusnya dari FEED_CONFIG Edge Processor

Parameter

club `string` (wajib) ID internal klub pemilik perangkat. balenaUUID `string` (wajib) UUID kamera jaringan yang akan dihapus.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Menyimpan setiap/semua kemampuan kamera yang dikonfigurasi dan menerapkannya ke perangkat sebagai variabel lingkungan (melalui balena)

Parameter

club `string` (wajib) ID internal klub pemilik perangkat yang Anda kueri. body `string` (wajib) Objek JSON parameter pembaruan.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Menyimpan masker gerakan (jika dikonfigurasi) untuk kamera dan menerapkannya ke perangkat sebagai variabel lingkungan (melalui balena)

Parameter

club `string` (wajib) ID internal klub pemilik perangkat yang Anda kueri. body `string` (wajib) Objek JSON masker kamera.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mengirim perintah v4l2 tertentu (seperti kecerahan atau kontras) ke perangkat fisik

Parameter

club `string` (wajib) ID internal klub pemilik perangkat yang Anda kueri. body `string` (wajib) Objek JSON parameter pembaruan.

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Uji URL stream kamera jaringan

Mengirim perintah uji ke Edge Processor untuk memvalidasi URL stream kamera menggunakan ffprobe

Isi Permintaan

Titik akhir

POST /api/cctv/devices/test-stream

Contoh Permintaan

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 '{}'

Respons

{}

Menghapus secara permanen satu catatan deteksi wajah dari database. Digunakan untuk menghapus entri jejak yang tidak cocok atau salah dari log aktivitas seseorang.

Parameter

club `string` (wajib) fdID `string` (wajib)

Titik akhir

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

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar data deteksi wajah seseorang

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. personID `string` (wajib) ID orang di dalam sistem identifikasi wajah

Titik akhir

GET /api/cctv/face-detections/:club/:personID

Contoh Permintaan

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

Respons

{}

Mengembalikan deteksi wajah yang merujuk ke gambar potongan orang tertentu, dikueri melalui GSI personCropImage.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. personCropImage `string` (wajib) URL gambar potongan orang yang disimpan pada catatan deteksi wajah. limit `string` (opsional) Jumlah maksimum deteksi yang dikembalikan. nextToken `string` (opsional) Token paginasi dari respons sebelumnya.

Titik akhir

GET /api/cctv/face-detections-by-person-crop-image/:club

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/cctv/face-detections-by-person-crop-image/:club \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar data deteksi wajah klub yang dikelompokkan berdasarkan rentang relatif terhadap waktu saat ini

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/cctv/face-detections/:club/timeline

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar data deteksi wajah klub

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/cctv/face-detections/:club

Contoh Permintaan

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

Respons

{}

Cari blok linimasa deteksi wajah di fasilitas menggunakan OpenSearch

Parameter

facilityId `string` (wajib) ID internal fasilitas tempat pencarian dilakukan timezone `string` (wajib) Zona waktu IANA untuk konversi tanggal (mis. Pacific/Auckland) startDate `string` (opsional) Filter tanggal mulai (YYYY-MM-DD), dikonversi menjadi startUnix menggunakan zona waktu endDate `string` (opsional) Filter tanggal selesai (YYYY-MM-DD), dikonversi menjadi endUnix menggunakan zona waktu personId `string` (opsional) Filter berdasarkan ID orang tertentu query `string` (opsional) Pencarian teks bebas (mis. nama orang) limit `string` (opsional) Hasil per halaman (default 20, maks. 100) filters `string` (opsional) Objek filter yang dienkode JSON (mis. {"matchType":"identified"}) sortBy `string` (opsional) Kolom untuk pengurutan (startUnix, endUnix, created). Default-nya endUnix. page `string` (opsional) Nomor halaman untuk paginasi (default 1) sortOrder `string` (opsional) Arah pengurutan (asc atau desc). Default-nya desc.

Titik akhir

GET /api/cctv/search/face-detections/timeline-blocks/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/cctv/search/face-detections/timeline-blocks/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar laporan tentang fasilitas klub

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/cctv/facility/:club/reports

Contoh Permintaan

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

Respons

{}

Memicu pembuatan heatmap sesuai permintaan. Menjalankan logika Starter yang sama dengan yang digunakan cron terjadwal, tetapi memungkinkan penargetan fasilitas, tanggal/waktu, dan kumpulan periode tertentu. Jika dipanggil tanpa isi permintaan, perilakunya sama dengan cron: memindai semua fasilitas yang memenuhi syarat dan memasukkan setiap perangkat ke antrean.

Isi Permintaan

Titik akhir

POST /api/cctv/heatmaps/generate

Contoh Permintaan

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 '{}'

Respons

{}

Menentukan lokasi PNG heatmap rentang bergulir yang telah disusun untuk satu perangkat. Hanya mengembalikan metadata JSON; byte PNG berada di domain konten, dan frontend menyusun URL sebagai: `${contentDomain}/cctv/${storageService}/${region}/${filePath}?s=${token}` Urutan penentuan: 1. Indeks DynamoDB `composed#…` ditemukan → langsung dikembalikan (~10 ms). 2. Wasabi HEAD pada kunci cache deterministik. Jika ditemukan, tulis baris indeks pengisian dan kembalikan. 3. Cadangan usang: ada catatan tersusun untuk tuple (perangkat, rentang, jam) ini, meskipun dari tanggal lain. Langsung dikembalikan dengan `cache: 'HIT-STALE'` agar FE dapat menampilkan *sesuatu*. Penyusunan baru dijalankan secara asinkron. 4. Jalur dingin: tidak ada catatan sama sekali. Lambda penyusun dimasukkan ke antrean melalui `InvocationType: 'Event'` dan endpoint mengembalikan `202 { cache: 'PENDING' }`. FE melakukan polling hingga catatan tersedia (biasanya 3-5 detik). Penanganan hari ini: jika `endDate` adalah "hari ini" lokal fasilitas, endpoint menyajikan PNG kemarin; potongan hari ini masih ditulis oleh cron Starter sehingga penyusunan baru akan tidak lengkap. Respons mengulang `endDate` yang diminta dan menyertakan `endDateUsed` (= kemarin). Enum `cache`: - `HIT`: disajikan dari indeks DDB untuk tanggal yang diminta. - `HIT-FALLBACK`: hari ini diminta; disajikan baris indeks kemarin. - `HIT-BACKFILL`: tidak ada di DDB tetapi Wasabi memiliki PNG; baris baru saja ditulis. - `HIT-FALLBACK-BACKFILL`: pengisian pada cadangan kemarin. - `HIT-STALE`: tidak ada catatan untuk tanggal yang diminta tetapi ada catatan dari tanggal lain untuk tuple ini; langsung disajikan dan penyusunan baru dimasukkan ke antrean di latar belakang. - `PENDING`: tidak ada catatan sama sekali; penyusunan telah dimasukkan ke antrean. FE sebaiknya melakukan polling. Respons berupa `202 Accepted`, tanpa `filePath`.

Parameter

facilityId `string` (wajib) deviceUUID `string` (wajib) Perangkat yang akan disusun. Penyusunan dilakukan per perangkat. hour `integer` (wajib) Jam dalam sehari (0–23) yang akan disusun di sepanjang rentang lihat ke belakang. endDate `string` (opsional) Tanggal terakhir dalam rentang (YYYY-MM-DD). Default-nya hari ini (zona waktu fasilitas). range `string` (opsional) Rentang lihat ke belakang. Harus salah satu rentang yang ada di daftar izin. nocache `integer` (opsional) Atur ke `1` untuk melewati lapisan cache DDB + HEAD dan memaksa penyusunan baru.

Titik akhir

GET /api/cctv/heatmaps/hourly/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/cctv/heatmaps/hourly/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Temukan jam-jam dalam sehari yang memiliki catatan potongan `1h` untuk perangkat selama rentang lihat ke belakang bergulir. Frontend menggunakannya untuk mengisi pemilih jam bersama pemilih tanggal + rentang sebelum memanggil endpoint penyusunan (`/api/cctv/heatmaps/hourly/...`). Contoh: `GET /api/cctv/heatmaps/query-hourly/Birkdale?deviceUUID=abc123&endDate=2026-04-16&range=30d` Secara internal: satu kueri rentang DynamoDB pada `cctvheatmaps` (`sk BETWEEN 1h#{start}-00 AND 1h#{end}-23`), dikelompokkan per jam. Mengembalikan satu entri per jam yang memiliki setidaknya satu potongan, termasuk JPEG referensi yang mewakili (diambil dari hari terbaru dalam rentang; referensi digunakan bersama per perangkat per hari).

Parameter

facilityId `string` (wajib) deviceUUID `string` (wajib) Perangkat yang akan dikueri. Potongan per jam bersifat per perangkat. endDate `string` (opsional) Tanggal terakhir dalam rentang (YYYY-MM-DD). Default-nya hari ini (zona waktu fasilitas). range `string` (opsional) Rentang lihat ke belakang. Harus salah satu rentang yang ada di daftar izin.

Titik akhir

GET /api/cctv/heatmaps/query-hourly/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/cctv/heatmaps/query-hourly/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Kueri catatan heatmap yang telah dibuat sebelumnya untuk fasilitas. **Semua catatan untuk satu jenis periode:** - `/api/cctv/heatmaps/Birkdale?periodType=1y` - `/api/cctv/heatmaps/Birkdale?deviceUUID=abc123&periodType=1d` **Rentang tanggal, satu jenis periode:** - `/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` **Rentang tanggal, semua jenis periode yang berlaku (tanpa periodType):** - `/api/cctv/heatmaps/Birkdale?from=2026-03-01&to=2026-03-31` Mengembalikan catatan tahunan, semesteran, triwulanan, dll. hingga 6h yang tumpang tindih dengan rentang yang diberikan. **Titik waktu, semua 9 jenis periode untuk satu perangkat:** - `/api/cctv/heatmaps/Birkdale?deviceUUID=abc123&date=2026-03-15T14:30` Mengembalikan hingga 9 catatan (1y, 6m, 3m, 2m, 1m, 1w, 1d, 12h, 6h).

Parameter

facilityId `string` (wajib) Pengidentifikasi fasilitas. deviceUUID `string` (opsional) Kueri perangkat tertentu. Jika tidak diisi, kueri dilakukan di semua perangkat (GSI). periodType `string` (opsional) Filter ke satu jenis periode. Jika tidak diisi bersama from/to, semua jenis dikueri. from `string` (opsional) Tanggal mulai (yyyy-mm-dd). Harus digunakan bersama `to`. to `string` (opsional) Tanggal selesai (yyyy-mm-dd). Harus digunakan bersama `from`. date `string` (opsional) Pencarian titik waktu (yyyy-mm-dd atau yyyy-mm-ddTHH:mm). Memerlukan deviceUUID. Mengembalikan satu catatan per jenis periode.

Titik akhir

GET /api/cctv/heatmaps/{facilityId}

Contoh Permintaan

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

Respons

{}

Dapatkan thumbnail livestream perangkat

Parameter

club `string` (wajib) ID internal klub. deviceId `string` (wajib) ID internal perangkat CCTV.

Titik akhir

GET /api/cctv/livestream/:club/thumbnail/:deviceId

Contoh Permintaan

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

Respons

{}

Beri tahu sistem CCTV bahwa Anda akan menonton livestream

Parameter

club `string` (wajib) ID internal klub. deviceId `string` (wajib) ID internal perangkat CCTV.

Titik akhir

POST /api/cctv/livestream/:club/iswatching/:deviceId

Contoh Permintaan

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

Respons

{}

Setujui kecocokan interseksi

Menetapkan status kecocokan menjadi confirmed dan mencatat peninjaunya.

Parameter

club `string` (wajib) matchId `string` (wajib)

Titik akhir

POST /api/cctv/matching/{club}/detail/{matchId}/approve

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId}/approve \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Dapatkan satu kecocokan interseksi beserta detail kunjungan

Mengembalikan catatan kecocokan dan rincian waktu per kunjungan.

Parameter

club `string` (wajib) matchId `string` (wajib)

Titik akhir

GET /api/cctv/matching/{club}/detail/{matchId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Cantumkan kecocokan interseksi untuk fasilitas

Mengembalikan kecocokan dengan paginasi yang difilter berdasarkan status.

Parameter

club `string` (wajib) status `string` (opsional) limit `integer` (opsional) nextToken `string` (opsional)

Titik akhir

GET /api/cctv/matching/{club}/list

Contoh Permintaan

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

Respons

{}

Tolak kecocokan interseksi

Menetapkan status kecocokan menjadi rejected dan mencatat peninjaunya.

Parameter

club `string` (wajib) matchId `string` (wajib)

Titik akhir

POST /api/cctv/matching/{club}/detail/{matchId}/reject

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId}/reject \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Dapatkan ringkasan jumlah pencocokan interseksi

Mengembalikan jumlah kecocokan yang dikelompokkan berdasarkan status untuk fasilitas.

Parameter

club `string` (wajib) ID Fasilitas

Titik akhir

GET /api/cctv/matching/{club}/summary

Contoh Permintaan

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

Respons

{}

Membaca status operasi "upsert identified person" yang sedang berjalan (mencakup pembuatan dan pengeditan). Membaca baris langsung dari tabel `people-ops` milik cctv-rekognition-api; tanpa lompatan Lambda. Digunakan oleh frontend CCTV untuk memantau progres setelah POST /api/cctv/people/{facility}/identified. Path ini sejajar dengan `/cctv/people/...` (tidak bersarang di bawahnya) sehingga router express tidak salah mencocokkan `operationId` sebagai `:personID` pada `/cctv/people/:club/:personID`. Lihat urutan glob createAPIRouter. Mengembalikan placeholder `pending` selama Lambda upsertIdentifiedPerson belum menulis entri tahap pertamanya (jendela cold start). Hook polling FE memperlakukan placeholder dan pending secara sama, sehingga kontrak tetap stabil bagi pemanggil.

Parameter

operationId `string` (wajib)

Titik akhir

GET /api/cctv/people-operations/{operationId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/cctv/people-operations/{operationId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menambahkan gambar wajah (dari deteksi jejak yang sudah ada) ke subjek pengenalan CompreFace milik orang tersebut dan menyimpan referensinya di tabel foto bayangan. TIDAK mengunggah gambar ke Wasabi karena gambar sudah ada di sana sebagai tangkapan deteksi wajah.

Parameter

club `string` (wajib) personID `string` (wajib) body `string` (wajib)

Titik akhir

POST /api/cctv/people/:club/:personID/add-face

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/:club/:personID/add-face \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Tambahkan foto bayangan ke catatan orang

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. personID `string` (wajib) ID catatan orang body `string` (wajib) Objek JSON blok konfigurasi baru yang akan ditambahkan ke sistem.

Titik akhir

POST /api/cctv/people/:club/shadow-photos/:personID

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/:club/shadow-photos/:personID \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Kueri foto bayangan seseorang

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. personID `string` (wajib) ID catatan orang

Titik akhir

GET /api/cctv/people/:club/shadow-photos/:personID

Contoh Permintaan

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

Respons

{}

Menghapus secara permanen catatan foto bayangan dari CCTVShadowPhotosTable dan menghapus wajah terkait dari CompreFace (jika faceId tersimpan).

Parameter

club `string` (wajib) personID `string` (wajib) id `string` (wajib) ID catatan foto bayangan (kunci utama)

Titik akhir

DELETE /api/cctv/people/:club/shadow-photos/:personID/:id

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/people/:club/shadow-photos/:personID/:id \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menghapus referensi dan catatan rekognition terkait berdasarkan personID

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. personID `string` (wajib) ID unik orang CCTV.

Titik akhir

DELETE /api/cctv/people/:club/:personID

Contoh Permintaan

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

Respons

{}

Mengembalikan catatan orang di klub

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. personID `string` (wajib) ID DB orang tersebut.

Titik akhir

GET /api/cctv/people/:club/:personID

Contoh Permintaan

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

Respons

{}

Dapatkan zona akses yang cocok dengan profil keanggotaan seseorang

Menentukan tipe anggota, tag, dan paket keanggotaan orang tersebut, lalu mengembalikan zona akses nyata (origin=membership-plan, tidak diserap) yang dicocokkan dengan aturan include/exclude. accessRestriction pada setiap zona dipangkas hanya menjadi aturan yang cocok dengan orang tersebut. Kamera zona anak digabungkan ke zona induk.

Parameter

club `string` (wajib) ID internal fasilitas personID `string` (wajib) ID orang dari tabel orang CCTV

Titik akhir

GET /api/cctv/people/{club}/{personID}/allowed-zones

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/{club}/{personID}/allowed-zones \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan status terkini tugas penggabungan, termasuk hasil per sumber. Lakukan polling ke endpoint ini setiap 3-5 detik selama status bernilai IN_PROGRESS.

Parameter

club `string` (wajib) mergeJobID `string` (wajib)

Titik akhir

GET /api/cctv/people/:club/merge-status/:mergeJobID

Contoh Permintaan

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

Respons

{}

Memulai penggabungan latar belakang beberapa profil orang tak teridentifikasi menjadi satu profil yang dipertahankan. Langsung merespons 202 dengan mergeJobID. Lakukan polling ke /merge-status/:mergeJobID untuk melihat progres.

Parameter

club `string` (wajib) body `string` (wajib)

Titik akhir

POST /api/cctv/people/:club/merge-unidentified

Contoh Permintaan

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

Tambahkan wajah ke koleksi daftar hitam untuk fasilitas

Parameter

facilityId `string` (wajib) ID internal fasilitas

Isi Permintaan

Titik akhir

POST /api/cctv/people/{facilityId}/blacklist

Contoh Permintaan

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 '{}'

Respons

{}

Upsert orang teridentifikasi di fasilitas: membuat catatan baru atau memperbarui yang sudah ada. Diteruskan ke Lambda upsertIdentifiedPerson, yang menulis catatan orang, mengunggah foto yang diberikan ke Wasabi, dan mengindeks ulang wajah di CompreFace. Jika `isNewRecord` bernilai true (default), Lambda menjalankan cabang pembuatan (cctvPeople.save) dan `personID` dibuat jika tidak diberikan. Jika `isNewRecord` bernilai false, Lambda menjalankan cabang pembaruan (cctvPeople.update); `personID` wajib diisi dan harus mengidentifikasi catatan yang sudah ada.

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/cctv/people/{facilityId}/identified

Contoh Permintaan

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 '{}'

Perbarui kumpulan kolom mitra opsional yang disinkronkan ke tabel orang CCTV untuk fasilitas.

Parameter

facilityId `string` (wajib) ID internal fasilitas

Isi Permintaan

Titik akhir

PUT /api/cctv/people/{facilityId}/sync-fields

Contoh Permintaan

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 '{}'

Respons

{}

Mengembalikan daftar data orang di klub

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/cctv/people/:club

Contoh Permintaan

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

Respons

{}

Cari orang di fasilitas berdasarkan gambar wajah. Memanggil Lambda imageFaceSearch milik cctv-rekognition-api dengan gambar base64 yang diunggah dan ID fasilitas dari path. Mengembalikan kecocokan berperingkat beserta ringkasan atribut DeepFace.

Parameter

club `string` (wajib) ID fasilitas / klub body `string` (wajib)

Titik akhir

POST /api/cctv/people/{club}/search-by-face

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/{club}/search-by-face \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Cari orang di fasilitas menggunakan OpenSearch

Parameter

facilityId `string` (wajib) ID internal fasilitas tempat pencarian dilakukan query `string` (opsional) Kata kunci pencarian (mis. nama) page `string` (opsional) Nomor halaman (default 1) limit `string` (opsional) Hasil per halaman (default 20, maks. 100) filters `string` (opsional) Objek filter yang dienkode JSON (mis. {"membershipStatus":"active"}) sortBy `string` (opsional) Kolom untuk pengurutan (created, lastName, firstName, membershipUpdatedOn). Default-nya created. sortOrder `string` (opsional) Arah pengurutan (asc atau desc). Default-nya desc.

Titik akhir

GET /api/cctv/search/people/:facilityId

Contoh Permintaan

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

Respons

{}

Memperbarui item deteksi wajah dengan personID baru dan mengaitkan catatan rekognition

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. body `string` (wajib) Objek JSON blok konfigurasi baru yang akan ditambahkan ke sistem.

Titik akhir

POST /api/cctv/people/:club/validate

Contoh Permintaan

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

Respons

{}

Mengembalikan objek berisi semua filter yang tersedia untuk data rekaman CCTV klub

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/cctv/recordings/filters/:club

Contoh Permintaan

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

Respons

{}

Streaming rekaman.

Titik akhir

GET /api/cctv/recordings/:club/:dir/:filename

Contoh Permintaan

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

Respons

{}

Perbarui info tentang rekaman.

Titik akhir

PUT /api/cctv/recordings/:club/:dir/:filename

Contoh Permintaan

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

Respons

{}

Mengembalikan ringkasan data rekaman CCTV klub

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/cctv/recordings/:club/summary

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar data rekaman CCTV klub berdasarkan rentang relatif terhadap waktu saat ini

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/cctv/recordings/:club/timeline

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar data rekaman CCTV klub

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/cctv/recordings/:club

Contoh Permintaan

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

Respons

{}

Rekaman dihapus secara otomatis setelah periode tertentu; gunakan fungsi ini untuk menyimpan rekaman

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

POST /api/cctv/recordings/:club/:action

Contoh Permintaan

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

Respons

{}

Cari snapshot laporan untuk fasilitas dalam rentang tanggal

Parameter

facilityId `string` (wajib) ID internal fasilitas startDate `string` (wajib) Filter tanggal mulai (YYYY-MM-DD) endDate `string` (wajib) Filter tanggal selesai (YYYY-MM-DD) deviceIds `string` (opsional) Daftar ID kamera/perangkat yang dipisahkan koma untuk pemfilteran view `string` (opsional) Tampilan laporan alternatif yang akan dihitung (diteruskan ke Lambda laporan)

Titik akhir

GET /api/cctv/reports/search-report-snapshots/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/cctv/reports/search-report-snapshots/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Pencarian vektor atas media CCTV fasilitas yang telah diindeks. Merespons dengan text/event-stream yang diteruskan dari Lambda searchAnything, sehingga klien dapat menampilkan progres selama container dingin memuat encoder. Peristiwanya adalah `status`, lalu `result` atau `error`. Ada tiga cara bertanya, dua di antaranya pada verb ini. Kirim `query` untuk mencari dengan teks bebas. Kirim `seedIndex` + `seedKey` untuk mencari berdasarkan contoh ("lebih banyak seperti ini") menggunakan vektor baris yang sudah ada di indeks; dengan cara inilah Anda menemukan lebih banyak hasil serupa dengan yang sedang dilihat pengguna. Untuk mencari berdasarkan gambar yang dimiliki pengguna, kirim byte-nya dengan `POST` ke path yang sama. Kirim kata-kata bersama gambar untuk mempersempit salah satunya dengan yang lain: **teks menyaring, gambar memeringkat**. Kandidat berasal dari seed, kata-kata menentukan kandidat mana yang bertahan, dan kemiripan visual menentukan urutannya; dengan demikian hasilnya tetap mirip dengan gambar dan kata-kata membuang hasil yang tidak cocok. Keduanya tidak pernah digabungkan menjadi satu vektor, itulah sebabnya `queryKind` tetap `similar` untuk pencarian gabungan; keberadaan `query` pada hasil menunjukkan bahwa saringan teks telah diterapkan. Pencarian gabungan cukup sering tidak mengembalikan apa pun, dan perlakukan hal itu sebagai hasil tersendiri: `perIndex..textGated` menghitung kandidat yang cocok dengan gambar tetapi tidak dengan kata-kata, sehingga halaman kosong dapat dijelaskan sebagai "hapus kata-katanya", bukan "coba gambar lain". Pencarian dengan seed tanpa kata-kata tidak memuat encoder, sehingga tidak pernah mengalami cold start; menambahkan kata-kata menghilangkan keuntungan itu. Bagaimanapun, pencarian dilakukan di setiap indeks secara default: vektor potongan, rekaman, dan timelapse berbagi satu ruang, sehingga potongan orang dapat menemukan rekaman yang cocok. Skor dengan seed jauh lebih tinggi daripada skor teks (gambar-ke-gambar tidak melintasi kesenjangan modalitas) dan difilter oleh ambang terpisah yang belum dikalibrasi; `result.queryKind` memberi tahu skala mana yang sedang Anda baca, dan skor dari satu skala tidak boleh dibandingkan dengan skala lainnya. Secara default mencari di setiap indeks dan mengembalikan satu daftar gabungan yang diurutkan berdasarkan skor; setiap hasil membawa `index` dan `kind` sehingga pemanggil dapat membedakan hasil gambar dari hasil video (yang terakhir menambahkan `offsetMs`). Indeks yang tidak memiliki tabel untuk fasilitas dilaporkan di `skipped`, bukan menyebabkan kegagalan. Hasil di bawah ambang relevansi terkalibrasi setiap indeks dibuang, sehingga kueri tanpa kecocokan nyata mengembalikan daftar kosong, bukan hasil keliru yang tampak meyakinkan; `perIndex` melaporkan kontribusi setiap indeks dan alasannya. Hasil dapat dipersempit berdasarkan waktu pengambilan dan kamera. Utamakan `cameraId` daripada `camera`: ini adalah balenaUUID kamera, satu-satunya nilai yang disimpan secara identik oleh setiap indeks, sehingga satu filter mempersempit semuanya. Filter yang tidak dapat dijawab oleh suatu indeks dilaporkan di `perIndex..filtersIgnored` dan indeks tersebut dicari tanpa dipersempit, alih-alih dikeluarkan dari pencarian. Hasil rekaman berupa **satu per klip, bukan satu per frame yang cocok**: frame diambil sampelnya setiap 2 s, sehingga subjek yang berlama-lama cocok dengan sepuluh frame yang hampir identik dari rekaman yang sama. Setiap klip mengembalikan frame terbaiknya, ditambah `matchCount` dan `offsetsMs` yang mencantumkan setiap momen yang cocok di dalamnya, yang dapat langsung digunakan sebagai titik lompat. Potongan orang tidak pernah digabungkan, karena dua potongan dari satu orang adalah dua penampakan yang berbeda.

Parameter

facilityId `string` (wajib) ID internal fasilitas tempat pencarian dilakukan query `string` (opsional) Deskripsi teks bebas tentang apa yang dicari. Wajib kecuali warm=1 atau seed dikirim. Jika digabungkan dengan seed, teks ini tidak lagi menjadi hal yang diperingkat, melainkan menjadi filter atas kandidat seed, yang membuang kandidat dengan skor teks di bawah ambang relevansi indeks. seedIndex `string` (opsional) Cari berdasarkan contoh, bukan teks: indeks tempat baris seed berada (person-crops, recording-frames, timelapse-frames). Ini adalah `index` dari hasil yang diklik pengguna. Harus dikirim bersama seedKey. seedKey `string` (opsional) `key` baris seed, diambil apa adanya dari hasil. Seed dikecualikan dari hasilnya sendiri; untuk rekaman, artinya seluruh klip, karena frame lainnya berjarak 2s dan hampir identik. seedFrameId `string` (opsional) Wajib jika seedIndex adalah recording-frames: indeks tersebut menyimpan satu baris per frame sampel dan semuanya berbagi kunci klip, sehingga kunci saja hanya menunjuk klip, bukan momen. Kirim `frameId` dari hasil. Baris lama tidak memilikinya; kirim seedOffsetMs sebagai gantinya. seedOffsetMs `string` (opsional) Pengidentifikasi frame cadangan untuk seed recording-frames yang barisnya lebih lama dari `frame_id`. Kirim `offsetMs` dari hasil. Diabaikan jika seedFrameId diberikan. warm `string` (opsional) Siapkan container Lambda tanpa menjalankan pencarian. Panggil ini saat halaman dimuat. warmTarget `string` (opsional) Encoder yang dimuat oleh `warm`: `text` (default), `image`, atau `both`. Menara visi berukuran 355 MB dibandingkan menara teks 283 MB, sehingga penyiapannya bersifat opsional; minta `image` hanya setelah pengguna benar-benar menyiapkan gambar, bukan saat halaman dimuat. index `string` (opsional) Dataset yang dipisahkan koma untuk dicari: person-crops, recording-frames, timelapse-frames. Hasil digabungkan menjadi satu daftar yang diurutkan berdasarkan skor. Ketiganya dicari secara default; berikan daftar eksplisit untuk mempersempitnya. timelapse-frames mencakup kamera yang tidak merekam apa pun dan hanya menghasilkan satu frame per menit, dan ambang relevansinya belum dikalibrasi. model `string` (opsional) Encoder yang digunakan untuk kueri. Harus sama dengan encoder yang digunakan untuk mengindeks dataset. limit `string` (opsional) Hasil yang dikembalikan per indeks (default 50, maks. 100); ini bukan total, sehingga pencarian di ketiga indeks dapat mengembalikan hingga tiga kali jumlah ini. Untuk rekaman, yang dihitung adalah klip, bukan frame yang cocok. from `string` (opsional) Hanya cocokkan media yang diambil pada atau setelah waktu ini, dalam milidetik sejak epoch. Perhatikan bahwa ini adalah waktu pengambilan, bukan waktu unggah. to `string` (opsional) Hanya cocokkan media yang diambil sebelum waktu ini (eksklusif), dalam milidetik sejak epoch. cameraId `string` (opsional) balenaUUID kamera yang dipisahkan koma untuk mempersempit hasil, yaitu kolom `balenaUUID` dari setiap entri yang dikembalikan oleh /api/cctv/recordings/filters/:club. Ini adalah filter kamera yang diutamakan: setiap indeks menyimpan nilai yang sama ini, sehingga satu filter mempersempit semuanya. Perhatikan bahwa hanya potongan yang join deteksi wajahnya berhasil yang membawanya (~1% saat ini), sehingga mempersempit potongan berdasarkan kamera akan mengembalikan sedikit atau tidak ada hasil hingga pengisian potongan dijalankan; rekaman terisi penuh dan difilter secara tepat. camera `string` (opsional) Nama kamera yang dipisahkan koma untuk mempersempit hasil. Praktis hanya untuk rekaman: person-crops menyimpan nama kamera kosong di setiap baris, sehingga nilai apa pun di sini mengecualikan semua potongan. Utamakan cameraId. cameraGroup `string` (opsional) Grup kamera yang dipisahkan koma untuk mempersempit hasil. Terisi di semua rekaman tetapi hanya ~1% potongan, dengan penyebab yang sama seperti cameraId. minScore `string` (opsional) Mengganti ambang kosinus per indeks yang menyaring derau. Jangan diisi di produksi; setiap indeks memiliki default terkalibrasi (dan default terpisah yang belum dikalibrasi untuk pencarian dengan seed). Berikan 0 untuk melihat tetangga terdekat tanpa filter saat men-debug relevansi.

Titik akhir

GET /api/cctv/search/anything/:facilityId

Contoh Permintaan

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

Respons

{}

Cari berdasarkan gambar yang dimiliki pengguna, bukan berdasarkan kata-kata atau hasil yang sudah ada di layar. Sama dengan GET dalam semua hal lainnya (parameter kueri, aliran peristiwa, dan bentuk hasil yang sama), sehingga di sini hanya dijelaskan perbedaannya. Kirim **byte file asli** sebagai isi permintaan dengan Content-Type `image/*`. Jangan mengubah ukuran, memotong, atau mengenkode ulang gambar di browser terlebih dahulu: server mencocokkan pengubahan ukuran yang sangat spesifik (dipadatkan ke 256x256 dengan kernel bilinear antialias) yang digunakan untuk membangun vektor terindeks, sedangkan penskalaan canvas menggunakan metode lain. Berdasarkan pengukuran, penggantian tersebut menghasilkan jarak kosinus sekitar 0,93 dari jawaban yang benar, lebih jauh daripada jarak dua gambar yang benar-benar berbeda; akibatnya hasil dikembalikan dengan peringkat yang tampak wajar tetapi salah, tanpa error. Dibatasi 4 MB, yang merupakan batasan transportasi, bukan kualitas: byte dikirim di dalam payload pemanggilan Lambda, yang dibatasi 6 MB, dan base64 menambah ukurannya sepertiga. Hasil diberi skor gambar-ke-gambar, sehingga `queryKind` bernilai `image` dan skornya berada pada skala jauh lebih tinggi yang sama dengan pencarian ber-seed; tidak pernah dapat dibandingkan dengan skor teks. Skornya cenderung sedikit *lebih rendah* daripada pencarian ber-seed yang setara: vektor seed ditulis oleh perangkat itu sendiri, sedangkan unggahan dienkode ulang di sini oleh mesin yang berbeda, sehingga bergeser beberapa perseratus dari posisi yang akan dihasilkan perangkat. Berdasarkan pengukuran, kualitas hasilnya tetap setara; hanya saja kumpulannya tidak identik. Menambahkan `query` menyaring hasil dengan kata-kata tersebut, persis seperti untuk seed. Mengirim seed *dan* gambar akan ditolak: keduanya adalah hal yang diperingkat, sehingga pasangan tersebut tidak bermakna. Ini adalah permintaan paling mahal yang dilayani endpoint ini. Gambar yang diunggah memuat menara visi, dan menambahkan kata-kata juga memuat menara teks, keduanya pada container dingin. `warm=1&warmTarget=image` setelah pengguna menyiapkan gambar akan mengeluarkan proses itu dari jalur kritis.

Parameter

facilityId `string` (wajib) ID internal fasilitas tempat pencarian dilakukan body `string` (wajib) Byte gambar mentah, tanpa modifikasi, maksimum 4 MB query `string` (opsional) Kata-kata opsional untuk mempersempit hasil gambar, dengan membuang kecocokan yang skor teksnya di bawah ambang relevansi indeks.

Titik akhir

POST /api/cctv/search/anything/:facilityId

Contoh Permintaan

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

Respons

{}

Mengembalikan detail penyimpanan dan data metrik lainnya untuk CCTV klub

Titik akhir

GET /api/cctv/storage-details/:club

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar catatan unggahan timelapse klub

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/cctv/timelapse/:club

Contoh Permintaan

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

Respons

{}

Cantumkan tindakan pengguna yang dilakukan pada rekaman di Frontend atau UI CCTV

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/cctv/ui/actions/:club

Contoh Permintaan

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

Respons

{}

Catat tindakan pengguna yang dilakukan pada rekaman di Frontend atau UI CCTV

Parameter

body `string` (wajib) Objek JSON blok konfigurasi baru yang akan ditambahkan ke sistem.

Titik akhir

POST /api/cctv/ui/actions/:club

Contoh Permintaan

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

Respons

{}

Dapatkan token pengguna untuk Frontend atau UI CCTV

Parameter

club `string` (wajib) ID Klub

Titik akhir

GET /api/cctv/ui/token/:club

Contoh Permintaan

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

Respons

{}

Buat token untuk akses sementara atau tamu

Parameter

club `string` (wajib) Pengidentifikasi unik klub. body `string` (wajib) Objek JSON detail token yang akan diterbitkan.

Titik akhir

POST /api/cctv/token/{club}

Contoh Permintaan

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

Respons

{
  "accessID": "00000000-0000-0000-0000-000000000014"
}

Mengembalikan daftar catatan token untuk akses sementara atau tamu

Parameter

club `string` (wajib) Pengidentifikasi unik klub.

Titik akhir

GET /api/cctv/token/{club}

Contoh Permintaan

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

Respons

{}

Mendapatkan token akses melalui ID akses

Parameter

accessID `string` (wajib) ID catatan token di basis data.

Titik akhir

POST /guest/cctv/token/:accessID

Contoh Permintaan

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

Respons

{}

Hapus jam akses fasilitas

Parameter

facilityId `string` (wajib) body `object` (wajib) Objek JSON jam akses baru.

Titik akhir

DELETE /api/ai/computer-vision/access-hours/:facilityId

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/ai/computer-vision/access-hours/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar jam akses fasilitas

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/ai/computer-vision/access-hours/:facilityId

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/ai/computer-vision/access-hours/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui atau membuat jam akses fasilitas

Parameter

facilityId `string` (wajib) body `object` (wajib) Objek JSON jam akses baru.

Titik akhir

POST /api/ai/computer-vision/access-hours/:facilityId

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/ai/computer-vision/access-hours/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Hapus zona akses fasilitas

Parameter

facilityId `string` (wajib) body `object` (wajib) Objek JSON zona akses baru.

Titik akhir

DELETE /api/ai/computer-vision/access-zones/:facilityId

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/ai/computer-vision/access-zones/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar zona akses fasilitas

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/ai/computer-vision/access-zones/:facilityId

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/ai/computer-vision/access-zones/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui atau membuat zona akses fasilitas

Parameter

facilityId `string` (wajib) body `object` (wajib) Objek JSON zona akses baru.

Titik akhir

POST /api/ai/computer-vision/access-zones/:facilityId

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/ai/computer-vision/access-zones/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan gabungan semua ID modul admin di seluruh merek dan fasilitas untuk organisasi, diisi sebagai objek modul.

Parameter

organisationId `string` (wajib) ID organisasi

Titik akhir

GET /api/organisations/{organisationId}/admin-modules

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/organisations/{organisationId}/admin-modules \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar semua organisasi

Parameter

includeBrands `string` (opsional) Sertakan merek yang terkait dengan organisasi includeFacilities `string` (opsional) Sertakan fasilitas yang terkait dengan organisasi includeRegions `string` (opsional) Sertakan wilayah yang terkait dengan organisasi

Titik akhir

GET /api/organisations

Contoh Permintaan

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

Respons

{}

Helper AI sederhana untuk menganalisis isi tiket dukungan dan membuat saran berdasarkan topik yang tersedia serta topik pencarian Algolia yang disarankan.

Parameter

messageBody `string` (wajib) Isi pesan yang akan dikirim topicData `string` (wajib) Objek/array JSON dari topicData yang dikembalikan oleh osTicket (sistem tiket/dukungan) facilityId `string` (opsional) ID internal klub yang diperlukan untuk menentukan indeks Algolia yang tepat untuk pencarian.

Titik akhir

PUT /api/ai/helpers/analyse-support-ticket

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/ai/helpers/analyse-support-ticket \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

API pembuatan gambar sederhana

Parameter

type `string` (wajib) Jenis gambar yang akan dibuat name `string` (wajib) Nama gambar maxSize `string` (opsional) Ukuran respons maksimum opsional, mis. 200KB, 1MB, atau jumlah byte biasa. Gambar diperkecil/dikompresi agar sesuai.

Titik akhir

PUT /api/ai/images/:type/:name

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/ai/images/:type/:name \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Kueri LLM sederhana

Endpoint ringan untuk kueri LLM sederhana tanpa status. Menggunakan model murah tanpa penalaran (gpt-4o-mini) dengan batas token yang ketat. Tanpa riwayat percakapan, tanpa alat, tanpa streaming: hanya prompt masuk, teks keluar.

Isi Permintaan

Titik akhir

POST /api/ai/llm/query

Contoh Permintaan

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 '{}'

Respons

{}

Mengembalikan konfigurasi Algolia, termasuk nama indeks, ID aplikasi, dan kunci API.

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/facilities/{facilityId}/algolia/config

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/algolia/config \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menginisialisasi indeks cetak pemasaran Algolia

Parameter

organisationId `string` (wajib)

Titik akhir

PUT /api/algolia/index

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/algolia/index \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Cari materi cetak pemasaran

Isi Permintaan

Titik akhir

POST /algolia/search-marketing-print

Contoh Permintaan

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 '{}'

Respons

{}

Cari materi cetak pemasaran

Parameter

club `string` (opsional) ID Klub searchTerms `string` (opsional) Kata kunci pencarian algoliaArgs `object` (opsional) Argumen pencarian Algolia tambahan

Titik akhir

GET /algolia/search-marketing-print

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/algolia/search-marketing-print \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Perbarui objek cetak pemasaran secara massal untuk klub tertentu

Titik akhir

POST /algolia/bulk-update-marketing-print

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/algolia/bulk-update-marketing-print \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengambil aset cetak pemasaran dari Algolia.

Parameter

organisationId `string` (wajib) search `string` (opsional) limit `string` (opsional) brand `string` (opsional) tag `string` (opsional)

Titik akhir

GET /api/algolia/marketing/assets

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/algolia/marketing/assets \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menginisialisasi indeks cetak pemasaran Algolia dengan konfigurasi fasilitas.

Parameter

organisationId `string` (wajib)

Titik akhir

POST /api/algolia/marketing/assets

Contoh Permintaan

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

Respons

{}

Melakukan pencarian pada indeks Algolia tertentu berdasarkan kata kunci pencarian, klub, dan/atau lokal. Pencarian dapat disesuaikan lebih lanjut menggunakan argumen Algolia tambahan.

Parameter

searchTerms `string` (wajib) Kata kunci yang akan dicari di indeks Algolia. club `string` (opsional) ID internal klub yang membuat permintaan. Jika ditentukan, pencarian akan difilter berdasarkan wilayah yang terkait dengan klub. locale `string` (opsional) Lokal yang digunakan untuk menentukan wilayah jika klub tidak ditentukan. Diambil dari navigator.languages. algoliaArgs `string` (opsional) Argumen tambahan/kustom yang diteruskan ke permintaan pencarian Algolia.

Titik akhir

POST /api/algolia/search-wiki

Contoh Permintaan

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

Respons

{}

Mencantumkan semua pengumuman

Titik akhir

GET /api/announcements/list

Contoh Permintaan

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

Respons

{}

Mengunggah aset ke BUCKET S3 PUBLIK (melalui Upload API) yang kemudian akan melakukan pascapemrosesan/mengoptimalkan file, membuat thumbnail, dll. *Catatan: aset akan tersedia untuk publik*

Parameter

file `string` (opsional) Nama file/aset yang akan diunggah.

Titik akhir

POST /api/asset-upload

Contoh Permintaan

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

Respons

{}

Mengembalikan status unggahan berdasarkan uuid catatan unggahan yang diberikan

Parameter

uuid `string` (wajib) UUID catatan unggahan

Titik akhir

GET /api/asset-upload/:uuid

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/asset-upload/:uuid \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Kirim perintah ke Sonos klub

Parameter

body `object` (wajib) Objek JSON berisi perintah dan input yang akan dikirim ke Sonos.

Titik akhir

PUT /api/audio-control/command/:club

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/audio-control/command/:club \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Ambil konfigurasi untuk Frontend Kontrol Audio

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/audio-control/config/:club

Contoh Permintaan

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

Respons

{}

Ubah konfigurasi untuk Frontend Kontrol Audio

Parameter

body `object` (wajib) Objek JSON blok konfigurasi baru yang akan ditambahkan ke sistem.

Titik akhir

PUT /api/audio-control/config/:club/:section

Contoh Permintaan

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

Respons

{}

Mengambil pengaturan brand untuk wilayah tertentu

Parameter

brandId `string` (opsional) ID brand regionCode `string` (opsional) Kode ISO wilayah yang pengaturannya akan diambil

Titik akhir

GET /api/brands/{brandId}/regions/{regionCode}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/regions/{regionCode} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui beberapa pengaturan brand untuk wilayah tertentu

Parameter

brandId `string` (opsional) ID brand yang akan diperbarui regionCode `string` (opsional) Kode ISO wilayah yang pengaturannya akan diperbarui acceptFreeTrialBookingsVisibility `string` (opsional) customTrackingCodeVisibility `string` (opsional) displayDataSources `string` (opsional) displayDefaultDataSource `string` (opsional) displayDefaultUI `string` (opsional) displayUIOptions `string` (opsional) defaultAboutBusiness `string` (opsional) defaultAboutBusinessFacebook `string` (opsional) facilityCoverImage `string` (opsional) digitalProfileSettingsVisibility `string` (opsional) facilityHoursVisibility `string` (opsional) facilityLocationVisibility `string` (opsional) facilityPaymentMethods `string` (opsional) facilityPrimaryLogo `string` (opsional) facilityStatusVisibility `string` (opsional) landingPagesVisibility `string` (opsional) lineChatIntegrationVisibility `string` (opsional) whatsAppIntegrationVisibility `string` (opsional) defaultWhatsAppMessage `string` (opsional) socialUrlsVisibility `string` (opsional) yextApiKey `string` (opsional) Kunci API yang digunakan integrasi Yext untuk brand-wilayah ini. Hanya digunakan jika `directorySyncMode` bernilai `yext`. directorySyncMode `string` (opsional) Backend sinkronisasi yang dijalankan untuk fasilitas di bawah brand-wilayah ini. Default-nya `yext` jika tidak ada, demi kompatibilitas dengan brand yang sudah ada sebelum peluncuran Directory Publishers. websiteUrl `string` (opsional) androidAppUrl `string` (opsional) iosAppUrl `string` (opsional) featuredMessageDescription `string` (opsional) yextCategoryIds `string` (opsional) Kunci penyimpanan lama; sebenarnya ini adalah ID kategori Google Business Profile (mis. gcid:gym). Awalan "yext" sudah ada sebelum Yext dihentikan; dipertahankan demi kompatibilitas dengan baris DB yang ada. customInputFields `string` (opsional) customInputFieldsToRemove `string` (opsional)

Titik akhir

PUT /api/brands/{brandId}/regions/{regionCode}

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/brands/{brandId}/regions/{regionCode} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengambil pengaturan brand untuk fasilitas tertentu

Parameter

facilityId `string` (opsional) ID fasilitas yang pengaturan brand-nya akan diambil

Titik akhir

GET /api/facilities/{facilityId}/brand-settings

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/brand-settings \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat brand baru

Parameter

name `string` (wajib) Nama brand organisationId `string` (wajib) ID organisasi pemilik brand redirectDashboard `string` (opsional) URL tujuan pengalihan setelah masuk, sebagai pengganti dasbor default

Titik akhir

POST /api/brands

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar semua brand

Titik akhir

GET /api/brands

Contoh Permintaan

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

Respons

{}

Mengembalikan objek brand

Parameter

brandId `string` (wajib) ID brand yang akan diambil includeOrganisation `boolean` (opsional) Apakah data organisasi disertakan dalam respons

Titik akhir

GET /api/brands/{brandId}

Contoh Permintaan

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

Respons

{}

Memperbarui brand berdasarkan ID

Parameter

brandId `string` (opsional) ID brand yang akan diperbarui name `string` (wajib) Nama brand brandOrganisationId `string` (opsional) ID organisasi pemilik brand redirectDashboard `string` (opsional) URL tujuan pengalihan setelah masuk, sebagai pengganti dasbor default yextApiKey `string` (opsional) Kunci API yang digunakan untuk mengakses Yext API untuk brand ini customMenuLayout `object` (opsional) Struktur tata letak menu samping per brand (bagian / grup / item dengan referensi ke modul sistem atau URL kustom). Hanya dapat diatur oleh admin organisasi untuk organisasi brand ini.

Titik akhir

PUT /api/brands/{brandId}

Contoh Permintaan

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

Respons

{}

Cantumkan fasilitas untuk brand

Mengembalikan daftar ringkas fasilitas (id, nama, kode ISO wilayah) milik brand. Digunakan untuk mengisi pemilih target fasilitas di konfigurasi brand.

Parameter

brandId `string` (wajib) ID brand yang fasilitasnya akan dicantumkan

Titik akhir

GET /api/brands/{brandId}/facilities

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/facilities \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar semua brand yang terkait dengan organisasi klub.

Titik akhir

GET /api/clubs/{club}/brands

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar semua jenis kalender

Titik akhir

GET /api/programs/calendars/calendar-types

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/programs/calendars/calendar-types \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Hapus banner dasbor

Melakukan soft delete pada banner dasbor milik brand.

Parameter

brandId `string` (wajib) ID brand pemilik banner bannerId `string` (wajib) ID banner yang akan dihapus

Titik akhir

DELETE /api/brands/{brandId}/dashboard-banners/{bannerId}

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/brands/{brandId}/dashboard-banners/{bannerId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Cantumkan banner dasbor untuk brand

Mengembalikan semua banner dasbor (yang tidak dihapus) yang dikonfigurasi untuk brand, untuk pengelolaan admin.

Parameter

brandId `string` (wajib) ID brand yang banner-nya akan dicantumkan

Titik akhir

GET /api/brands/{brandId}/dashboard-banners

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/dashboard-banners \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Buat atau perbarui banner dasbor

Membuat banner dasbor baru untuk brand, atau memperbarui banner yang ada jika `bannerId` disertakan di isi permintaan. Banner dapat dijadwalkan (mulai/selesai dalam detik unix, null = tanpa batas) dan ditargetkan ke seluruh brand, wilayah tertentu (kode ISO), atau fasilitas tertentu.

Parameter

brandId `string` (wajib) ID brand pemilik banner

Isi Permintaan

Titik akhir

PUT /api/brands/{brandId}/dashboard-banners

Contoh Permintaan

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 '{}'

Respons

{}

Mendapatkan banner dasbor aktif untuk fasilitas

Menentukan banner dasbor yang saat ini harus ditampilkan untuk fasilitas, berdasarkan merek fasilitas, wilayah (kode negara ISO), serta flag enabled, jendela jadwal, dan penargetan setiap banner. Digunakan oleh UI dasbor.

Parameter

facilityId `string` (wajib) ID fasilitas yang banner-nya akan ditentukan

Titik akhir

GET /api/facilities/{facilityId}/dashboard-banners

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/dashboard-banners \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan aset KYC untuk klub.

Parameter

clubId `string` (wajib) ID klub. key `string` (wajib) Kunci aset KYC.

Titik akhir

GET /api/clubs/{clubId}/kyc-assets/{key}

Contoh Permintaan

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

Respons

{}

Mengembalikan informasi KYC klub.

Titik akhir

GET /api/clubs/{clubId}/kyc

Contoh Permintaan

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

Respons

{}

Memperbarui informasi KYC klub.

Parameter

clubId `string` (wajib) ID klub yang akan diperbarui. body `object` (wajib)

Titik akhir

PUT /api/clubs/{clubId}/kyc

Contoh Permintaan

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

Respons

{}

Mengunggah aset KYC untuk klub.

Parameter

clubId `string` (wajib) ID klub. file `string` (wajib) File yang akan diunggah.

Titik akhir

POST /api/clubs/{clubId}/kyc-assets

Contoh Permintaan

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

Respons

{}

Mengembalikan pengaturan preferensi klub.

Titik akhir

GET /api/club/preferences/:club

Contoh Permintaan

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

Respons

{}

Membuat atau memperbarui entri preferensi klub.

Isi Permintaan

Titik akhir

POST /api/club/preferences/:club

Contoh Permintaan

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 '{}'

Respons

{}

Mengembalikan daftar anggota beserta perjanjian.

Titik akhir

GET /api/clubpass/user/email/exist/:club

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubpass/user/email/exist/:club \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar anggota beserta perjanjian.

Titik akhir

GET /api/clubpass/user/phone/exist/:club

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubpass/user/phone/exist/:club \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar pengguna yang tergabung dalam klub yang ditentukan

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses

Titik akhir

GET /api/clubs/{club}/members

Contoh Permintaan

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

Respons

{}

Mengembalikan apakah klub buka pada tanggal tertentu.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. date `string` (wajib) Tanggal yang akan diperiksa dalam format unix

Titik akhir

GET /api/club-busy-hours/:club

Contoh Permintaan

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

Respons

{}

Mengembalikan semua metadata Klub yang ditampilkan di situs web Example Club.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/clubs/clubpage/clubdata/{club}

Contoh Permintaan

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

Respons

{}

Memperbarui Metadata klub dengan data baru yang diberikan dari front-end. Kolom yang tidak ada di isi permintaan dipertahankan (tanpa SET, tanpa REMOVE). Kolom yang dikirim sebagai `null` atau string kosong akan dikosongkan. Berikan `updateAll: false` untuk menggunakan jalur penggabungan sebagian khusus; bagaimanapun juga, pemanggil tidak perlu mengirim kolom yang bukan miliknya.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. body `string` (wajib) Objek JSON data klub yang ingin Anda perbarui.

Titik akhir

POST /api/clubs/clubpage/updateclub/{club}

Contoh Permintaan

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

Respons

{}

tambahkan catatan pelacakan kustom baru

Parameter

club `string` (wajib) id klub body `string` (wajib) Array item pelacakan kustom.

Titik akhir

POST /api/clubs/{club}/customtracking

Contoh Permintaan

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

Respons

{}

Mengembalikan pelacakan kustom untuk klub tertentu

Titik akhir

GET /api/clubs/customtracking/:clubID

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubs/customtracking/:clubID \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Perbarui entri pelacakan kustom

Parameter

club `string` (wajib) id klub body `string` (wajib) Objek JSON data klub yang ingin Anda perbarui.

Titik akhir

POST /api/clubs/{club}/customtracking/update

Contoh Permintaan

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

Respons

{}

Mengembalikan gambar etalase default untuk klub.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/clubs/{club}/default-shop-front

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/default-shop-front \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Cantumkan pintu yang tersedia di fasilitas

Parameter

body `object` (wajib) Objek JSON data klub yang ingin Anda perbarui.

Titik akhir

POST /api/clubs/integrations/doors/:facilityId

Contoh Permintaan

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

Respons

{}

Buka kunci pintu tertentu di fasilitas

Parameter

body `object` (wajib) Objek JSON data klub yang ingin Anda perbarui.

Titik akhir

POST /api/clubs/integrations/doors/unlock

Contoh Permintaan

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

Respons

{}

Mengembalikan semua integrasi dan detail konfigurasi untuk klub yang ditentukan.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/clubs/integrations/list/{club}

Contoh Permintaan

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

Respons

{}

Memperbarui Metadata klub dengan data baru yang diberikan dari front-end.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. body `object` (wajib) Objek JSON data klub yang ingin Anda perbarui.

Titik akhir

POST /api/clubs/integrations/update/{club}

Contoh Permintaan

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

Respons

{}

Mengembalikan boolean apakah klub berada di negara Eropa atau tidak

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. date `string` (wajib) Tanggal yang akan diperiksa dalam format unix

Titik akhir

GET /api/clubs/is-eu/{club}

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar tingkat tinggi semua klub di database kami.

Titik akhir

GET /api/clubs/listclubs

Contoh Permintaan

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

Respons

{}

Mengembalikan apakah klub buka pada tanggal tertentu.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. date `string` (wajib) Tanggal yang akan diperiksa dalam format unix

Titik akhir

GET /api/clubs/{club}/open-on/{date}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/open-on/{date} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Dapatkan ulasan klub dari DynamoDB.

Parameter

club `string` (wajib) ID Klub

Titik akhir

GET /api/clubs/{club}/reviews

Contoh Permintaan

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

Respons

{}

Dapatkan pengaturan ulasan klub dari DynamoDB.

Parameter

facilityId `string` (wajib) ID fasilitas

Titik akhir

GET /api/clubs/{club}/reviews-settings

Contoh Permintaan

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

Respons

{}

Perbarui pengaturan ulasan klub di DynamoDB.

Parameter

club `string` (wajib) ID Klub

Titik akhir

PUT /api/clubs/{club}/reviews-settings

Contoh Permintaan

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

Respons

{}

Aktifkan kembali publikasi otomatis pengaturan ulasan.

Parameter

club `string` (wajib) ID Klub

Titik akhir

PUT /api/clubs/{club}/reviews/publish-recent-reviews

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/publish-recent-reviews \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memublikasikan ulasan

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. review `string` (wajib) ID internal ulasan yang ingin Anda publikasikan.

Titik akhir

PUT /api/clubs/{club}/reviews/{review}/publish

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{review}/publish \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Aktifkan kembali publikasi otomatis pengaturan ulasan.

Parameter

club `string` (wajib) ID Klub

Titik akhir

PUT /api/clubs/{club}/reviews-settings/re-enable-auto-publish

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings/re-enable-auto-publish \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Kirim tanggapan atas ulasan kembali melalui penerbit asalnya (Google, dll.).

Parameter

club `string` (wajib) ID Fasilitas reviewId `string` (wajib) ID ulasan PH (dicari di tabel club-social-reviews) body `string` (wajib)

Titik akhir

POST /api/clubs/{club}/reviews/{reviewId}/respond

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{reviewId}/respond \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membatalkan publikasi ulasan

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. review `string` (wajib) ID internal ulasan yang ingin Anda batalkan publikasinya.

Titik akhir

PUT /api/clubs/{club}/reviews/{review}/un-publish

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{review}/un-publish \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar pemilik yang tergabung dalam klub yang ditentukan dari DB PH

Parameter

clubID `string` (wajib) ID internal klub yang ingin Anda akses

Titik akhir

GET /api/clubs/{clubID}/owners

Contoh Permintaan

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

Respons

{}

Mengembalikan semua paket keanggotaan untuk fasilitas.

Parameter

facilityId `string` (wajib) ID internal fasilitas

Titik akhir

GET /api/facilities/membership-plans/:facilityId

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/facilities/membership-plans/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui catatan paket keanggotaan.

Parameter

facilityId `string` (wajib) ID internal fasilitas body `object` (wajib) Objek JSON data paket keanggotaan yang ingin Anda perbarui.

Titik akhir

PUT /api/facilities/membership-plans/:facilityId

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/facilities/membership-plans/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Aktifkan kembali publikasi otomatis pengaturan ulasan.

Parameter

club `string` (wajib) ID Klub

Titik akhir

PUT /api/clubs/{club}/reviews/publish-recent-reviews

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/publish-recent-reviews \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Aktifkan kembali publikasi otomatis pengaturan ulasan.

Parameter

club `string` (wajib) ID Klub

Titik akhir

PUT /api/clubs/{club}/reviews-settings/re-enable-auto-publish

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings/re-enable-auto-publish \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar semua mata uang yang tersedia

Titik akhir

GET /api/currencies

Contoh Permintaan

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

Respons

{}

Mengembalikan lokasi geografis berdasarkan alamat IP.

Parameter

ip `string` (wajib) Alamat IP yang akan dicari

Titik akhir

GET /api/geo/ip-location/:club

Contoh Permintaan

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

Respons

{}

Mengembalikan lokasi geografis pengguna saat ini berdasarkan IP mereka.

Titik akhir

GET /api/geo/ip-current

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/geo/ip-current \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Hanya mengembalikan alamat IP publik klien yang meminta (tanpa pencarian geolokasi, tanpa panggilan API pihak ketiga). Digunakan oleh applet Agen AI untuk membandingkan IP publik browser dengan IP WAN yang dikirim perangkat guna mendeteksi jaringan yang sama.

Titik akhir

GET /api/geo/client-ip

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/geo/client-ip \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Pengurai nomor telepon.

Parameter

body `string` (wajib) Objek JSON berisi nomor yang ingin Anda uraikan.

Titik akhir

POST /api/phone/parser

Contoh Permintaan

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

Respons

{}

Mengembalikan perangkat jam master

Parameter

club_id `string` (wajib) ID internal klub tempat Anda ingin menambahkan perangkat.

Titik akhir

GET /api/clubs/{club_id}/smart-club/health-check/master-clock

Contoh Permintaan

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"

Respons

{}

Mengembalikan perangkat Sonos master

Parameter

club_id `string` (wajib) ID internal klub tempat Anda ingin menambahkan perangkat.

Titik akhir

GET /api/clubs/{club_id}/smart-club/health-check/sonos-mqtt

Contoh Permintaan

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"

Respons

{}

dapatkan notifikasi baterai lemah duress untuk klub tertentu.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/clubs/{club}/smart-club/health-check/low-battery-duress

Contoh Permintaan

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"

Respons

{}

Mengembalikan data analisis jaringan

Parameter

club_id `string` (wajib) ID internal klub tempat Anda ingin menambahkan perangkat.

Titik akhir

GET /api/clubs/{club_id}/smart-club/health-check/network-analysis

Contoh Permintaan

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"

Respons

{}

kirim notifikasi baterai lemah duress untuk klub tertentu.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/clubs/{club}/smart-club/health-check/send-low-battery-duress-notifs

Contoh Permintaan

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"

Respons

{}

Mengembalikan data uji kecepatan perangkat untuk setiap jenis perangkat

Parameter

club_id `string` (wajib) ID internal klub tempat Anda ingin menambahkan perangkat.

Titik akhir

GET /api/clubs/{club_id}/smart-club/health-check/speed-test

Contoh Permintaan

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"

Respons

{}

Mendapatkan wawasan listing untuk fasilitas. Secara default mengembalikan total harian gabungan dari semua penerbit, atau satu penerbit saja jika `publisherId` diberikan.

Parameter

facilityId `string` (wajib) publisherId `string` (opsional) startDate `string` (wajib) endDate `string` (wajib)

Titik akhir

GET /api/facilities/{facilityId}/directory-insights

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/directory-insights \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mendapatkan wawasan listing gabungan untuk suatu merek di semua penerbit.

Parameter

brandId `string` (wajib) startDate `string` (wajib) endDate `string` (wajib)

Titik akhir

GET /api/brands/{brandId}/directory-insights

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/directory-insights \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Kata kunci pencarian teratas (dengan pembagian bermerek/tidak bermerek) untuk fasilitas, saat ini bersumber dari Google Business Profile.

Parameter

facilityId `string` (wajib) publisherId `string` (opsional) Default-nya "google"; saat ini hanya Google yang didukung. startDate `string` (wajib) endDate `string` (wajib) limit `string` (opsional)

Titik akhir

GET /api/facilities/{facilityId}/directory-search-keywords

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/directory-search-keywords \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Kata kunci pencarian teratas untuk suatu merek, digabungkan dari semua fasilitas.

Parameter

brandId `string` (wajib) startDate `string` (wajib) endDate `string` (wajib) limit `string` (opsional)

Titik akhir

GET /api/brands/{brandId}/directory-search-keywords

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/directory-search-keywords \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan tanya jawab untuk fasilitas.

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/facilities/{facilityId}/qna

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menjawab pertanyaan.

Titik akhir

POST /api/facilities/{facilityId}/qna/{questionId}/answer

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna/{questionId}/answer \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menghapus jawaban.

Titik akhir

DELETE /api/facilities/{facilityId}/qna/{questionId}/answer/{answerId}

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna/{questionId}/answer/{answerId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan penerbit yang diaktifkan untuk organisasi fasilitas, beserta status koneksinya.

Parameter

facilityId `string` (wajib) organisationId `string` (wajib)

Titik akhir

GET /api/facilities/{facilityId}/directory-publishers/resolved

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/directory-publishers/resolved \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mendapatkan pengaturan Door/Gate Access bersama untuk fasilitas

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/door-access/rules/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/rules/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui pengaturan Door/Gate Access bersama untuk fasilitas

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

PUT /api/door-access/rules/{facilityId}

Contoh Permintaan

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 '{}'

Respons

{}

Mendapatkan Access Policies untuk fasilitas

Konfigurasi akses yang ada otomatis dikonversi menjadi kebijakan yang diterapkan dan setara saat pertama kali dibaca.

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/door-access/policies/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengganti Access Policies dengan pemeriksaan revisi optimistis

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

PUT /api/door-access/policies/{facilityId}

Contoh Permintaan

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 '{}'

Respons

{}

Membuat Access Policy

Parameter

facilityId `string` (wajib)

Titik akhir

POST /api/door-access/policies/{facilityId}

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui satu Access Policy

Parameter

facilityId `string` (wajib) policyId `string` (wajib)

Titik akhir

PATCH /api/door-access/policies/{facilityId}/{policyId}

Contoh Permintaan

curl -X PATCH https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menghapus satu Access Policy

Parameter

facilityId `string` (wajib) policyId `string` (wajib) revision `integer` (wajib)

Titik akhir

DELETE /api/door-access/policies/{facilityId}/{policyId}

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menduplikasi Access Policy dengan ID stabil baru

Parameter

facilityId `string` (wajib) policyId `string` (wajib)

Titik akhir

POST /api/door-access/policies/{facilityId}/{policyId}/duplicate

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId}/duplicate \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menghitung pengguna dan pintu yang terdampak oleh semua Access Policies

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/door-access/policies/{facilityId}/impacts

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/impacts \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menghitung pengguna dan pintu yang terdampak oleh suatu Access Policy

Parameter

facilityId `string` (wajib) policyId `string` (wajib)

Titik akhir

GET /api/door-access/policies/{facilityId}/{policyId}/impact

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId}/impact \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan jenis orang, status, dan tag untuk fasilitas

Mengembalikan nilai jenis orang, status keanggotaan, dan tag yang berbeda yang ada pada baris User Access fasilitas (ph-door-access-users), yang berasal dari sinkronisasi mitra + entri manual. Applet door-gate-access menggunakannya untuk mengisi dropdown aturan akses. Tag adalah gabungan `tags` yang disinkronkan dan `customTags` admin, sesuai dengan evaluator aturan.

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/door-access/people-config/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/people-config/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan pengontrol pintu di fasilitas beserta aturan Door/Gate Access yang berlaku

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/door-access/doors/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menyimpan pengaturan khusus per pintu, ikon, dan konfigurasi sisi perangkat

Satu titik penulisan untuk semua yang diedit applet admin DGA pada pintu: - `accessRulesOverride` / `geofenceOverride`: kirim `null` untuk menghapus dan kembali ke default fasilitas. - `icon`: kunci wire yang stabil (lihat services/door-access/door-icons.js); nilai yang tidak dikenal menghasilkan 400. - `holdTimeSeconds` (1–30), `maintenanceMode` (`off` / `force-open` / `force-closed`), `doorLocation` (teks bebas, ≤64 karakter), `playNotificationSoundOnRelayToggle` (boolean), `autoUnlockSchedule` (kisi jendela mingguan). Dulu ini adalah bidang khusus Manajemen Perangkat, tetapi applet kini menulisnya langsung sehingga admin tidak perlu meninggalkan panel pintu untuk perubahan konfigurasi sehari-hari. Jika salah satu bidang sisi perangkat diubah, rute ini juga mengirim variabel lingkungan Balena yang sesuai (`RELAY_NOTIFICATION_SOUND`, `DOOR_MAINTENANCE_MODE`, `DOOR_AUTO_UNLOCK_SCHEDULE`) dan mengirim perintah MQTT `unlockUpdates` sehingga perangkat menerima konfigurasi baru tanpa menunggu penyegaran variabel lingkungan Balena berikutnya. Upaya terbaik: respons tetap 200 meskipun Balena untuk sementara tidak dapat dijangkau.

Parameter

facilityId `string` (wajib) doorId `string` (wajib)

Isi Permintaan

Titik akhir

PUT /api/door-access/doors/{facilityId}/{doorId}/override

Contoh Permintaan

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 '{}'

Respons

{}

Pemeriksaan ringan status Balena untuk pemberitahuan muat ulang di panel pintu

Panel samping applet DGA mengambil ini secara lazy saat admin membuka pintu agar dapat menampilkan teks "menyimpan akan memuat ulang pengontrol" yang tepat: varian default "beberapa detik", atau varian yang lebih tegas "beberapa menit" jika pembaruan rilis juga tertunda. Mengembalikan snapshot datar yang berasal dari `balena.models.device.get()`. Gagal secara lunak menjadi `data: null` (alih-alih 5xx) sehingga gangguan Balena hanya menurunkan teks pemberitahuan alih-alih mencegah panel terbuka.

Parameter

facilityId `string` (wajib) doorId `string` (wajib)

Titik akhir

GET /api/door-access/doors/{facilityId}/{doorId}/device-status

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/device-status \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Override admin: membuka kunci pintu dari applet

Mengaktifkan relay sesaat menggunakan `holdTimeSeconds` pintu saat ini, menulis baris audit `admin-override` ke ph-door-app-access-events sehingga tindakan tersebut dapat ditelusuri pelakunya di Access Logs. Selalu berhasil terlepas dari `maintenanceMode === 'force-closed'`; ini adalah jalan keluar darurat bagi admin. Mengembalikan 200 segera setelah publish MQTT dikirim; status confirmed / failed / timed_out tidak ditunggu di sini (alur lama /api/devices/door-controllers + /api/ics/devices/command juga fire-and-forget).

Parameter

facilityId `string` (wajib) doorId `string` (wajib)

Titik akhir

POST /api/door-access/doors/{facilityId}/{doorId}/unlock

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/unlock \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memutar pola bunyi bip penanda lokasi pada pengontrol pintu

Mengirim perintah MQTT `beep` sehingga pengontrol mengeluarkan tiga bunyi bip berdurasi sedang (masing-masing ~500 ms, jeda ~350 ms, total ~2 s). Digunakan admin untuk menemukan lokasi fisik pengontrol pintu di lokasi. Tombol Manajemen Perangkat versi lama menggunakan rentetan bip pendek ~30 s, tetapi driver buzzer firmware hanya andal mengeluarkan bunyi pertama, sehingga applet mengirim pola yang lebih pendek dan lebih andal sebagai gantinya. Tanpa baris audit, karena ini tindakan diagnostik tanpa efek samping pada kontrol akses.

Parameter

facilityId `string` (wajib) doorId `string` (wajib)

Titik akhir

POST /api/door-access/doors/{facilityId}/{doorId}/identify

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/identify \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Me-reboot pengontrol pintu dari jarak jauh

Mengirim perintah MQTT `rebootDevice` fire-and-forget yang sama dengan yang dikirim tombol "Remotely Reboot Device" di Manajemen Perangkat versi lama, tetapi dibatasi oleh modul `door-gate-access` sehingga admin DGA dapat me-reboot pengontrol dari bagian Advanced di panel pintu tanpa pemberian `device-management` terpisah. Mengembalikan 200 segera setelah publish dikirim; perangkat akan offline selama proses reboot.

Parameter

facilityId `string` (wajib) doorId `string` (wajib)

Titik akhir

POST /api/door-access/doors/{facilityId}/{doorId}/reboot

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/reboot \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan baris User Access di fasilitas

Mengembalikan setiap baris user-access yang tidak dihapus di fasilitas. Mendukung filter sisi klien (source, search, accessEnabled, hasGrants). Komputasi sisi server `hideExcluded` Fase 4 akan ditambahkan setelah evaluator pemberian hybrid tersedia; untuk saat ini parameter diterima tetapi mengembalikan seluruh data.

Parameter

facilityId `string` (wajib) search `string` (opsional) source `string` (opsional) accessEnabled `string` (opsional) hasGrants `string` (opsional) hideExcluded `boolean` (opsional) Jika true, pengguna tersinkron (source != manual) yang tidak dapat melewati pintu mana pun kapan pun di fasilitas ini akan disembunyikan. Respons menyertakan envelope `hidden: { count, sample }`.

Titik akhir

GET /api/door-access/users/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/users/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat baris User Access secara manual di fasilitas

Membuat baris baru dengan `source: 'manual'`. Mengembalikan 409 dengan `existingUserId` jika nomor telepon atau email yang diberikan sudah terkait dengan baris di fasilitas ini.

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/door-access/users/{facilityId}

Contoh Permintaan

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 '{}'

Mendapatkan satu baris User Access

Parameter

facilityId `string` (wajib) userId `string` (wajib)

Titik akhir

GET /api/door-access/users/{facilityId}/{userId}

Contoh Permintaan

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

Respons

{}

Pembaruan sebagian baris User Access

Mengedit subset mana pun dari bidang identitas / otorisasi. Kirim `null` untuk mengosongkan bidang opsional. Mengembalikan 409 jika nomor telepon atau email baru bentrok dengan baris lain di fasilitas yang sama. `appMessage` menerima bentuk yang sama dengan pesan seluruh fasilitas pada PUT /api/door-access/rules/{facilityId}: teks isi, tingkat keparahan, tautan opsional, jadwal mulai/selesai opsional. Aplikasi seluler menampilkan pesan ini di dasbor hanya untuk pengguna yang dituju.

Parameter

facilityId `string` (wajib) userId `string` (wajib)

Isi Permintaan

Titik akhir

PATCH /api/door-access/users/{facilityId}/{userId}

Contoh Permintaan

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 '{}'

Respons

{}

Menghapus secara lunak baris User Access

Menandai baris dengan `deleted: true` dan menonaktifkan akses. Keterkaitan catatan audit dengan userId tetap dipertahankan; admin dapat mengaktifkannya kembali secara manual.

Parameter

facilityId `string` (wajib) userId `string` (wajib)

Titik akhir

DELETE /api/door-access/users/{facilityId}/{userId}

Contoh Permintaan

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

Respons

{}

Atribusi akses per pintu untuk pengguna

Untuk setiap pintu, mengembalikan otorisasi deterministik saat ini (`allowedNow`, `allowedVia`, `deniedReason`) dan jalur yang dikonfigurasi untuk Access Policies, pemberian permanen, jadwal kebijakan, pemberian jendela waktu admin, dan jendela sumber mitra terpetakan yang terbaru. Juga mengembalikan ketersediaan aktif/berikutnya dan kebaruan sumber. blockAllAccess pintu dan pemeliharaan dievaluasi sebelum semua jalur izin.

Parameter

facilityId `string` (wajib) userId `string` (wajib)

Titik akhir

GET /api/door-access/users/{facilityId}/{userId}/effective-access

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/effective-access \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat baris User Access secara massal dari impor CSV

Membuat beberapa baris `source: 'manual'` dalam satu permintaan, menggunakan kembali validasi, normalisasi telepon/email, pemeriksaan bentrok per fasilitas, pesan otomatis, dan logika undangan (opsional) yang sama dengan pembuatan tunggal. Baris diproses berurutan, sehingga baris berikutnya yang bentrok dengan baris yang dibuat sebelumnya dilaporkan sebagai duplikat. Pemberian diberikan sebagai ID pintu/grup yang sudah ditentukan (klien menerjemahkan nama menjadi ID). Pemberian jendela waktu sengaja ditolak dalam proses massal dan harus ditambahkan melalui endpoint penggantian per pengguna setelah impor. Tidak pernah melempar error per baris; hasil setiap baris dilaporkan satu per satu.

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/door-access/users/{facilityId}/bulk

Contoh Permintaan

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 '{}'

Respons

{}

Mengganti pemberian otorisasi hybrid pada baris User Access

Penghubung evaluator hybrid Fase 3. Pemberian berlaku berdampingan dengan aturan tag fasilitas: pengguna diizinkan jika salah satunya cocok saat membuka kunci.

Parameter

facilityId `string` (wajib) userId `string` (wajib)

Isi Permintaan

Titik akhir

PUT /api/door-access/users/{facilityId}/{userId}/grants

Contoh Permintaan

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 '{}'

Respons

{}

Mengganti pemberian Access Time Window tambahan pada baris User Access

Hanya mengganti `timeWindowGrants`; `grants` permanen dan `sourceTimeWindows` integrasi tidak diubah. Setiap item memerlukan cakupan (`facilityWide`, `doors`, atau `groups`) dan `window` absolut atau mingguan. Mengirim array kosong secara eksplisit menghapus semua jendela admin.

Parameter

facilityId `string` (wajib) userId `string` (wajib)

Isi Permintaan

Titik akhir

PUT /api/door-access/users/{facilityId}/{userId}/time-window-grants

Contoh Permintaan

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 '{}'

Respons

{}

Membekukan baris User Access dari pembaruan sinkronisasi berbasis sumber

Menetapkan `decoupledFromSource: true`, menghapus semua `sourceTimeWindows` milik integrasi, dan membuat sinkronisasi (cron + stream) mencatat + melewati baris ini hingga admin menghapus flag tersebut melalui /recouple.

Parameter

facilityId `string` (wajib) userId `string` (wajib)

Titik akhir

POST /api/door-access/users/{facilityId}/{userId}/decouple

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/decouple \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menghubungkan kembali baris User Access ke pembaruan sinkronisasi berbasis sumber

Parameter

facilityId `string` (wajib) userId `string` (wajib)

Titik akhir

POST /api/door-access/users/{facilityId}/{userId}/recouple

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/recouple \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencabut semua refresh token aplikasi Door/Gate Access untuk pengguna

Mencabut berdasarkan telepon/email pengguna yang tersimpan (tabel refresh token menggunakan kunci `sha256(plaintext)`; GSI byMobilePhone / byEmail memungkinkan penghapusan fan-out dari satu pengguna). Pengguna lain yang memakai telepon/email yang sama di fasilitas lain juga akan dikeluarkan.

Parameter

facilityId `string` (wajib) userId `string` (wajib)

Titik akhir

POST /api/door-access/users/{facilityId}/{userId}/logout

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/logout \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengirim (ulang) email undangan aplikasi Door/Gate Access kepada pengguna

Memaksa pengiriman email undangan unduhan aplikasi ke alamat email pengguna yang tersimpan (hanya email; tanpa SMS). Mengabaikan pemeriksaan kelayakan dan status sudah terkirim yang digunakan jalur sinkronisasi otomatis, karena ini adalah tindakan admin yang eksplisit. Mengembalikan 400 jika pengguna tidak memiliki email yang tercatat.

Parameter

facilityId `string` (wajib) userId `string` (wajib)

Titik akhir

POST /api/door-access/users/{facilityId}/{userId}/resend-invite

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/resend-invite \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Melihat pratinjau penerima pengiriman undangan aplikasi massal

Menghitung kumpulan pengguna yang akan menerima email undangan aplikasi. Kumpulan dasarnya adalah setiap pengguna yang tidak dihapus, memiliki email, dan belum pernah menggunakan aplikasi (`appLastSeenAt` kosong). Secara default kumpulan ini dipersempit ke pengguna yang saat ini memiliki akses (aturan cocok atau pemberian) dan belum pernah diundang; `includeAlreadyInvited` dan `includeNoAccess` memperluasnya. Tidak ada email yang dikirim; mengembalikan jumlah, sampel kecil, dan userId kandidat untuk endpoint eksekusi.

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/door-access/users/{facilityId}/bulk-invite/preview

Contoh Permintaan

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 '{}'

Respons

{}

Mengirim email undangan aplikasi ke sekelompok pengguna

Mengirim email undangan unduhan aplikasi ke setiap userId yang diberikan (maks. 50 per permintaan; klien membagi seluruh daftar kandidat dari pratinjau menjadi beberapa batch). Setiap pengguna divalidasi ulang saat pengiriman: baris yang sudah tidak ada, tidak memiliki email, atau telah menggunakan aplikasi sejak pratinjau akan dilewati, bukan digagalkan. Hasil per pengguna dilaporkan satu per satu sehingga klien dapat merangkum yang terkirim / gagal / dilewati.

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/door-access/users/{facilityId}/bulk-invite

Contoh Permintaan

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 '{}'

Respons

{}

Mencantumkan Door Groups di fasilitas

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/door-access/door-groups/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat Door Group

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/door-access/door-groups/{facilityId}

Contoh Permintaan

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 '{}'

Mendapatkan satu Door Group

Parameter

facilityId `string` (wajib) groupId `string` (wajib)

Titik akhir

GET /api/door-access/door-groups/{facilityId}/{groupId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui Door Group

Parameter

facilityId `string` (wajib) groupId `string` (wajib)

Isi Permintaan

Titik akhir

PATCH /api/door-access/door-groups/{facilityId}/{groupId}

Contoh Permintaan

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 '{}'

Respons

{}

Menghapus secara lunak Door Group

Parameter

facilityId `string` (wajib) groupId `string` (wajib)

Titik akhir

DELETE /api/door-access/door-groups/{facilityId}/{groupId}

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan integrasi mitra yang dikonfigurasi di fasilitas

Mengembalikan integrasi mitra fasilitas (id, nama, logo, enabled) dengan menggabungkan ph-facility-partner-config dengan katalog ph-partners. Dibatasi untuk door-gate-access (sehingga admin tanpa akses external-integrations tetap dapat menampilkan lencana mitra dan daftar sinkronisasi per mitra).

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/door-access/partners/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/partners/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membaca konfigurasi sinkronisasi User Access untuk fasilitas

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/door-access/sync-config/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/sync-config/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui konfigurasi sinkronisasi User Access untuk fasilitas

Hanya bidang yang dikendalikan admin (`enabled`, `requireIdentifier`, dan map `partners` mitra) yang diterima; `lastRunAt` dan `lastRunCounts` ditulis oleh mesin sinkronisasi itu sendiri. `partner.partners` adalah map pengaktifan per mitra dengan kunci partnerId (opt-out): saat `partner.enabled` utama aktif, mitra akan tersinkron kecuali memiliki entri `{ enabled: false }` yang eksplisit di sini.

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

PUT /api/door-access/sync-config/{facilityId}

Contoh Permintaan

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 '{}'

Respons

{}

Membaca konfigurasi pesan otomatis per pengguna untuk fasilitas

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/door-access/auto-messages/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui konfigurasi pesan otomatis per pengguna untuk fasilitas

Menyimpan aturan, lalu segera mengevaluasi ulang setiap baris User Access di fasilitas sehingga pengguna yang ada langsung mendapatkan/kehilangan pesan otomatisnya. Pesan manual dan baris yang dilepaskan dari sumber tidak diubah.

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

PUT /api/door-access/auto-messages/{facilityId}

Contoh Permintaan

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 '{}'

Respons

{}

Status proses evaluasi ulang pesan otomatis di latar belakang

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/door-access/auto-messages/{facilityId}/sweep-status

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId}/sweep-status \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menjalankan sinkronisasi User Access sesuai permintaan untuk fasilitas

Secara sinkron memproses setiap sumber yang diaktifkan (partner / cctv) di fasilitas dan menyatukan baris ph-door-access-users melalui alur de-duplikasi bertingkat. Mengembalikan jumlah per sumber. Sumber yang dinonaktifkan muncul sebagai `skippedSyncDisabled: 1`, bukan tidak ada, sehingga UI dapat menampilkan kedua baris secara konsisten.

Parameter

facilityId `string` (wajib)

Titik akhir

POST /api/door-access/sync/{facilityId}/run

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/run \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Pratinjau uji coba penghapusan massal data tersinkron mitra

Mengembalikan jumlah + sampel baris user-access yang akan dihapus secara lunak, serta confirmToken yang harus dikirim kembali ke endpoint eksekusi. Tidak ada data yang diubah. Access logs tidak pernah terpengaruh.

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/door-access/sync/{facilityId}/bulk-delete/preview

Contoh Permintaan

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 '{}'

Respons

{}

Menjalankan penghapusan massal data tersinkron mitra (penghapusan lunak)

Menghapus secara lunak setiap baris user-access tersinkron mitra dalam cakupan. Memerlukan confirmToken yang dikembalikan oleh pratinjau; jika kumpulan data aktual telah berubah sejak pratinjau, token tidak akan cocok dan permintaan ditolak (409) sehingga admin meninjau ulang. Access logs tetap dipertahankan.

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/door-access/sync/{facilityId}/bulk-delete

Contoh Permintaan

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 '{}'

Respons

{}

Aktivitas sinkronisasi User Access terbaru (log pemecahan masalah)

Mengembalikan hasil sinkronisasi terbaru untuk fasilitas (dibuat / dilewati / dinonaktifkan) beserta alasannya, sehingga admin dapat melihat mengapa anggota tersinkron atau tidak. Terbaru lebih dulu.

Parameter

facilityId `string` (wajib) limit `integer` (opsional)

Titik akhir

GET /api/door-access/sync/{facilityId}/log

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/log \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan peristiwa Door/Gate Access untuk fasilitas

Mengembalikan peristiwa buka kunci dari seluler, override admin, dan Partner API eksternal dalam satu feed berurutan dari yang terbaru.

Parameter

facilityId `string` (wajib) from `integer` (opsional) to `integer` (opsional) limit `integer` (opsional)

Titik akhir

GET /api/door-access/events/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/events/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Uji coba evaluasi geofence untuk pin mode pengujian admin

Isi Permintaan

Titik akhir

POST /api/door-access/geofence/test

Contoh Permintaan

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 '{}'

Respons

{}

Mendapatkan status orientasi / aktivasi untuk fasilitas

Menjadi dasar halaman awal "Get Started" dan banner progres penyiapan applet. Mengembalikan jumlah pintu + pengguna saat ini, dua langkah inti yang diturunkan (ada pengguna, ada pintu), flag "reviewed" opsional yang tersimpan, dan apakah fasilitas sudah diaktifkan (kedua langkah inti selesai). Saat pertama kali fasilitas diaktifkan, stempel waktu activatedAt dicatat.

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/door-access/onboarding/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/door-access/onboarding/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui flag orientasi "reviewed" opsional untuk fasilitas

Menyimpan flag daftar periksa penyiapan opsional yang dicentang admin (aturan akses, pengaturan sinkronisasi, geofencing). Langkah inti dan aktivasi diturunkan langsung dari jumlah data dan tidak dapat diatur di sini. Mengembalikan seluruh status orientasi yang telah diperbarui.

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

PUT /api/door-access/onboarding/{facilityId}

Contoh Permintaan

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 '{}'

Respons

{}

Mengembalikan respons JSON berisi data analitik fasilitas.

Parameter

clubId `string` (opsional) ID fasilitas yang data analitiknya akan diambil. fromDate `string` (opsional) Tanggal mulai data analitik yang akan diambil. toDate `string` (opsional) Tanggal akhir data analitik yang akan diambil.

Titik akhir

GET /clubs/{clubId}/lead-events

Contoh Permintaan

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

Respons

{}

Mengembalikan respons JSON berisi data analitik fasilitas.

Parameter

clubId `string` (opsional) ID fasilitas yang data analitiknya akan diambil. fromDate `string` (opsional) Tanggal mulai data analitik yang akan diambil. toDate `string` (opsional) Tanggal akhir data analitik yang akan diambil.

Titik akhir

GET /clubs/{clubId}/analytics/page-views

Contoh Permintaan

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

Respons

{}

Mengembalikan respons JSON berisi data analitik fasilitas.

Parameter

clubId `string` (opsional) ID fasilitas yang data analitiknya akan diambil. fromDate `string` (opsional) Tanggal mulai data analitik yang akan diambil. toDate `string` (opsional) Tanggal akhir data analitik yang akan diambil.

Titik akhir

GET /clubs/{clubId}/analytics/referrers

Contoh Permintaan

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

Respons

{}

Mengembalikan respons JSON berisi data analitik fasilitas.

Parameter

clubId `string` (opsional) ID fasilitas yang data analitiknya akan diambil. fromDate `string` (opsional) Tanggal mulai data analitik yang akan diambil. toDate `string` (opsional) Tanggal akhir data analitik yang akan diambil.

Titik akhir

GET /clubs/{clubId}/analytics/socials

Contoh Permintaan

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

Respons

{}

Mengembalikan respons JSON berisi data analitik fasilitas.

Parameter

clubId `string` (opsional) ID fasilitas yang data analitiknya akan diambil. fromDate `string` (opsional) Tanggal mulai data analitik yang akan diambil. toDate `string` (opsional) Tanggal akhir data analitik yang akan diambil.

Titik akhir

GET /clubs/{clubId}/analytics/top-cities

Contoh Permintaan

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

Respons

{}

Mengembalikan respons JSON berisi data analitik fasilitas.

Parameter

clubId `string` (opsional) ID fasilitas yang data analitiknya akan diambil. fromDate `string` (opsional) Tanggal mulai data analitik yang akan diambil. toDate `string` (opsional) Tanggal akhir data analitik yang akan diambil.

Titik akhir

GET /clubs/{clubId}/analytics/total-page-views

Contoh Permintaan

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

Respons

{}

Mengembalikan respons JSON berisi data analitik fasilitas.

Parameter

clubId `string` (opsional) ID fasilitas yang data analitiknya akan diambil. fromDate `string` (opsional) Tanggal mulai data analitik yang akan diambil. toDate `string` (opsional) Tanggal akhir data analitik yang akan diambil.

Titik akhir

GET /clubs/{clubId}/analytics/traffic

Contoh Permintaan

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

Respons

{}

Membuat JWT (JSON Web Token) front-end sementara untuk diagram Google Analytics yang dapat disematkan di halaman 'analytics' front-end.

Titik akhir

GET /api/ga/onetimetoken

Contoh Permintaan

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

Respons

{}

Mengembalikan widget dasbor dari 'The Training Camp' jika fasilitas memiliki anggota aktif.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/reporting/apps/widgets/{club}

Contoh Permintaan

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

Respons

{}

Mengembalikan semua hari libur fasilitas yang belum ditinjau.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/reporting/club/{club}/unreviewed-holidays

Contoh Permintaan

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

Respons

{}

Menandai semua hari libur fasilitas yang belum ditinjau sebagai sudah ditinjau.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

PUT /api/reporting/club/{club}/review-holidays

Contoh Permintaan

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

Respons

{}

Mengembalikan Laporan KPI dalam format CSV, dirinci per bulan selama 12 bulan terakhir. *CATATAN* Ini membuat satu laporan untuk SEMUA fasilitas dalam sistem. Jangan menjalankannya beberapa kali secara paralel karena akan membebani GymMaster secara berlebihan!

Parameter

months `string` (opsional) Jumlah bulan (dari tanggal saat ini) yang akan diambil (default 12)

Titik akhir

GET /api/reporting/gymmaster/all-clubs-kpi-report

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/reporting/gymmaster/all-clubs-kpi-report \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan grafik pendapatan MMS untuk fasilitas tertentu.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. range `string` (opsional) Rentang hari (dihitung mundur dari tanggal saat ini) yang ingin diambil

Titik akhir

GET /api/reporting/gymmaster/revenuegraph/{club}

Contoh Permintaan

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

Respons

{}

Mengembalikan data/analitik MMS (Member Management System) dasbor untuk fasilitas tertentu. Data mencakup statistik GymMaster/Perfect Gym serta metrik internal lain yang dikumpulkan oleh sistem kami.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. range `string` (opsional) Rentang hari (dihitung mundur dari tanggal saat ini) yang ingin diambil

Titik akhir

GET /api/reporting/gymmaster/widgets/{club}

Contoh Permintaan

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

Respons

{}

Mengembalikan data widget Myzone dasbor untuk fasilitas tertentu.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/reporting/myzone/widgets/{club}

Contoh Permintaan

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

Respons

{}

Mengembalikan objek layanan yang dianggap offline oleh satu atau beberapa endpoint halaman status/pemantauan kami, yang dikonfigurasi melalui alat internal 'Uptime Kuma'.

Titik akhir

GET /api/reporting/statuspage/events

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/reporting/statuspage/events \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan pemesanan latihan yang akan datang untuk 7 hari ke depan.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/reporting/clubs/{club}/workout-bookings

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/reporting/clubs/{club}/workout-bookings \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar riwayat hari libur untuk fasilitas.

Parameter

clubId `string` (opsional) ID Klub fromDate `string` (opsional) Stempel waktu Unix untuk tanggal mulai rentang hari libur yang akan dikembalikan. toDate `string` (opsional) Stempel waktu Unix untuk tanggal akhir rentang hari libur yang akan dikembalikan.

Titik akhir

GET /api/clubs/{clubId}/historical-holidays

Contoh Permintaan

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

Respons

{}

Mengembalikan otomatisasi perangkat yang terkait dengan fasilitas.

Parameter

club `string` (wajib) ID internal klub yang perangkatnya ingin Anda cantumkan.

Titik akhir

GET /api/ics/automations/list/{club}

Contoh Permintaan

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

Respons

{}

Memperbarui konfigurasi perangkat untuk layar/perangkat yang ada.

Parameter

club `string` (wajib) ID internal fasilitas yang perangkatnya ingin Anda perbarui. body `string` (wajib) Objek JSON parameter pembaruan.

Titik akhir

POST /api/ics/automations/update/{club}

Contoh Permintaan

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

Respons

{}

Menambahkan/mengaitkan perangkat layar fisik/komputer dengan fasilitas Anda.

Parameter

club `string` (wajib) ID internal klub tempat Anda ingin menambahkan perangkat. body `string` (wajib) Objek JSON layar baru yang akan dikaitkan.

Titik akhir

POST /api/ics/devices/add/{club}

Contoh Permintaan

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

Respons

{}

Menginstruksikan perangkat untuk terhubung ke SSID baru berdasarkan parameter.

Parameter

club `string` (wajib) ID internal fasilitas yang perangkatnya ingin Anda perbarui. body `string` (wajib) Objek JSON parameter pembaruan.

Titik akhir

POST /api/ics/devices/changewifi/{club}

Contoh Permintaan

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

Respons

{}

Memperbarui konfigurasi perangkat untuk layar/perangkat yang ada.

Parameter

club `string` (wajib) ID internal fasilitas yang perangkatnya ingin Anda perbarui. body `string` (wajib) Objek JSON parameter pembaruan.

Titik akhir

POST /api/ics/devices/command/{club}

Contoh Permintaan

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

Respons

{}

Memuat URL/halaman web pada layar perangkat tertentu.

Parameter

club `string` (wajib) ID internal fasilitas yang perangkatnya ingin Anda perbarui. body `string` (wajib) Objek JSON parameter pembaruan.

Titik akhir

POST /api/ics/devices/loadurl/{club}

Contoh Permintaan

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

Respons

{}

Memperbarui konfigurasi perangkat untuk layar/perangkat yang ada.

Parameter

club `string` (wajib) ID internal fasilitas yang perangkatnya ingin Anda perbarui. body `string` (wajib) Objek JSON parameter pembaruan.

Titik akhir

PUT /api/ics/devices/update/{club}

Contoh Permintaan

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

Respons

{}

Mengganti nama layar/perangkat. Hanya registrasi: tidak seperti endpoint pembaruan, endpoint ini tidak mengirim apa pun ke perangkat, sehingga juga tersedia untuk layar yang menjalankan build perangkat lunak yang sudah tidak didukung.

Parameter

club `string` (wajib) ID internal fasilitas pemilik perangkat. body `string` (wajib) Objek JSON berisi parameter penggantian nama.

Titik akhir

PUT /api/ics/devices/rename/{club}

Contoh Permintaan

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

Respons

{}

Mendapatkan widget dan tautan ke media offline untuk fasilitas, berdasarkan tanggal yang diberikan.

Parameter

club `string` (wajib) ID internal fasilitas yang templated content-nya ingin Anda ubah. date `string` (wajib) Tanggal untuk URL widget yang dikembalikan; gunakan format `YYYY-MM-DD`.

Titik akhir

GET /api/ics/external-resources/{club}

Contoh Permintaan

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

Respons

{}

Mendapatkan widget dan tautan ke media offline untuk fasilitas, berdasarkan tanggal yang diberikan.

Parameter

club `string` (wajib) ID internal fasilitas yang templated content-nya ingin Anda ubah.

Titik akhir

GET /api/ics/list-scheduled-workouts/{club}

Contoh Permintaan

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

Respons

{}

Mengubah templated content untuk fasilitas tertentu.

Parameter

club `string` (wajib) ID internal fasilitas yang templated content-nya ingin Anda ubah. body `string` (wajib) Objek JSON berisi templated content baru yang akan diterapkan.

Titik akhir

POST /api/ics/loadprogram/{club}

Contoh Permintaan

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

Respons

{}

Mengambil konfigurasi program untuk layar/perangkat yang ada.

Parameter

club `string` (wajib) ID internal fasilitas yang data programnya ingin Anda ambil.

Titik akhir

GET /api/ics/programs/{club}

Contoh Permintaan

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

Respons

{}

Memperbarui konfigurasi program untuk layar/perangkat yang ada.

Parameter

club `string` (wajib) ID internal fasilitas yang perangkatnya ingin Anda perbarui. body `string` (wajib) Objek JSON berisi parameter pembaruan.

Titik akhir

PUT /api/ics/programs/{club}

Contoh Permintaan

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

Respons

{}

Mengambil opsi konfigurasi program.

Titik akhir

GET /api/ics/programs/options/{facilityID}

Contoh Permintaan

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

Respons

{}

Chat dengan konteks RAG. Fitur ini tidak memiliki akses ke alat, hanya alat permintaan|respons API sederhana yang memungkinkan Anda mengambil pengetahuan langsung dari basis pengetahuan.

Parameter

organisationId `string` (opsional) ID organisasi (akan terdeteksi otomatis jika tidak diberikan)

Isi Permintaan

Titik akhir

POST /api/llm/chat

Contoh Permintaan

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

Respons

{}

Menghapus embedding artikel dari vector store dan memperbarui status pelacakan embedding

Isi Permintaan

Titik akhir

DELETE /api/llm/delete-article

Contoh Permintaan

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 '{}'

Respons

{}

Mencantumkan catatan pelacak embedding berdasarkan organisasi dan status

Parameter

organisationId `string` (opsional) ID organisasi (ditentukan otomatis jika dihilangkan) status `string` (wajib) Status untuk memfilter (harus salah satu dari in_queue, done, anomaly, fail, deleted) Limit `string` (opsional) Jumlah maksimum item per halaman LastEvaluatedKey `string` (opsional) JSON LastEvaluatedKey DynamoDB untuk paginasi

Titik akhir

GET /api/llm/embedding-track/by-org-and-status

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/llm/embedding-track/by-org-and-status \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan catatan pelacak embedding berdasarkan organisasi (opsional memfilter berdasarkan jenis sumber daya)

Parameter

organisationId `string` (opsional) ID organisasi (ditentukan otomatis jika dihilangkan) resourceType `string` (opsional) Jenis sumber daya opsional (misalnya, "article"). Jika diberikan, memfilter data dengan resourceTypeId yang diawali "{type}#". Limit `string` (opsional) Jumlah maksimum item per halaman LastEvaluatedKey `string` (opsional) JSON LastEvaluatedKey DynamoDB untuk paginasi

Titik akhir

GET /api/llm/embedding-track/by-org

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/llm/embedding-track/by-org \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menginisialisasi koleksi basis data vektor organisasi

Parameter

organisationId `string` (opsional) ID organisasi (akan terdeteksi otomatis jika tidak diberikan)

Titik akhir

POST /api/llm/init-org

Contoh Permintaan

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

Respons

{}

Pencarian semantik di basis pengetahuan

Parameter

organisationId `string` (opsional) ID organisasi (akan terdeteksi otomatis jika tidak diberikan)

Isi Permintaan

Titik akhir

POST /api/llm/semantic-search

Contoh Permintaan

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 '{}'

Respons

{}

Memulai pemrosesan streaming artikel dalam antrean untuk embedding dengan pembaruan progres secara real-time

Parameter

organisationId `string` (opsional) ID organisasi (akan terdeteksi otomatis jika tidak diberikan)

Titik akhir

POST /api/llm/start-embedding-stream

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/llm/start-embedding-stream \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menyisipkan atau memperbarui embedding artikel di basis data vektor

Menangani embedding artikel berdasarkan status saat ini: - Jika artikel tidak diterbitkan ATAU privat: menghapus embedding - Jika artikel diterbitkan DAN publik: membuat ulang embedding dengan konten lengkap Selalu memerlukan isi artikel lengkap.

Parameter

organisationId `string` (opsional) ID organisasi (akan terdeteksi otomatis jika tidak diberikan)

Isi Permintaan

Titik akhir

POST /api/llm/upsert-embeddings

Contoh Permintaan

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 '{}'

Respons

{}

Endpoint pengujian untuk menghapus embedding artikel secara massal berdasarkan organisasi dan status opsional

Parameter

organisationId `string` (opsional) ID organisasi (ditentukan otomatis dari konteks pengguna jika dihilangkan) status `string` (opsional) Status untuk memfilter (opsional; jika dihilangkan, menghapus SEMUA artikel organisasi apa pun statusnya) hardDelete `string` (opsional) Apakah akan menghapus permanen catatan pelacakan embedding (true) atau menghapus secara lunak dengan memperbarui status (false)

Titik akhir

DELETE /api/llm/test/batch-delete-by-status

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/llm/test/batch-delete-by-status \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mentransformasi dan memotong teks menjadi chunk dengan statistik terperinci

Endpoint pengujian yang mentransformasi teks dan memotongnya menjadi chunk, lalu memberikan statistik terperinci tentang distribusi chunk, termasuk jumlah karakter, persentase, dan metrik kualitas untuk membantu mengevaluasi efektivitas pemotongan.

Isi Permintaan

Titik akhir

POST /api/llm/test/transform-chunk

Contoh Permintaan

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 '{}'

Respons

{}

Mendapatkan jumlah total vektor dalam indeks vektor organisasi

Endpoint pengujian untuk menghitung semua vektor dalam indeks vektor organisasi pengguna saat ini

Parameter

organisationId `string` (opsional) ID organisasi (akan terdeteksi otomatis jika tidak diberikan)

Titik akhir

GET /api/llm/test/vector-count

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-count \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menghapus semua vektor untuk articleId tertentu dari indeks vektor

Endpoint pengujian untuk menghapus semua vektor yang terkait dengan articleId tertentu dari indeks vektor organisasi pengguna saat ini.

Parameter

organisationId `string` (opsional) ID organisasi (akan terdeteksi otomatis jika tidak diberikan) articleId `string` (wajib) articleId yang vektornya akan dihapus dryRun `string` (opsional) Jika true, hanya menampilkan apa yang akan dihapus tanpa benar-benar menghapusnya

Titik akhir

DELETE /api/llm/test/vector-delete-article

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/llm/test/vector-delete-article \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menguji Vector SDK dengan mencantumkan semua indeks

Endpoint pengujian untuk memverifikasi konektivitas Vector SDK dan mencantumkan semua indeks dalam vector bucket

Titik akhir

GET /api/llm/test/vector-indices

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-indices \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menginisialisasi indeks Vector untuk organisasi

Membuat vector bucket dan indeks untuk organisasi pengguna saat ini

Parameter

organisationId `string` (opsional) ID organisasi (akan terdeteksi otomatis jika tidak diberikan)

Titik akhir

POST /api/llm/test/vector-init-index

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/llm/test/vector-init-index \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mendapatkan semua metadata vektor untuk articleId tertentu

Endpoint pengujian untuk mengambil semua chunk vektor beserta metadatanya untuk articleId tertentu dari indeks vektor. Berguna untuk memeriksa cara artikel dipotong dan disimpan. Pemfilteran ditangani oleh layanan vector store.

Parameter

organisationId `string` (opsional) ID organisasi (akan terdeteksi otomatis jika tidak diberikan) articleId `string` (wajib) ID artikel yang metadata vektornya akan diambil

Titik akhir

GET /api/llm/test/vector-metadata-by-article

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-metadata-by-article \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mendapatkan vektor terbaru beserta metadata dari indeks vektor

Endpoint pengujian untuk mengambil 10 vektor terbaru beserta metadata (tetapi tanpa data vektor) dari indeks vektor organisasi pengguna saat ini. Berguna untuk memeriksa struktur metadata.

Parameter

organisationId `string` (opsional) ID organisasi (akan terdeteksi otomatis jika tidak diberikan) limit `string` (opsional) Jumlah vektor terbaru yang dikembalikan (maks. 100)

Titik akhir

GET /api/llm/test/vector-recent

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-recent \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengunggah aset untuk Marketing Manager/Designer ke S3 Storage.

Parameter

file `string` (opsional) Nama file/aset yang akan diunggah.

Titik akhir

POST /api/marketing/design/static/download

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/marketing/design/static/download \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan aset individual dalam format JSON untuk dimuat ke pengelola aset.

Parameter

id `string` (wajib) ID aset yang akan diambil. organisationId `string` (wajib) ID organisasi dari fasilitas pemilik aset.

Titik akhir

GET /api/marketing/assets/get/{id}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets/get/{id} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan semua aset desain.

Parameter

body `string` (wajib) Objek JSON berisi data fasilitas yang ingin Anda simpan. organisationId `string` (wajib) ID organisasi dari fasilitas pemilik aset. useCache `string` (opsional) search `string` (opsional) Kueri pencarian untuk memfilter aset berdasarkan nama atau tag. brand `string` (opsional) Merek untuk memfilter aset. tag `string` (opsional) Tag untuk memfilter aset.

Titik akhir

GET /api/marketing/assets/get

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets/get \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan satu halaman aset cetak pemasaran untuk organisasi. Menggunakan Algolia untuk pencarian relevansi + paginasi berbasis halaman (dengan jumlah total), dan beralih ke DynamoDB jika Algolia tidak tersedia.

Parameter

organisationId `string` (wajib) ID organisasi dari fasilitas pemilik aset. search `string` (opsional) Kueri pencarian untuk memfilter aset berdasarkan nama atau tag. brand `string` (opsional) Merek untuk memfilter aset. tag `string` (opsional) Tag untuk memfilter aset. page `string` (opsional) Nomor halaman (dimulai dari nol) yang akan diambil. limit `string` (opsional) Jumlah aset per halaman (maks. 300). useCache `string` (opsional) Jika false, melewati Algolia dan langsung mengkueri DynamoDB.

Titik akhir

GET /api/marketing/assets

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar aset tersedia yang telah diunggah melalui pengelola aset.

Parameter

organisationId `string` (wajib)

Titik akhir

GET /api/marketing/assets/list

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets/list \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menambahkan/menyimpan aset.

Parameter

body `string` (wajib) Objek JSON berisi data fasilitas yang ingin Anda simpan. organisationId `string` (wajib) ID organisasi dari fasilitas pemilik aset.

Titik akhir

PUT /api/marketing/assets/save

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/assets/save \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengunggah aset untuk Marketing Manager/Designer ke S3 Storage.

Parameter

file `string` (opsional) Nama file/aset yang akan diunggah. organisationId `string` (opsional) ID organisasi pemilik aset.

Titik akhir

POST /api/marketing/assets/upload

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar semua halaman kustom untuk organisasi.

Parameter

organisationId `string` (wajib) ID internal organisasi yang halaman kustomnya akan dikembalikan.

Titik akhir

GET /api/marketing/custom-pages

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/marketing/custom-pages \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menyisipkan atau memperbarui halaman kustom untuk organisasi.

Parameter

organisationId `string` (wajib) ID internal organisasi yang halaman kustomnya akan dikembalikan. body `object` (wajib) Data halaman kustom yang akan disisipkan atau diperbarui.

Titik akhir

PUT /api/marketing/custom-pages

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/custom-pages \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar semua halaman kustom untuk fasilitas.

Parameter

facilityId `string` (wajib) ID internal fasilitas yang halaman kustomnya akan dikembalikan.

Titik akhir

GET /api/facilities/{facilityId}/marketing/custom-pages

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/marketing/custom-pages \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan semua desain yang diekspor/dirender untuk ID fasilitas tertentu.

Parameter

club `string` (wajib) ID internal fasilitas yang mengajukan permintaan. sort `string` (opsional) Filter untuk mengurutkan desain; mendukung 'oldest', 'newest', atau 'design'.

Titik akhir

GET /api/marketing/designs/{club}/exports

Contoh Permintaan

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

Respons

{}

Mengembalikan konten HTML individual untuk desain dalam format JSON untuk dimuat ke editor.

Parameter

id `string` (wajib) ID desain yang akan diambil.

Titik akhir

GET /api/marketing/designs/get/{id}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/get/{id} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar pemetaan input dalam desain pemasaran dan cetak serta template desain

Parameter

clubId `string` (wajib) ID internal fasilitas yang mengajukan permintaan. availableFeatures `string` (opsional) Mengembalikan semua item dengan fitur tertentu brand `string` (opsional) Memfilter desain berdasarkan merek features `string` (opsional) Memfilter hasil berdasarkan fitur

Titik akhir

GET /api/marketing/designs/input-mapping/{clubId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/input-mapping/{clubId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar desain yang tersedia untuk fasilitas tertentu, yang dapat digunakan dalam desain (Print Designs) yang dibuat di editor pemasaran/cetak hub.

Parameter

club `string` (wajib) ID internal fasilitas yang mengajukan permintaan. designAdmin `string` (opsional) Mengembalikan semua data desain (tampilan admin / pengguna harus administrator). brand `string` (opsional) Memfilter desain berdasarkan merek

Titik akhir

GET /api/marketing/designs/{club}/list

Contoh Permintaan

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

Respons

{}

Memaksa sistem untuk merender/merender ulang semua thumbnail & pratinjau desain (terutama digunakan jika aset 'upstream' di S3 dan sebagainya diubah)... **CATATAN** Anda hanya dapat memanggil fungsi ini sekali setiap X menit (atau jika render sedang berjalan, Anda tidak dapat memanggil fungsi ini). Hal ini untuk memastikan server kami tidak terbebani secara berlebihan saat merender semua desain...

Titik akhir

GET /api/marketing/designs/render-all-thumbnails

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/render-all-thumbnails \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memulai render Dynamic Design

Parameter

body `string` (wajib) Objek JSON berisi data fasilitas yang ingin Anda kirim ke pemroses render desain...

Titik akhir

POST /api/marketing/designs/dynamic/render-design

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/marketing/designs/dynamic/render-design \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menambahkan/menyimpan/memperbarui desain.

Parameter

body `string` (wajib) Objek JSON berisi data fasilitas yang ingin Anda simpan.

Titik akhir

PUT /api/marketing/designs/{club}/save

Contoh Permintaan

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

Respons

{}

Mengembalikan desain statis individual dalam format JSON untuk dimuat

Parameter

id `string` (wajib) ID desain statis yang akan diambil.

Titik akhir

GET /api/marketing/designs/static/get/{id}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/static/get/{id} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menambahkan/menyimpan/memperbarui template desain statis.

Parameter

body `string` (wajib) Objek JSON berisi data fasilitas yang ingin Anda simpan.

Titik akhir

PUT /api/marketing/designs/static/{club}/save

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/designs/static/{club}/save \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menghapus variabel yang ditetapkan pengguna dari sistem.

Parameter

club `string` (wajib) ID internal fasilitas yang mengajukan permintaan. body `string` (wajib) JSON berisi ID variabel yang akan dihapus.

Titik akhir

DELETE /api/marketing/variables/{club}/delete

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/marketing/variables/{club}/delete \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar variabel yang tersedia untuk fasilitas tertentu, yang dapat digunakan dalam desain (Print Designs) yang dibuat di editor pemasaran/cetak hub.

Parameter

club `string` (wajib) ID internal fasilitas yang mengajukan permintaan.

Titik akhir

GET /api/marketing/variables/{club}/list

Contoh Permintaan

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

Respons

{}

Membuat satu 'variabel' baru berbasis pengguna untuk fasilitas tertentu.

Parameter

club `string` (wajib) ID internal fasilitas yang mengajukan permintaan. body `string` (wajib) Objek JSON berisi variabel baru.

Titik akhir

POST /api/marketing/variables/{club}/new

Contoh Permintaan

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

Respons

{}

Menambahkan/menyimpan/memperbarui satu atau beberapa variabel desain di sistem melalui array objek.

Parameter

club `string` (wajib) ID internal fasilitas yang mengajukan permintaan. body `string` (wajib) Array berisi satu atau beberapa objek JSON yang akan ditambahkan/diperbarui (memungkinkan penyimpanan beberapa item/objek dalam satu permintaan API).

Titik akhir

PUT /api/marketing/variables/{club}/save

Contoh Permintaan

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

Respons

{}

Mengembalikan manifes dokumentasi MCP untuk pengguna yang sedang masuk

Mendukung halaman `/mcp-docs` di dalam aplikasi. Mengembalikan URL server MCP, header autentikasi yang didukung, identitas/flag admin pemanggil, dan daftar alat yang telah difilter (difilter dengan cara yang sama seperti `/mcp/tools/list`, sehingga halaman dokumentasi tidak pernah menampilkan alat yang sebenarnya tidak dapat digunakan pemanggil).

Titik akhir

GET /api/mcp/docs-manifest

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/mcp/docs-manifest \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat perjanjian pengguna.

Parameter

body `object` (wajib) Objek JSON berisi data fasilitas yang ingin Anda simpan.

Titik akhir

POST /api/member-agreements/contracts-tna/:club

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar perjanjian.

Titik akhir

GET /api/member-agreements/contracts-tna/:club

Contoh Permintaan

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

Respons

{}

Menghapus perjanjian pengguna.

Titik akhir

DELETE /api/member-agreements/contracts-tna/:club/:id

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan detail perjanjian tertentu.

Titik akhir

GET /api/member-agreements/contracts-tna/:club/:id

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui perjanjian pengguna.

Parameter

body `object` (wajib) Objek JSON berisi data fasilitas yang ingin Anda simpan.

Titik akhir

PATCH /api/member-agreements/contracts-tna/:club/:id

Contoh Permintaan

curl -X PATCH https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mendapatkan perjanjian default fasilitas.

Parameter

body `object` (wajib) Objek JSON berisi data fasilitas yang ingin Anda simpan.

Titik akhir

GET /api/member-agreements/default-tna/:club

Contoh Permintaan

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

Respons

{}

Menetapkan perjanjian default fasilitas.

Parameter

body `object` (wajib) Objek JSON berisi data fasilitas yang ingin Anda simpan.

Titik akhir

POST /api/member-agreements/default-tna/:club

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/member-agreements/default-tna/:club \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar perjanjian global atau regional.

Titik akhir

GET /api/member-agreements/global-tna/:club

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar anggota beserta perjanjian.

Titik akhir

GET /api/member-agreements/:club

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar anggota fasilitas berdasarkan musim untuk aplikasi training camp.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. season `string` (opsional) Musim training camp yang ingin Anda filter. userIds `string` (opsional) Array ID pengguna untuk memfilter. useCache `string` (opsional) Apakah akan menggunakan cache. isUserMemberInfo `string` (opsional) Jika diaktifkan, data akan difilter berdasarkan userIds (disarankan hanya menggunakan satu ID pengguna) dan menyertakan data yang diperlukan seperti papan peringkat dan preferensi pengguna.

Titik akhir

GET /api/members-leads/trainingcamp/club/season-members/{club}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/members-leads/trainingcamp/club/season-members/{club} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menghapus beberapa prospek pemesanan latihan.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. body `string` (wajib)

Titik akhir

DELETE /api/members-leads/workout-booking/club/leads/{club}

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar prospek pemesanan latihan fasilitas.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. all `string` (opsional) Untuk menampilkan semua prospek atau hanya yang akan datang.

Titik akhir

GET /api/members-leads/workout-booking/club/leads/{club}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui prospek pemesanan latihan.

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses. body `string` (wajib)

Titik akhir

PUT /api/members-leads/workout-booking/club/leads/{club}

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengubah status tanda pada prospek pemesanan latihan.

Parameter

club `string` (wajib) ID internal klub. body `string` (wajib)

Titik akhir

PATCH /api/members-leads/workout-booking/club/leads/{club}/flag

Contoh Permintaan

curl -X PATCH https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club}/flag \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mendapatkan modul yang berlaku untuk fasilitas

Mengembalikan semua modul yang tersedia untuk fasilitas dengan menelusuri hierarki: preferensi fasilitas → modul merek → modul organisasi. Hasil disimpan di cache Redis untuk performa.

Parameter

facilityId `string` (wajib) ID fasilitas yang modulnya akan ditentukan

Titik akhir

GET /api/facilities/{facilityId}/modules

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/modules \
  -H "x-api-key: YOUR_API_KEY"

Respons

[]

Mengembalikan katalog modul beserta konfigurasi tampilan menu samping. Daftar modul lengkap dikembalikan sehingga renderer front-end dapat menentukan visibilitas per pengguna; ACL tetap diterapkan di sisi server melalui `auth.checkModuleAccess()`.

Titik akhir

GET /api/modules

Contoh Permintaan

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

Respons

{}

Mendapatkan kategori pemberitahuan.

Titik akhir

GET /api/notification/categories

Contoh Permintaan

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

Respons

{}

Menghapus pemberitahuan yang telah dibaca.

Titik akhir

DELETE /api/club/notification/consumed/:club

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/club/notification/consumed/:club \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat pesan pemberitahuan.

Titik akhir

POST /api/club/notification/consumed/:club

Contoh Permintaan

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

Respons

{}

Mengembalikan array pemberitahuan yang telah dibaca.

Titik akhir

GET /api/club/notification/consumed/:club

Contoh Permintaan

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

Respons

{}

Menghapus pesan pemberitahuan.

Titik akhir

DELETE /api/club/notification/messages/:club

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan array pesan pemberitahuan.

Titik akhir

GET /api/club/notification/messages/:club

Contoh Permintaan

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

Respons

{}

Memperbarui pesan pemberitahuan.

Titik akhir

PATCH /api/club/notification/messages/:club

Contoh Permintaan

curl -X PATCH https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat pesan pemberitahuan.

Parameter

body `string` (wajib)

Titik akhir

POST /api/club/notification/messages/:club

Contoh Permintaan

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

Respons

{}

Mendapatkan penonton pemberitahuan berdasarkan fasilitas.

Titik akhir

POST /api/club/notification/viewers/:club

Contoh Permintaan

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

Respons

{}

Mendapatkan kategori pemberitahuan berdasarkan pengguna.

Titik akhir

GET /api/club/notification/user-categories/:club

Contoh Permintaan

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

Respons

{}

Membuat pesan pemberitahuan.

Titik akhir

POST /api/notification/webhook

Contoh Permintaan

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

Respons

{}

Mendapatkan kunci publik VAPID untuk push HTML5

Mengembalikan kunci publik VAPID yang digunakan untuk membuat langganan push browser.

Titik akhir

GET /html5-push/vapid-public-key

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/html5-push/vapid-public-key \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menyimpan atau memperbarui langganan push HTML5

Menyimpan langganan push browser untuk pengguna saat ini.

Isi Permintaan

Titik akhir

POST /html5-push/subscribe

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/html5-push/subscribe \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Respons

{}

Menghapus langganan push HTML5

Menghapus langganan push browser untuk pengguna saat ini.

Isi Permintaan

Titik akhir

POST /html5-push/unsubscribe

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/html5-push/unsubscribe \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Respons

{}

Mendapatkan status orientasi lokasi untuk pengguna yang memanggil

Mengembalikan dua bagian orientasi untuk fasilitas, yaitu penyiapan (detail + pilihan produk, disimpan di preferensi fasilitas) dan pembayaran (diturunkan langsung dari catatan payment-settings penagihan SaaS), beserta flag `required` yang dipersonalisasi untuk pemanggil yang menjadi syarat tampilan aplikasi. Hanya untuk lokasi dengan stack teknologi; lokasi dengan stack bisnis selalu mengembalikan required=false.

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/onboarding/{facilityId}

Contoh Permintaan

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

Respons

{}

Menyimpan progres wizard orientasi yang sedang berlangsung untuk fasilitas

Menyimpan status wizard sebagian (pilihan produk, teks bebas "Other", detail bisnis yang ditinjau, langkah saat ini) sehingga muat ulang/meninggalkan halaman dapat dilanjutkan dari posisi terakhir pengguna. Tidak pernah menandai selesai; lihat endpoint complete.

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

PUT /api/onboarding/{facilityId}

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/onboarding/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Respons

{}

Membuat saran isian otomatis AI untuk wizard orientasi

Menggunakan konteks fasilitas/merek/organisasi yang ada untuk mengusulkan detail fasilitas (teks deskripsi, bidang kontak yang dirapikan), saran pilihan produk, serta tips singkat yang dipersonalisasi. Hasil disimpan di cache Redis selama 7 hari. Saran hanya bersifat anjuran; klien menampilkannya dalam formulir tinjauan yang dapat diedit. Selalu merespons 200; `suggestions` bernilai null jika AI tidak tersedia sehingga wizard tetap berfungsi dengan baik.

Parameter

facilityId `string` (wajib)

Titik akhir

POST /api/onboarding/{facilityId}/ai-prefill

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/onboarding/{facilityId}/ai-prefill \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menyelesaikan bagian penyiapan orientasi lokasi

Memvalidasi pilihan/detail yang dikonfirmasi, menyimpan detail bisnis ke catatan fasilitas, mengisi awal tata letak menu teknologi fasilitas dari pilihan produk (kecuali tata letak kustom sudah ada), dan menandai penyiapan selesai. Bagian pembayaran sengaja TIDAK dapat diselesaikan di sini; bagian ini diturunkan langsung dari catatan payment-settings penagihan SaaS, sehingga persyaratan kartu wajib tidak dapat dilewati dengan memanggil endpoint ini. Mengembalikan status yang telah diperbarui.

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/onboarding/{facilityId}/complete

Contoh Permintaan

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 '{}'

Respons

{}

Memicu tindakan integrasi mitra yang dideklarasikan untuk fasilitas

Menjalankan tindakan "Run integration" yang dideklarasikan pada catatan mitra (ph-partners.actions[]), dalam cakupan fasilitas. Kunci single-flight Redis mencegah eksekusi manual bersamaan untuk tindakan+fasilitas yang sama.

Parameter

partnerId `string` (wajib) actionId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/partners/{partnerId}/actions/{actionId}/run

Contoh Permintaan

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 '{}'

Membaca status eksekusi tindakan integrasi mitra

Mengembalikan apakah eksekusi manual sedang berlangsung (kunci single-flight sedang dipegang) beserta eksekusi terakhir yang diminta, untuk di-polling oleh tombol pengaturan.

Parameter

partnerId `string` (wajib) actionId `string` (wajib) facilityId `string` (wajib)

Titik akhir

GET /api/partners/{partnerId}/actions/{actionId}/status

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/partners/{partnerId}/actions/{actionId}/status \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mendapatkan semua konfigurasi mitra untuk merek

Parameter

brandId `string` (wajib) ID merek

Titik akhir

GET /api/partners/brand-config/{brandId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/partners/brand-config/{brandId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

[]

Membuat atau memperbarui konfigurasi mitra merek

Parameter

body `object` (wajib)

Titik akhir

PUT /api/partners/brand-config

Contoh Permintaan

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

Respons

{}

Memigrasikan data integrasi GymMaster ke facility-partner-config

Mengkueri semua fasilitas dengan bidang gymMasterAPI dan gymMasterDomain lalu membuat/memperbarui catatan facility-partner-config yang sesuai. Ini adalah endpoint migrasi satu kali.

Parameter

partnerId `string` (wajib) ID mitra GymMaster yang digunakan untuk semua catatan yang dimigrasikan dryRun `boolean` (opsional) Jika true, hanya melaporkan apa yang akan dimigrasikan tanpa menulis ke basis data

Titik akhir

GET /api/partners/migrate-gymmaster

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/partners/migrate-gymmaster \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengaktifkan mitra untuk organisasi.

Parameter

partnerId `string` (wajib) ID mitra

Titik akhir

POST /api/partners/organisation/enable

Contoh Permintaan

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

Respons

{}

Mencantumkan mitra organisasi. Admin organisasi hanya melihat mitra organisasinya sendiri.

Titik akhir

GET /api/partners/organisation

Contoh Permintaan

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

Respons

{}

Menghapus mitra organisasi.

Parameter

keyId `string` (wajib) ID kunci mitra organisasi organisationId `string` (wajib) ID organisasi mitra

Titik akhir

DELETE /api/partners/organisation/{keyId}

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/partners/organisation/{keyId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui mode akses dan modul mitra organisasi.

Parameter

keyId `string` (wajib) ID kunci mitra organisasi organisationId `string` (wajib) ID organisasi mitra partnerId `string` (wajib) ID mitra accessMode `string` (wajib) Mode akses untuk mitra modules `string` (opsional) Daftar modul untuk mode akses LIMITED

Titik akhir

PUT /api/partners/organisation/update-access

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/partners/organisation/update-access \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat check-in untuk fasilitas

Menerima array objek check-in dan meneruskannya ke Partner API untuk diproses. Maksimum 25 check-in per permintaan.

Isi Permintaan

Titik akhir

POST /api/partners/check-ins

Contoh Permintaan

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 '{}'

Respons

{}

Menghapus konfigurasi mitra untuk fasilitas

Menghapus konfigurasi integrasi mitra di fasilitas

Parameter

facilityId `string` (wajib) ID fasilitas (club ID) partnerId `string` (wajib) ID mitra

Titik akhir

DELETE /api/partners/facility-config/{facilityId}/{partnerId}

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/partners/facility-config/{facilityId}/{partnerId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan semua konfigurasi mitra untuk fasilitas

Mengembalikan semua integrasi mitra yang dikonfigurasi untuk fasilitas yang ditentukan

Parameter

facilityId `string` (wajib) ID fasilitas (club ID)

Titik akhir

GET /api/partners/facility-config/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/partners/facility-config/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat atau memperbarui konfigurasi mitra untuk fasilitas

Menyisipkan atau memperbarui konfigurasi integrasi mitra di fasilitas

Isi Permintaan

Titik akhir

POST /api/partners/facility-config

Contoh Permintaan

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 '{}'

Respons

{}

Menghapus anggota berdasarkan memberId

Menghapus catatan anggota yang ada menggunakan memberId.

Parameter

memberId `string` (wajib) Pengidentifikasi unik anggota

Titik akhir

DELETE /api/partners/members/{memberId}

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/partners/members/{memberId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui anggota berdasarkan memberId

Memperbarui catatan anggota yang ada menggunakan memberId.

Parameter

memberId `string` (wajib) Pengidentifikasi unik anggota

Isi Permintaan

Titik akhir

PUT /api/partners/members/{memberId}

Contoh Permintaan

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 '{}'

Respons

{}

Mendapatkan status operasi sinkronisasi anggota

Mengembalikan status terkini dari operasi pembuatan/penghapusan anggota asinkron yang dimulai melalui POST /api/partners/members atau DELETE /api/partners/members/{memberId}. Frontend melakukan polling ke endpoint ini untuk menggantikan alur lama polling daftar + pencocokan nama. CATATAN Pembatasan partnerId/facilityId tingkat baris diwajibkan oleh aturan isolasi multi-tenant, tetapi ditunda ke PR penguatan Fase 3a.1; operationId adalah UUID 128-bit dan rute ini sudah dibatasi oleh akses modul `external-integrations`. Siapa pun yang memiliki operationId valid dan akses modul admin dapat mengkueri statusnya.

Parameter

operationId `string` (wajib) UUID yang dikembalikan dari POST/DELETE

Titik akhir

GET /api/partners/members/operations/{operationId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/partners/members/operations/{operationId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat atau memperbarui anggota untuk fasilitas

Menerima array objek anggota dan meneruskannya ke Partner API untuk diproses. Maksimum 25 anggota per permintaan.

Isi Permintaan

Titik akhir

POST /api/partners/members

Contoh Permintaan

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

Respons

{}

Membuat atau memperbarui paket keanggotaan untuk fasilitas

Menerima array objek paket keanggotaan dan meneruskannya ke Partner API untuk diproses. Maksimum 25 paket keanggotaan per permintaan.

Isi Permintaan

Titik akhir

POST /api/partners/membership-plans

Contoh Permintaan

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 '{}'

Respons

{}

Membuat peran baru

Parameter

body `string` (wajib) Objek peran

Titik akhir

POST /api/roles

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar semua peran

Titik akhir

GET /api/roles

Contoh Permintaan

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

Respons

{}

Menghapus peran berdasarkan ID

Titik akhir

DELETE /api/roles/{roleId}

Contoh Permintaan

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

Respons

{}

Memperbarui peran berdasarkan ID

Parameter

body `string` (wajib) Objek peran

Titik akhir

PUT /api/roles/{roleId}

Contoh Permintaan

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

Respons

{}

Membuat item baris tambahan baru untuk faktur penagihan SaaS

Parameter

organisationId `string` (opsional) ID organisasi yang akan dibuatkan item baris tambahan body `string` (opsional) Isi permintaan

Titik akhir

POST /api/saas-billing/additional-line-items

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar item baris tambahan untuk faktur penagihan SaaS

Parameter

organisationId `string` (wajib) ID organisasi

Titik akhir

GET /api/saas-billing/additional-line-items

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar item baris tambahan untuk faktur penagihan SaaS fasilitas

Titik akhir

GET /api/clubs/{clubId}/saas-billing/additional-line-items

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/saas-billing/additional-line-items \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui item baris tambahan untuk faktur penagihan SaaS

Parameter

itemId `string` (wajib) ID item baris tambahan yang akan diperbarui body `string` (wajib) Isi permintaan

Titik akhir

PUT /api/saas-billing/additional-line-items/{itemId}

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items/{itemId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Tarif per jam gabungan Cloud Agent untuk Your Rates

Mengembalikan ukuran Cloud Agent yang ditawarkan dengan satu harga per jam gabungan (hosting + perangkat lunak). Rinciannya tidak disertakan. usedPlans adalah SKU yang dijalankan fasilitas ini dalam 30 hari terakhir.

Parameter

clubID `string` (wajib)

Titik akhir

GET /api/clubs/{clubID}/saas-billing/cloud-agent-rates

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/cloud-agent-rates \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menghapus laporan bulanan yang diimpor

Parameter

club `string` (opsional) ID Klub reportId `string` (opsional) ID laporan

Titik akhir

DELETE /api/saas-billing/extended-access/monthly-usage-report/{reportId}

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/{reportId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mendapatkan laporan penyimpanan CCTV terbaru untuk fasilitas

Mengembalikan snapshot harian penyimpanan CCTV terbaru untuk fasilitas dari log penagihan yang tersimpan (hingga 31 hari terakhir). Mencakup totalStorage, tanggal, dan biaya terkait penyimpanan.

Parameter

club `string` (wajib) ID Klub

Titik akhir

GET /api/saas-billing/extended-access/latest-cctv-storage-report/{club}

Contoh Permintaan

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"

Respons

{}

Mengembalikan faktur PDF untuk fasilitas untuk periode tertentu.

Parameter

club `string` (opsional) ID Klub month `string` (opsional) Bulan laporan dalam format angka. 1 = Januari, 2 = Februari, dan seterusnya. year `string` (opsional) Tahun laporan dalam format angka, misalnya 2021

Titik akhir

GET /api/saas-billing/extended-access/monthly-usage-report/:club/invoice

Contoh Permintaan

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"

Respons

{}

Kumpulan PDF faktur platform untuk bulan penggunaan yang dipilih, dalam bentuk ZIP. Versi massal dari endpoint .../invoice tunggal; mendukung unduhan multi-pilih di tab Invoices & Receipts pada applet Billing & Cost Management.

Parameter

club `string` (opsional) ID Klub months `string` (opsional) Bulan penggunaan/laporan yang dipisahkan koma dalam format YYYY-MM (maks. 24)

Titik akhir

GET /api/saas-billing/extended-access/monthly-usage-report/{club}/invoices.zip

Contoh Permintaan

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"

Respons

{}

Mengembalikan laporan penggunaan bulanan untuk beberapa bulan penggunaan dalam satu panggilan. Mendukung diagram Cost History dan selisih antarbulan di applet Billing & Cost Management. Bulan yang belum memiliki penggunaan mengembalikan report: null (sesuai dengan 404 → $0 di UI pada endpoint satu bulan).

Parameter

club `string` (opsional) ID Klub months `string` (opsional) Bulan penggunaan yang dipisahkan koma dalam format YYYY-MM (maks. 12)

Titik akhir

GET /api/saas-billing/extended-access/monthly-usage-report/{club}/batch

Contoh Permintaan

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"

Respons

{}

Mengimpor laporan bulanan untuk fasilitas.

Parameter

club `string` (opsional) ID Klub

Titik akhir

PUT /api/saas-billing/extended-access/usage-report/:club

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan laporan CSV penggunaan CCTV selama 30 hari terakhir untuk semua fasilitas.

Titik akhir

GET /api/saas-billing/extended-access/usage-report/:club

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan semua laporan harian bulan ini untuk fasilitas.

Parameter

club `string` (opsional) ID Klub month `string` (opsional) Bulan laporan dalam format angka. 1 = Januari, 2 = Februari, dan seterusnya. year `string` (opsional) Tahun laporan dalam format angka, misalnya 2021

Titik akhir

GET /api/saas-billing/extended-access/monthly-usage-report/{club}/daily-reports

Contoh Permintaan

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"

Respons

{}

Mengembalikan daftar laporan bulanan yang diimpor untuk admin

Parameter

organisationId `string` (wajib) ID organisasi

Titik akhir

GET /api/saas-billing/extended-access/usage-report/imported

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/imported \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan laporan CSV penggunaan CCTV selama 30 hari terakhir untuk semua fasilitas.

Parameter

club `string` (opsional) ID Klub month `string` (opsional) Bulan laporan dalam format angka. 1 = Januari, 2 = Februari, dan seterusnya. year `string` (opsional) Tahun laporan dalam format angka, misalnya 2021

Titik akhir

GET /api/saas-billing/extended-access/monthly-usage-report/:club

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan laporan penggunaan berkala untuk fasilitas.

Parameter

club `string` (opsional) ID Klub periodStart `string` (opsional) Awal periode dalam format YYYY-MM-DD periodEnd `string` (opsional) Akhir periode dalam format YYYY-MM-DD

Titik akhir

GET /api/saas-billing/extended-access/periodical-usage-report/:club

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/periodical-usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Kumpulan PDF dokumen penagihan dalam satu ZIP, dengan berbagai jenis dokumen: faktur platform (berdasarkan bulan penggunaan), tanda terima top up dompet SaaS, dan tanda terima top up Model Router. Versi massal dari endpoint invoices.zip / receipts.zip per jenis untuk tab Invoices & Receipts gabungan. Setiap bulan/ID yang diminta harus mengarah ke dokumen milik fasilitas; satu nilai yang salah menggagalkan seluruh kumpulan.

Parameter

clubID `string` (wajib) invoiceMonths `string` (opsional) Bulan penggunaan yang dipisahkan koma dalam format YYYY-MM walletIds `string` (opsional) ID transaksi top up dompet SaaS yang dipisahkan koma aiIds `string` (opsional) ID transaksi top up Model Router yang dipisahkan koma

Titik akhir

GET /api/clubs/{clubID}/saas-billing/documents.zip

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/documents.zip \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menambahkan catatan ke rekaman bulanan

Parameter

recordID `string` (opsional) ID rekaman yang akan diambil note `string` (opsional) Catatan yang akan ditambahkan ke rekaman

Titik akhir

POST /api/saas-billing/monthly-records/{recordID}/notes

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{recordID}/notes \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar rekaman bulanan penagihan SaaS

Parameter

club `string` (opsional) ID fasilitas yang akan diambil month `string` (opsional) Bulan penagihan dalam format YYYY-MM

Titik akhir

GET /api/saas-billing/monthly-records/{club}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{club} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar rekaman bulanan penagihan SaaS yang gagal atau memerlukan 3D Secure

Parameter

clubID `string` (opsional) ID fasilitas yang rekaman bulanan gagalnya akan diambil

Titik akhir

GET /api/clubs/:clubID/saas-billing/flagged

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubs/:clubID/saas-billing/flagged \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan SEMUA rekaman bulanan penagihan SaaS (buku besar faktur) untuk fasilitas, dimulai dari bulan penagihan terbaru. Versi dalam cakupan fasilitas dari endpoint paginate-monthly-records yang khusus admin; mendukung tab "Invoices & Receipts" pelanggan di applet Billing & Cost Management.

Parameter

clubID `string` (opsional) ID fasilitas yang rekaman bulanannya akan dicantumkan

Titik akhir

GET /api/clubs/{clubID}/saas-billing/monthly-records

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/monthly-records \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar rekaman bulanan penagihan SaaS

Parameter

organisationId `string` (opsional) ID organisasi month `string` (opsional) Bulan dalam format MM. year `string` (opsional) Tahun dalam format YYYY. filters `string` (opsional) Filter string kueri yang dibuat oleh datatable. order `string` (opsional) String kueri yang dibuat oleh datatable.

Titik akhir

GET /api/saas-billing/monthly-records

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/monthly-records \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencoba ulang pembayaran yang gagal untuk fasilitas

Parameter

clubID `string` (opsional) ID fasilitas yang rekaman bulanan gagalnya akan diambil

Titik akhir

PUT /api/clubs/:clubID/saas-billing/retry-failed-payments

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/:clubID/saas-billing/retry-failed-payments \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui rekaman bulanan

Parameter

recordID `string` (opsional) ID rekaman yang akan diambil status `string` (opsional) Status baru untuk rekaman

Titik akhir

PUT /api/saas-billing/monthly-records/{recordID}

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{recordID} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memeriksa apakah pembayaran berhasil dan memperbarui status rekaman

Parameter

clubID `string` (opsional) recordID `string` (opsional) ID rekaman yang akan diambil

Titik akhir

PUT /api/clubs/{clubID}/saas-billing/monthly-records/{recordID}/validate

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/monthly-records/{recordID}/validate \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menambahkan metode pembayaran untuk fasilitas.

Parameter

clubID `string` (opsional)

Titik akhir

POST /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menyinkronkan metode pembayaran fasilitas dengan Stripe.

Parameter

clubID `string` (opsional)

Titik akhir

PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan anggaran pengeluaran fasilitas beserta perhitungan MTD/prakiraan.

Parameter

clubID `string` (opsional)

Titik akhir

GET /api/clubs/{clubID}/saas-billing/budget

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/budget \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat/memperbarui/menghapus anggaran pengeluaran fasilitas.

Parameter

clubID `string` (opsional) body `object` (opsional)

Titik akhir

PUT /api/clubs/{clubID}/saas-billing/budget

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/budget \
  -H "x-api-key: YOUR_API_KEY"

Menghapus metode pembayaran dari pengaturan pembayaran fasilitas.

Parameter

clubID `string` (opsional) paymentMethodID `string` (opsional)

Titik akhir

DELETE /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}

Contoh Permintaan

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"

Respons

{}

Mendapatkan pengaturan pembayaran untuk fasilitas.

Parameter

clubID `string` (opsional)

Titik akhir

GET /api/clubs/{clubID}/saas-billing/payment-settings

Contoh Permintaan

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

Respons

{}

Memperbarui pengaturan pembayaran fasilitas.

Parameter

clubID `string` (opsional) lockedOut `boolean` (opsional) Apakah akses fasilitas ke sistem akan dikunci. pauseBilling `boolean` (opsional) Apakah penagihan otomatis untuk fasilitas akan dijeda. customerID `string` (opsional) Menambahkan nilai ini akan memperbarui ID pelanggan Stripe untuk fasilitas. deleteSourceID `string` (opsional) Apakah pelanggan sumber akan dihapus dari Stripe.

Titik akhir

PUT /api/clubs/{clubID}/saas-billing/payment-settings

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mendapatkan bulan penagihan paling awal untuk semua fasilitas.

Parameter

clubID `string` (opsional)

Titik akhir

GET /api/saas-billing/payment-settings/earliest-billed-month

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/payment-settings/earliest-billed-month \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan akun yang dapat membuka penguncian penagihan untuk fasilitas, secara bertingkat: pengguna yang memiliki modul penagihan terlebih dahulu, admin organisasi hanya sebagai cadangan jika tidak ada.

Parameter

clubID `string` (wajib)

Titik akhir

GET /api/clubs/{clubID}/saas-billing/lockout-contacts

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/lockout-contacts \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menelusuri semua fasilitas dalam sistem per halaman dan mengembalikan ID pelanggan untuk setiap fasilitas.

Parameter

clubID `string` (opsional) organisationId `string` (opsional) ID organisasi

Titik akhir

GET /api/saas-billing/payment-settings/customer-ids

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/payment-settings/customer-ids \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menetapkan metode pembayaran utama untuk fasilitas.

Parameter

clubID `string` (opsional)

Titik akhir

PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}/primary

Contoh Permintaan

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"

Respons

{}

Memperbarui profil penagihan untuk fasilitas.

Parameter

clubID `string` (opsional) invoiceEntity `string` (opsional) billingContacts `string` (opsional) Daftar UUID kontak KYC ccEmails `string` (opsional) Daftar email yang akan di-CC pada faktur

Titik akhir

PUT /api/clubs/{clubID}/saas-billing/payment-settings/billing-profile

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/billing-profile \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui metode pembayaran untuk fasilitas.

Parameter

clubID `string` (opsional) cardID `string` (opsional)

Titik akhir

PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{cardID}

Contoh Permintaan

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"

Respons

{}

Mengembalikan rincian per fasilitas atas semua biaya produk yang berlaku dan item baris tambahan untuk ekspor CSV. Menelusuri hierarki penggantian global/wilayah/fasilitas untuk setiap fasilitas yang dapat diakses pengguna.

Parameter

organisationId `string` (wajib) ID organisasi untuk ACL

Titik akhir

GET /api/saas-billing/charges-config/export

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/charges-config/export \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan konfigurasi biaya untuk target tertentu

Parameter

clubId `string` (opsional) ID fasilitas yang konfigurasi biayanya akan diambil

Titik akhir

GET /api/saas-billing/charges-config/{clubId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/charges-config/{clubId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Ringkasan penagihan organisasi untuk organisasi fasilitas ini: cakupan pembayar yang berlaku, perubahan konsolidasi yang dijadwalkan, dan apakah pemanggil boleh mengelola tombol konsolidasi.

Parameter

clubID `string` (wajib)

Titik akhir

GET /api/clubs/{clubID}/saas-billing/org/summary

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/org/summary \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Rekaman bulanan organisasi gabungan (laporan) dengan rincian per fasilitas, terbaru lebih dulu. Kosong hingga bulan gabungan pertama organisasi diselesaikan.

Parameter

clubID `string` (wajib)

Titik akhir

GET /api/clubs/{clubID}/saas-billing/org/monthly-records

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/org/monthly-records \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Ringkasan dompet prabayar: saldo, debit penggunaan bulan berjalan, konfigurasi top up otomatis, metode penagihan.

Parameter

clubID `string` (wajib)

Titik akhir

GET /api/clubs/{clubID}/saas-billing/wallet

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Buku besar dompet, terbaru lebih dulu. Dompet dalam cakupan organisasi menyertakan baris dari semua fasilitas (masing-masing membawa clubID asalnya).

Parameter

clubID `string` (wajib) limit `string` (opsional) types `string` (opsional) Jenis transaksi yang dipisahkan koma from `string` (opsional) to `string` (opsional) cursor `string` (opsional) nextCursor dari halaman sebelumnya

Titik akhir

GET /api/clubs/{clubID}/saas-billing/wallet/transactions

Contoh Permintaan

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

Respons

{}

Tanda terima PDF bermerek untuk satu transaksi dompet (top up dan kredit).

Parameter

clubID `string` (wajib) txId `string` (wajib)

Titik akhir

GET /api/clubs/{clubID}/saas-billing/wallet/transactions/{txId}/receipt.pdf

Contoh Permintaan

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"

Respons

{}

Kumpulan tanda terima PDF bermerek untuk transaksi top up dompet yang dipilih, dalam bentuk ZIP. Setiap ID harus berupa top up (kartu atau faktur) milik dompet fasilitas ini; debit penggunaan dan penyesuaian tidak memiliki tanda terima dan akan ditolak.

Parameter

clubID `string` (wajib) ids `string` (wajib) Id transaksi yang dipisahkan koma (maks. 50)

Titik akhir

GET /api/clubs/{clubID}/saas-billing/wallet/transactions/receipts.zip

Contoh Permintaan

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

Respons

{}

Menagih kartu penagihan SaaS yang tersimpan untuk menambah saldo prabayar. Mengembalikan requires_action + clientSecret jika 3DS diperlukan.

Parameter

clubID `string` (wajib) body `object` (opsional)

Titik akhir

POST /api/clubs/{clubID}/saas-billing/wallet/topup

Contoh Permintaan

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

Respons

{}

Menyelesaikan top up dompet setelah applet menyelesaikan autentikasi 3DS. Idempoten.

Parameter

clubID `string` (wajib)

Titik akhir

POST /api/clubs/{clubID}/saas-billing/wallet/topup/confirm

Contoh Permintaan

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

Respons

{}

Memperbarui aturan top up otomatis fasilitas (disimpan pada baris penggantian billing-profile-nya).

Parameter

clubID `string` (wajib) body `object` (opsional)

Titik akhir

PATCH /api/clubs/{clubID}/saas-billing/wallet/auto-topup

Contoh Permintaan

curl -X PATCH https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/auto-topup \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Faktur top up untuk dompet fasilitas ini (metode pembayaran faktur), terbaru lebih dulu.

Parameter

clubID `string` (wajib)

Titik akhir

GET /api/clubs/{clubID}/saas-billing/wallet/invoices

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/invoices \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Meminta faktur top up dengan pembayaran melalui referensi (hanya metode pembayaran faktur). Maksimal satu faktur tertunda per dompet; permintaan kedua mengembalikan faktur yang ada dengan alreadyPending=true.

Parameter

clubID `string` (wajib) body `string` (opsional) { amountCents: number }

Titik akhir

POST /api/clubs/{clubID}/saas-billing/wallet/topup-invoice

Contoh Permintaan

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

Respons

{}

Mengembalikan daftar pesanan untuk fasilitas.

Parameter

facilityID `string` (opsional)

Titik akhir

GET /api/store/facilities/:facilityID/orders

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/store/facilities/:facilityID/orders \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan daftar produk yang tersedia untuk fasilitas.

Parameter

clubID `string` (wajib) search `string` (opsional) limit `string` (opsional) page `string` (opsional) Nomor halaman untuk paginasi (dimulai dari 1).

Titik akhir

GET /api/store/clubs/{clubID}/products

Contoh Permintaan

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

Respons

{}

Mencantumkan catatan Stripe fasilitas.

Parameter

club `string` (wajib) fromDate `string` (opsional) Stempel waktu Unix toDate `string` (opsional) Stempel waktu Unix socketID `string` (wajib) Pengidentifikasi unik untuk permintaan socket

Titik akhir

GET /api/club/{club}/stripe/records

Contoh Permintaan

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

Respons

{}

Membatalkan payment intent

Parameter

club `string` (wajib) paymentIntent `string` (opsional)

Titik akhir

GET /api/club/{club}/stripe/payment-intent/:paymentIntent/cancel

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/payment-intent/:paymentIntent/cancel \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat Stripe Account Session untuk komponen tersemat

Membuat Stripe Account Session untuk akun terhubung. Mengembalikan client_secret yang digunakan untuk menginisialisasi komponen tersemat Connect (sengketa, pembayaran keluar, manajemen akun, dokumen).

Isi Permintaan

Titik akhir

POST /api/stripe/account-session

Contoh Permintaan

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 '{}'

Respons

{}

Membuat tautan sekali pakai ke halaman KYC Stripe untuk akun terhubung.

Parameter

club `string` (wajib)

Titik akhir

GET /api/club/{club}/stripe/generate-kyc-token

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/generate-kyc-token \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mendapatkan detail akun Stripe yang terhubung sebagai bagian dari proses KYC.

Parameter

club `string` (wajib)

Titik akhir

GET /api/club/{club}/stripe/connect-account-details

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/connect-account-details \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengembalikan seluruh riwayat tiket berdasarkan Club ID

Parameter

club `string` (wajib) ID internal klub yang ingin Anda akses.

Titik akhir

GET /api/ticketing/clubtickets/{club}

Contoh Permintaan

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

Respons

{}

Mendapatkan daftar departemen

Titik akhir

GET /api/ticketing/departments

Contoh Permintaan

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

Respons

{}

Mendapatkan detail satu tiket

Parameter

user `string` (wajib) Email pengguna. ticketNumber `string` (wajib) ID 6 digit tiket yang ingin Anda akses. club `string` (wajib) ID fasilitas yang dipilih.

Titik akhir

GET /api/ticketing/ticket-details/:ticketNumber/:club

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/ticketing/ticket-details/:ticketNumber/:club \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mendapatkan daftar topik

Titik akhir

GET /api/ticketing/topics

Contoh Permintaan

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

Respons

{}

Mendapatkan semua tiket yang dibuat oleh pengguna yang sedang masuk. Catatan: nilai ini ditetapkan dari header yang diberikan oleh layanan SSO Google kami.

Parameter

user `string` (wajib) Email pengguna yang sedang masuk

Titik akhir

GET /api/ticketing/usertickets

Contoh Permintaan

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

Respons

{}

Membuat tiket baru

Parameter

club `string` (wajib) ID fasilitas yang dipilih.

Titik akhir

POST /api/ticketing/clubticket/:club

Contoh Permintaan

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

Respons

{}

Membuat tiket baru

Parameter

subject `string` (wajib) Subjek tiket. message `string` (wajib) Pesan lengkap tiket.

Titik akhir

POST /api/ticketing/userticket

Contoh Permintaan

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

Respons

{}

Membuat balasan untuk tiket yang ada

Parameter

subject `string` (wajib) Subjek tiket. message `string` (wajib) Pesan lengkap tiket.

Titik akhir

POST /api/ticketing/user-reply

Contoh Permintaan

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

Respons

{}

Mengambil preferensi pengguna

Titik akhir

GET /api/user-preferences

Contoh Permintaan

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

Respons

{}

Memperbarui preferensi pengguna

Parameter

body `string` (wajib)

Titik akhir

PUT /api/user-preferences

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/user-preferences \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengubah kata sandi pengguna

Mengubah kata sandi pengguna. Memerlukan verifikasi OTP jika pengguna memiliki nomor telepon, atau mengharuskan nomor telepon ditambahkan jika belum ada.

Isi Permintaan

Titik akhir

POST /api/user/change-password

Contoh Permintaan

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 '{}'

Respons

{}

Memeriksa status 2FA pengguna

Mengembalikan apakah 2FA diaktifkan untuk pengguna dan apakah ada perannya yang mewajibkan 2FA

Titik akhir

GET /api/user/check-2fa-status

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/user/check-2fa-status \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan organisasi, fasilitas, dan wilayah yang dapat diakses pengguna untuk modul tertentu.

Parameter

moduleId `string` (wajib)

Titik akhir

POST /api/user/me/modules/{moduleId}/org-access

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/user/me/modules/{moduleId}/org-access \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat 'Linking Request' dari pengguna akhir, yang meminta untuk 'Bergabung' dengan fasilitas.

Parameter

body `string` (wajib) Objek JSON klub baru yang akan ditambahkan ke sistem.

Titik akhir

POST /api/user/linkclub

Contoh Permintaan

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

Respons

{}

Mencantumkan semua fasilitas yang diotorisasi untuk pengguna.

Titik akhir

GET /api/user/listauthorised

Contoh Permintaan

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

Respons

{}

Mengirim OTP dua saluran (email + SMS)

Mengirim kode OTP ke alamat email pengguna dan ke nomor telepon tertentu. Digunakan untuk operasi dengan keamanan tinggi seperti verifikasi nomor telepon pertama kali. Endpoint ini hanya mengirim OTP dan tidak mengubah data pengguna apa pun.

Isi Permintaan

Titik akhir

POST /api/user/send-dual-otp

Contoh Permintaan

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 '{}'

Respons

{}

Mengirim OTP ke nomor telepon atau email

Mengirim kode OTP ke nomor telepon (SMS) atau alamat email pengguna untuk verifikasi

Isi Permintaan

Titik akhir

POST /api/user/send-otp

Contoh Permintaan

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 '{}'

Respons

{}

Memeriksa apakah pengguna memiliki akses halaman sensitif yang valid

Mengembalikan apakah pengguna memiliki sesi terverifikasi OTP yang valid untuk mengakses halaman sensitif

Titik akhir

GET /api/user/sensitive-page-access

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/user/sensitive-page-access \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memverifikasi OTP dan memberikan akses halaman sensitif

Memverifikasi kode OTP dan memberikan akses 1 jam ke halaman sensitif jika valid

Isi Permintaan

Titik akhir

POST /api/user/sensitive-page-access/verify

Contoh Permintaan

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 '{}'

Respons

{}

Mencabut akses halaman sensitif (keluar dari halaman sensitif)

Mencabut sesi akses halaman sensitif pengguna saat ini

Titik akhir

POST /api/user/sensitive-page-access/revoke

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/user/sensitive-page-access/revoke \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengaktifkan atau menonaktifkan 2FA

Mengaktifkan atau menonaktifkan autentikasi dua faktor untuk pengguna. Memerlukan nomor telepon dan verifikasi OTP.

Isi Permintaan

Titik akhir

POST /api/user/toggle-2fa

Contoh Permintaan

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 '{}'

Respons

{}

Memperbarui profil pengguna sendiri

Memungkinkan pengguna memperbarui informasi profilnya sendiri (nama depan, nama belakang, nomor telepon). Saat menambahkan nomor telepon untuk pertama kali, verifikasi OTP dua saluran diperlukan (kode email dan SMS). Saat mengubah nomor telepon yang ada, hanya OTP email yang diperlukan.

Isi Permintaan

Titik akhir

PATCH /api/user/update-profile

Contoh Permintaan

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 '{}'

Respons

{}

Mengambil ikon berdasarkan URL.

Titik akhir

GET /api/website-icon

Contoh Permintaan

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

Respons

{}

Mencantumkan template entri brankas kata sandi

Parameter

organisationId `string` (opsional) Konteks organisasi untuk pemeriksaan akses modul

Titik akhir

GET /api/vault/templates

Contoh Permintaan

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

Respons

{}

Mencantumkan entri brankas kata sandi yang terlihat

Parameter

organisationId `string` (wajib) scope `string` (opsional)

Titik akhir

GET /api/vault/entries

Contoh Permintaan

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

Respons

{}

Membuat entri brankas kata sandi

Titik akhir

POST /api/vault/entries

Contoh Permintaan

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

Mendapatkan entri brankas kata sandi tanpa menampilkan nilai rahasia

Parameter

entryId `string` (wajib) organisationId `string` (wajib)

Titik akhir

GET /api/vault/entries/{entryId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memperbarui entri brankas kata sandi

Titik akhir

PUT /api/vault/entries/{entryId}

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menghapus entri brankas kata sandi

Titik akhir

DELETE /api/vault/entries/{entryId}

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menampilkan bidang tersembunyi atau rahasia yang dipilih

Titik akhir

POST /api/vault/entries/{entryId}/reveal

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/vault/entries/{entryId}/reveal \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan ringkasan folder brankas kata sandi

Titik akhir

GET /api/vault/folders

Contoh Permintaan

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

Respons

{}

Mencantumkan entri dengan kode autentikator

Titik akhir

GET /api/vault/authenticator

Contoh Permintaan

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

Respons

{}

Mencantumkan jenis node workflow yang terdaftar

Titik akhir

GET /api/workflow-engine/node-types

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/node-types \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mendapatkan proyeksi jam operasional fasilitas yang digunakan oleh blok workflow

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/workflow-engine/facility-hours/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/facility-hours/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Melihat pratinjau pengirim email workflow bermerek fasilitas

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/workflow-engine/email-branding/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/email-branding/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan sumber daya fasilitas untuk konfigurasi pemicu

Parameter

facilityId `string` (wajib) resourceType `string` (wajib)

Titik akhir

GET /api/workflow-engine/resources/{facilityId}/{resourceType}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/resources/{facilityId}/{resourceType} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan workflow untuk fasilitas

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/workflow-engine/workflows/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat draf workflow dari graf yang tidak kosong

Editor menyimpan workflow baru secara lokal hingga memiliki setidaknya satu blok, sehingga penyimpanan pertama membuatnya beserta grafnya dalam satu panggilan. Isi permintaan tanpa `nodes` akan ditolak alih-alih disimpan.

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/workflow-engine/workflows/{facilityId}

Contoh Permintaan

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 '{}'

Respons

{}

Mencantumkan kredensial yang dapat digunakan workflow fasilitas

Mengembalikan kredensial milik fasilitas itu sendiri serta kredensial yang dibagikan di merek atau organisasinya. Rahasia tidak pernah dikembalikan; `hasValue` hanya melaporkan bahwa rahasia tersimpan.

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/workflow-engine/credentials/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat kredensial workflow

Tingkat cakupan berasal dari `scopeType`; ID merek dan organisasi ditentukan dari fasilitas, bukan diterima dari pemanggil.

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/workflow-engine/credentials/{facilityId}

Contoh Permintaan

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 '{}'

Pengaturan workflow seluruh fasilitas (penerima pemberitahuan kegagalan)

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/workflow-engine/facility-settings/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/facility-settings/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menyimpan penerima pemberitahuan kegagalan untuk seluruh fasilitas

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

PUT /api/workflow-engine/facility-settings/{facilityId}

Contoh Permintaan

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 '{}'

Respons

{}

Mengganti kredensial workflow

`secret` yang kosong mempertahankan rahasia yang tersimpan, sehingga kredensial dapat diganti namanya tanpa memasukkannya kembali. Tidak ada cara untuk membaca kembali rahasia.

Parameter

facilityId `string` (wajib) credentialId `string` (wajib)

Titik akhir

PUT /api/workflow-engine/credentials/{facilityId}/{credentialId}

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId}/{credentialId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menghapus kredensial workflow

Node yang merujuknya akan gagal secara tertutup pada panggilan berikutnya, termasuk di workflow yang sudah diterbitkan, karena snapshot hanya menyimpan referensinya.

Parameter

facilityId `string` (wajib) credentialId `string` (wajib)

Titik akhir

DELETE /api/workflow-engine/credentials/{facilityId}/{credentialId}

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId}/{credentialId} \
  -H "x-api-key: YOUR_API_KEY"

Mendapatkan URL webhook pemicu workflow

Parameter

facilityId `string` (wajib) workflowId `string` (wajib) nodeId `string` (wajib)

Titik akhir

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Merotasi URL webhook pemicu workflow

Langsung membatalkan URL sebelumnya.

Parameter

facilityId `string` (wajib) workflowId `string` (wajib) nodeId `string` (wajib)

Titik akhir

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook/rotate

Contoh Permintaan

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"

Respons

{}

Mendapatkan workflow berdasarkan ID

Parameter

facilityId `string` (wajib) workflowId `string` (wajib)

Titik akhir

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat atau memperbarui draf workflow

Parameter

facilityId `string` (wajib) workflowId `string` (wajib)

Isi Permintaan

Titik akhir

PUT /api/workflow-engine/workflows/{facilityId}/{workflowId}

Contoh Permintaan

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 '{}'

Respons

{}

Memperbarui nama dan/atau deskripsi workflow

Parameter

facilityId `string` (wajib) workflowId `string` (wajib)

Isi Permintaan

Titik akhir

PATCH /api/workflow-engine/workflows/{facilityId}/{workflowId}

Contoh Permintaan

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 '{}'

Respons

{}

Menghapus workflow beserta versinya

Parameter

facilityId `string` (wajib) workflowId `string` (wajib)

Titik akhir

DELETE /api/workflow-engine/workflows/{facilityId}/{workflowId}

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menduplikasi workflow menjadi draf baru yang tidak aktif

Parameter

facilityId `string` (wajib) workflowId `string` (wajib)

Titik akhir

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/duplicate

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/duplicate \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menerbitkan draf saat ini (snapshot versi yang tidak dapat diubah)

Parameter

facilityId `string` (wajib) workflowId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/publish

Contoh Permintaan

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 '{}'

Respons

{}

Mengatur ulang draf ke versi terakhir yang diterbitkan

Parameter

facilityId `string` (wajib) workflowId `string` (wajib)

Titik akhir

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/discard

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/discard \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengaktifkan atau menonaktifkan workflow

Parameter

facilityId `string` (wajib) workflowId `string` (wajib)

Isi Permintaan

Titik akhir

PATCH /api/workflow-engine/workflows/{facilityId}/{workflowId}/active

Contoh Permintaan

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 '{}'

Respons

{}

Membuat atau merevisi graf workflow dengan AI

Parameter

facilityId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/workflow-engine/generate/{facilityId}

Contoh Permintaan

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 '{}'

Respons

{}

Mencantumkan model yang dapat digunakan node Agent untuk fasilitas ini

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/workflow-engine/agent-models/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-models/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan alat MCP yang dapat dilampirkan node Agent untuk fasilitas ini

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/workflow-engine/agent-tools/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-tools/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencari percakapan Agent yang tersimpan di fasilitas ini (pengikatan Conversation key)

Parameter

facilityId `string` (wajib) deviceId `string` (opsional) Batasi ke percakapan satu perangkat Agent (deviceId yang dikonfigurasi pada node) q `string` (opsional) Pencocokan substring tanpa membedakan huruf besar/kecil pada Conversation key, ID sesi, atau nama perangkat limit `integer` (opsional) offset `integer` (opsional)

Titik akhir

GET /api/workflow-engine/agent-conversations/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-conversations/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencari percakapan yang tersimpan di perangkat Agent fasilitas itu sendiri

Mencantumkan sesi milik perangkat itu sendiri (percakapan di bilah samping UI Agent) sehingga workflow dapat melanjutkan percakapan yang ada beserta konteksnya. Perangkat menyimpan riwayatnya; jika fasilitas memiliki beberapa perangkat, `deviceId` memilih salah satunya (perangkat yang dikonfigurasi pada node). Perangkat tidak dapat dijangkau → 502.

Parameter

facilityId `string` (wajib) deviceId `string` (opsional) Perangkat Agent yang dikonfigurasi pada node; hilangkan untuk memakai satu-satunya perangkat fasilitas q `string` (opsional) Pencocokan substring tanpa membedakan huruf besar/kecil pada judul atau ID sesi limit `integer` (opsional) offset `integer` (opsional)

Titik akhir

GET /api/workflow-engine/agent-device-sessions/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-device-sessions/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencari papan di kanban perangkat Agent fasilitas

Menyediakan data untuk pemilih Board ID pada blok Agent: Kanban. Pencocokan substring tanpa membedakan huruf besar/kecil pada nama atau slug papan; `current` adalah slug papan aktif perangkat sehingga pemilih tugas dapat menggunakannya sebagai cakupan default. Jika fasilitas memiliki beberapa perangkat, `deviceId` memilih salah satunya. Perangkat tidak dapat dijangkau → 502.

Parameter

facilityId `string` (wajib) deviceId `string` (opsional) Perangkat Agent yang dikonfigurasi pada node; hilangkan untuk memakai satu-satunya perangkat fasilitas q `string` (opsional) Pencocokan substring tanpa membedakan huruf besar/kecil pada nama atau slug papan limit `integer` (opsional) offset `integer` (opsional)

Titik akhir

GET /api/workflow-engine/kanban-boards/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/kanban-boards/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencari tugas satu papan di kanban perangkat Agent fasilitas

Menyediakan data untuk pemilih Task ID pada blok Agent: Kanban. Pencocokan substring tanpa membedakan huruf besar/kecil pada ID, judul, atau isi tugas; tugas disimpan per papan (perangkat tidak memiliki pencarian lintas papan), sehingga `board` menentukan cakupan pengambilan; hilangkan untuk papan aktif perangkat. Perangkat tidak dapat dijangkau → 502.

Parameter

facilityId `string` (wajib) deviceId `string` (opsional) Perangkat Agent yang dikonfigurasi pada node; hilangkan untuk memakai satu-satunya perangkat fasilitas board `string` (opsional) Slug papan yang akan dicantumkan; hilangkan untuk papan aktif perangkat q `string` (opsional) Pencocokan substring tanpa membedakan huruf besar/kecil pada ID, judul, atau isi tugas limit `integer` (opsional) offset `integer` (opsional)

Titik akhir

GET /api/workflow-engine/kanban-tasks/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/kanban-tasks/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan template workflow pilihan, difilter untuk fasilitas ini

Parameter

facilityId `string` (wajib)

Titik akhir

GET /api/workflow-engine/templates/{facilityId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/templates/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membuat instans template menjadi fragmen graf untuk draf yang terbuka

Parameter

facilityId `string` (wajib) templateId `string` (wajib)

Titik akhir

POST /api/workflow-engine/templates/{facilityId}/{templateId}

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/templates/{facilityId}/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Konteks pemilih cakupan untuk halaman admin template (tingkat admin)

Titik akhir

GET /api/workflow-engine/template-admin/context

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/context \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mencantumkan template yang dapat dikelola pemanggil, beserta flag izin

Titik akhir

GET /api/workflow-engine/template-admin

Contoh Permintaan

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

Respons

{}

Membuat template (tingkat admin)

Isi Permintaan

Titik akhir

POST /api/workflow-engine/template-admin

Contoh Permintaan

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 '{}'

Detail template termasuk graf, untuk editor admin

Titik akhir

GET /api/workflow-engine/template-admin/{templateId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Mengganti template (organisasi pemilik)

Titik akhir

PUT /api/workflow-engine/template-admin/{templateId}

Contoh Permintaan

curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menghapus secara lunak template (organisasi pemilik)

Titik akhir

DELETE /api/workflow-engine/template-admin/{templateId}

Contoh Permintaan

curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Menduplikasi template yang terlihat ke cakupan tujuan yang dapat digunakan pemanggil

Isi Permintaan

Titik akhir

POST /api/workflow-engine/template-admin/{templateId}/duplicate

Contoh Permintaan

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 '{}'

Menjalankan graf workflow yang diterbitkan dari pemicu manual

Parameter

facilityId `string` (wajib) workflowId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/run

Contoh Permintaan

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 '{}'

Respons

{}

Menguji draf yang tersimpan tanpa menerbitkannya

Menjalankan graf draf saat ini dan mencatat hasilnya dengan `mode: test` dan tanpa `versionId`. Penerbitan, flag live, dan `publishedVersionId` tidak pernah diubah. Efek samping disimulasikan secara default; `sideEffects: live` juga memerlukan `confirmLiveSideEffects: true`.

Parameter

facilityId `string` (wajib) workflowId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/test

Contoh Permintaan

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 '{}'

Respons

{}

Menguji satu node workflow yang ada di daftar izin

Menjalankan satu node yang dapat diuji secara mandiri dari draf yang tersimpan. Nilai variabel dapat diambil dari langkah eksekusi yang tercatat. Metode HTTP yang mengubah data memerlukan konfirmasi eksplisit.

Parameter

facilityId `string` (wajib) workflowId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/test-node

Contoh Permintaan

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 '{}'

Respons

{}

Mencantumkan eksekusi terbaru untuk workflow

Parameter

facilityId `string` (wajib) workflowId `string` (wajib)

Titik akhir

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membaca satu eksekusi (status + langkah berurutan)

Parameter

facilityId `string` (wajib) workflowId `string` (wajib) executionId `string` (wajib)

Titik akhir

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Membatalkan Delay tertunda yang sedang ditunggu oleh eksekusi

Parameter

facilityId `string` (wajib) workflowId `string` (wajib) executionId `string` (wajib)

Titik akhir

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/cancel

Contoh Permintaan

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/cancel \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Memutar ulang eksekusi yang telah selesai dari payload pemicu yang tercatat

`mode: published` menjalankan ulang versi persis yang dikunci untuk eksekusi asli, dengan efek samping nyata. `mode: draft-test` menjalankan ulang draf saat ini sebagai pengujian simulasi. Eksekusi yang payload pemicunya terpotong saat ditulis tidak dapat diputar ulang.

Parameter

facilityId `string` (wajib) workflowId `string` (wajib) executionId `string` (wajib)

Isi Permintaan

Titik akhir

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/retry

Contoh Permintaan

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 '{}'

Respons

{}

Pencarian terindeks untuk workflow yang memuat jenis node tertentu

Parameter

nodeType `string` (wajib) facilityId `string` (opsional) organisationId `string` (opsional)

Titik akhir

GET /api/workflow-engine/master-view/{nodeType}

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/master-view/{nodeType} \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Proxy pengalihan OAuth white-label (Connected Apps)

Pengalihan 302 publik tanpa autentikasi yang meneruskan callback penyedia OAuth ke callback autentikasi platform alat upstream, dengan mempertahankan string kueri. Memungkinkan aplikasi OAuth milik PH mendaftarkan URI pengalihan performancehub.co sehingga domain vendor upstream tidak pernah muncul di bilah alamat (diperlukan untuk proyek aplikasi OAuth kustom di masa mendatang; tidak berdampak apa pun pada autentikasi terkelola).

Titik akhir

GET /guest/connected-apps/oauth-callback

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/oauth-callback \
  -H "x-api-key: YOUR_API_KEY"

Halaman penyelesaian rantai koneksi (Connected Apps)

Halaman ringan "Anda dapat menutup jendela ini" untuk tab OAuth tempat rantai koneksi berjalan. Mengirim hasilnya (suite/toolkit yang terhubung + ID akun baru, atau toolkit yang gagal) kembali ke tab marketplace melalui window.opener.postMessage dengan origin yang sama; jika hubungan dengan opener terputus, halaman beralih ke deep link ke applet ph-ai-agent yang menampilkan ulang halaman tujuan di dalam aplikasi. Hanya bersifat informatif: tidak menyimpan rahasia dan tidak melakukan penulisan apa pun.

Parameter

connected `string` (opsional) ID suite atau slug toolkit yang telah selesai terhubung (jika berhasil). accounts `string` (opsional) ID akun terhubung yang dibuat oleh rantai, dipisahkan koma. connectError `string` (opsional) Slug toolkit yang langkahnya gagal (jika gagal).

Titik akhir

GET /guest/connected-apps/finish

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/finish \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}

Callback rantai koneksi suite (Connected Apps)

Lompatan callback OAuth untuk alur koneksi suite sekali klik. JWT status yang ditandatangani (HS256, TTL 30 menit) mengodekan { clubID, deviceId, suite, toolkits, step, caids }; akun terhubung ke satu perangkat agen tersebut, dan caids mengumpulkan ID akun yang dibuat di setiap lompatan (pengalihan akhir ke applet membawanya sehingga marketplace dapat menawarkan pemberian label pada akun baru). Menandai toolkit langkah tersebut sebagai terhubung, lalu mengalihkan dengan 302 ke Connect Link toolkit berikutnya, atau ke halaman applet ph-ai-agent (dengan deep link ke agen) jika suite telah selesai. Koneksi satu toolkit dijalankan melalui handler yang sama dengan suite berisi satu toolkit.

Parameter

state `string` (wajib) JWT status rantai koneksi yang ditandatangani.

Titik akhir

GET /guest/connected-apps/connect-next

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/connect-next \
  -H "x-api-key: YOUR_API_KEY"

Memicu email penyiapan kata sandi

Memvalidasi tautan bertanda tangan dari email sambutan, memicu email pengaturan ulang kata sandi, dan menampilkan halaman konfirmasi. Tidak memerlukan autentikasi.

Parameter

email `string` (wajib) Alamat email pengguna sig `string` (wajib) Tanda tangan HMAC untuk email

Titik akhir

GET /guest/setup-password

Contoh Permintaan

curl -X GET https://portal.hub.gymsystems.co/guest/setup-password \
  -H "x-api-key: YOUR_API_KEY"

Respons

{}