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 iniTitik 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 diperbaruiTitik 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/
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
{}
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
{}
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/fasilitasTitik 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 perangkatTitik 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 perangkatTitik 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 pemindahanTitik 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
{}
Mulai menghubungkan satu aplikasi ke agen (alur OAuth Connect Link)
Memulai alur Connect Link yang dihosting untuk satu toolkit dan mengembalikan URL tujuan pengguna. Alias opsional memberi label pada akun baru (multi-akun: menghubungkan aplikasi yang sudah terhubung akan menambahkan akun LAIN, hingga 10 per aplikasi). Berjalan melalui callback berantai yang sama dengan koneksi suite (suite dengan satu toolkit), sehingga penyelesaiannya kembali ke halaman applet ph-ai-agent.
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
Contoh Permintaan
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect \
-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
{}
Mulai koneksi suite sekali klik untuk agen (alur Connect Link berantai)
Memulai alur koneksi berantai untuk seluruh suite (mis. google-workspace). URL yang dikembalikan membuka layar persetujuan toolkit pertama; setiap penyelesaian langsung mengalihkan (302) ke alur toolkit berikutnya, dan berakhir di halaman applet ph-ai-agent. Anggota yang sudah memiliki akun terhubung DILEWATI, sehingga mencoba ulang setelah kegagalan di tengah rantai akan dilanjutkan dengan aplikasi yang belum terhubung, bukan membuat akun duplikat. Jika setiap anggota sudah terhubung, seluruh rantai dijalankan lagi; itulah alur eksplisit "tambahkan 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-suite
Contoh Permintaan
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-suite \
-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 dipindaiTitik 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-nyaTitik 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 berikutnyaTitik 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 wajahTitik 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
{}
Tautkan orang yang tidak cocok ke anggota secara manual
Mengaitkan personId CCTV dengan anggota tertentu, dan menetapkan kecocokan menjadi confirmed.
Parameter
club `string` (wajib) matchId `string` (wajib)Isi Permintaan
Titik akhir
POST /api/cctv/matching/{club}/detail/{matchId}/link
Contoh Permintaan
curl -X POST https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId}/link \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
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 FasilitasTitik 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
{}
Lepaskan tautan kecocokan profil yang dipelajari otomatis
Mengembalikan kecocokan yang tertaut ke status rejected dan menghapus autoLearnedFrom pada catatan anggota.
Parameter
club `string` (wajib) matchId `string` (wajib)Isi Permintaan
Titik akhir
POST /api/cctv/matching/{club}/detail/{matchId}/unlink
Contoh Permintaan
curl -X POST https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId}/unlink \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
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 orangTitik 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 CCTVTitik 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 fasilitasIsi 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 fasilitasIsi 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.
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 KlubTitik 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 organisasiTitik 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 organisasiTitik 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 tambahanTitik 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 unggahanTitik 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 diambilTitik 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 diambilTitik 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 defaultTitik 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 responsTitik 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 dicantumkanTitik 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
{}
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 aksesTitik 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 unixTitik 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 unixTitik 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 unixTitik 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 KlubTitik 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 fasilitasTitik 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 KlubTitik 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 KlubTitik 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 KlubTitik 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 aksesTitik 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 fasilitasTitik 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 KlubTitik 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 KlubTitik 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 dicariTitik 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 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 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 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 diambilTitik 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 diambilTitik 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 paginasiTitik 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 paginasiTitik 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 menghapusnyaTitik 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 diambilTitik 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 fiturTitik 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 merekTitik 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 ditentukanTitik 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 merekTitik 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 dataTitik 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 mitraTitik 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 mitraTitik 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 LIMITEDTitik 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 mitraTitik 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 anggotaTitik 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 anggotaIsi 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/DELETETitik 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 peranTitik 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 peranTitik 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 permintaanTitik 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 organisasiTitik 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 permintaanTitik 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 laporanTitik 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 KlubTitik 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 2021Titik 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 KlubTitik 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 2021Titik 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 organisasiTitik 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 2021Titik 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-DDTitik 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 komaTitik 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 rekamanTitik 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-MMTitik 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 diambilTitik 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 dicantumkanTitik 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 diambilTitik 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 rekamanTitik 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 diambilTitik 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 organisasiTitik 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 fakturTitik 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 ACLTitik 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 diambilTitik 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 sebelumnyaTitik 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 socketTitik 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 masukTitik 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 modulTitik 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 emailTitik 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
{}