Introduzione

Benvenuto nell'API di Performance Hub. Questa API gestisce i dati del club e i sistemi chiave che si integrano con il tuo club e con i suoi sistemi esterni, e non è un'API di uso pubblico. Per ulteriori informazioni sull'uso dei vari sistemi Performance Hub supportati da questa API, consulta la voce dedicata al sistema che ti interessa nella [documentazione di Performance Hub](https://docs.performancehub.co).

URL di base

https://portal.hub.gymsystems.co

Autenticazione

I dettagli di autenticazione ti verranno forniti quando la tua integrazione sarà approvata.

Evento "turno dell'agente completato" segnalato dal dispositivo (attivazione web push)

Chiamato dal sidecar di un dispositivo Agente AI associato (mai dai browser) quando un'esecuzione dell'agente avviata dall'interfaccia web termina dopo aver superato la soglia di notifica del dispositivo. Autenticato con un JWT HS256 di breve durata per dispositivo (aud 'events'). Deduplicato per dispositivo+sessione+avvio e con limite di frequenza per dispositivo, poi recapitato alle sottoscrizioni push HTML5 dell'utente che ha avviato l'esecuzione, con un deep link alla conversazione.

Corpo della richiesta

Endpoint

POST /ai/events/agent-turn-complete

Richiesta di esempio

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

Risposta

{}

Notifica push avviata dall'agente (skill ph-notify)

Chiamato dal sidecar di un dispositivo Agente AI associato per conto dell'agente sul dispositivo (la skill ph-notify) per inviare una notifica arbitraria al browser e ai dispositivi mobili di un utente. Autenticato con un JWT HS256 di breve durata per dispositivo (aud 'events'). L'utente destinatario deve avere accesso al dispositivo (criterio di accesso per agente); se omesso, la notifica viene inviata al proprietario del dispositivo. Limite di frequenza per dispositivo, separato da quello degli eventi di turno completato.

Corpo della richiesta

Endpoint

POST /ai/events/agent-notify

Richiesta di esempio

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

Risposta

{}

Carica un'immagine di notifica (skill ph-notify)

Accetta il corpo di un'immagine non elaborata da un dispositivo associato (JWT con aud 'events') e lo archivia nel bucket pubblico notify-media con una chiave UUID non indovinabile. Gli oggetti si eliminano automaticamente dopo 7 giorni (ciclo di vita S3). Restituisce l'URL https pubblico da usare come `imageUrl` in /ai/events/agent-notify. Limite di 5 MB; solo png/jpeg/gif/webp.

Corpo della richiesta

Endpoint

POST /ai/media/notify-image

Richiesta di esempio

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

Risposta

{}

Relay MCP del dispositivo per Connected Apps (strumenti SaaS esterni)

Endpoint MCP Streamable HTTP per i dispositivi Agente AI associati (server MCP "connected_apps" sul listener :8790 del sidecar del dispositivo). Autenticato con un JWT HS256 di breve durata per dispositivo (aud 'mcp', la stessa credenziale di /mcp) e subordinato al flag di abilitazione Connected Apps dell'AGENTE (le connessioni sono per dispositivo agente, non per struttura). Le richieste vengono inoltrate in streaming al server MCP della sessione della piattaforma di strumenti a monte dell'agente, con le intestazioni di sessione inserite lato server; le credenziali a monte non raggiungono mai il dispositivo. I nomi degli strumenti e il branding del fornitore vengono resi white-label in entrambe le direzioni durante il transito. Un 401/410 a monte (sessione scaduta) attiva una ricreazione della sessione + un nuovo tentativo.

Endpoint

POST /mcp/apps

Richiesta di esempio

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

Risposta

{}

Cerca nei registri di controllo delle API (accesso al modulo IAM & Admin)

Cerca e filtra i registri di accesso alle API con funzionalità di filtro avanzate. Gli utenti possono vedere solo i registri delle organizzazioni a cui hanno accesso.

Parametri

organisationId `string` (facoltativo) ID dell'organizzazione per la verifica ACL (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/admin/audit-logs/search

Richiesta di esempio

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

Risposta

{}

Ottieni da Redis le statistiche dei registri di controllo memorizzate nella cache (accesso al modulo IAM & Admin)

Recupera le statistiche aggregate dalla cache Redis per il caricamento immediato della dashboard

Parametri

timeWindow `string` (facoltativo) Intervallo di tempo per le statistiche (predefinito 12h)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Ottieni le statistiche dei registri di controllo (accesso al modulo IAM & Admin)

Recupera le statistiche aggregate per la dashboard. Limitate alle organizzazioni dell'utente.

Parametri

startTime `number` (facoltativo) Ora di inizio (timestamp Unix), predefinita a 24 ore fa endTime `number` (facoltativo) Ora di fine (timestamp Unix), predefinita all'ora attuale

Endpoint

GET /api/admin/audit-logs/statistics

Richiesta di esempio

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

Risposta

{}

Ottieni i dati delle serie temporali dei registri di controllo (accesso al modulo IAM & Admin)

Recupera i dati delle serie temporali raggruppati in intervalli per visualizzare la sequenza temporale delle richieste

Parametri

timeWindow `string` (facoltativo) Intervallo di tempo per i dati delle serie temporali: - 1h: ultima ora (blocchi di 10 minuti) - 12h: ultime 12 ore (blocchi di 10 minuti) - 24h: ultime 24 ore (blocchi di 10 minuti) - 7d: ultimi 7 giorni (blocchi di 1 ora) - 14d: ultimi 14 giorni (blocchi di 1 ora)

Endpoint

GET /api/admin/audit-logs/timeseries

Richiesta di esempio

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

Risposta

{}

Ottieni le organizzazioni a cui l'utente ha accesso per i registri di controllo (accesso al modulo IAM & Admin)

Restituisce l'elenco delle organizzazioni di cui l'utente corrente può visualizzare i registri di controllo

Endpoint

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

Richiesta di esempio

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

Risposta

{}

La chiamata iniziale per creare un nuovo club. Nota: viene creato solo l'oggetto club 'modello'; è poi necessaria una seconda richiesta API per aggiornare il club con i suoi dati, come orari di apertura, posizione, URL dei social e così via.

Parametri

body `string` (obbligatorio) Oggetto JSON del nuovo club da aggiungere al sistema.

Endpoint

POST /api/admin/clubs/addclub

Richiesta di esempio

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

Risposta

{}

Aggiunge un nuovo utente al sistema

Parametri

body `string` (obbligatorio) Oggetto JSON con i dati dell'utente che vuoi aggiungere o aggiornare.

Endpoint

POST /api/users

Richiesta di esempio

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

Risposta

{}

Elenca tutti gli utenti (account Google Apps) che hanno accesso al sistema o all'API di backoffice

Endpoint

GET /api/admin/users/listusers

Richiesta di esempio

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

Risposta

{}

Elenca le chiavi MCP di un utente (oscurate). Gli utenti possono elencare le proprie chiavi.

Parametri

userId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Crea una nuova chiave API MCP per un utente. Gli utenti possono creare le proprie chiavi.

Parametri

userId `string` (obbligatorio) body `object` (facoltativo)

Endpoint

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

Richiesta di esempio

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

Revoca o rimuove una chiave API MCP. Gli utenti possono eliminare le proprie chiavi.

Parametri

userId `string` (obbligatorio) keyId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Rimuove un ruolo da un utente

Parametri

userId `string` (facoltativo) L'email dell'utente da cui vuoi rimuovere il ruolo. roleId `string` (facoltativo) L'ID del ruolo che vuoi rimuovere dall'utente.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiorna i dettagli del profilo di un utente esistente (firstName, lastName, phoneNumber)

Parametri

userId `string` (obbligatorio) Indirizzo email dell'utente body `object` (obbligatorio) Dati del profilo utente da aggiornare

Endpoint

PATCH /api/users/{userId}

Richiesta di esempio

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

Risposta

{}

Crea o aggiorna un ruolo utente

Parametri

body `object` (facoltativo)

Endpoint

PUT /api/users/{userId}/roles

Richiesta di esempio

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

Risposta

{}

Live Services in esecuzione sull'Agente AI di una struttura (selettore di pubblicazione)

Recupera tramite il tunnel i Live Services rilevati dal bridge del dispositivo per il selettore "Publish to Performance Hub" dell'applet. Richiede il modulo ph-ai-agent E l'accesso 'open' per dispositivo (lo stesso requisito della pubblicazione). Ogni servizio viene annotato con publishedAppId quando esiste già una Custom App per la sua porta.

Parametri

club `string` (obbligatorio) device `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Indice dei nomi delle icone MDI incorporato nell'Agente AI di una struttura (selettore di icone)

Inoltra tramite il tunnel l'indice delle icone MDI incorporato nel bridge del dispositivo (GET /__services/icons/mdi/index.json). Il selettore di pubblicazione e modifica usa il catalogo incluso nell'applet (stessa versione fissata 7.4.47); gli SVG delle app pubblicate vengono risolti dal pacchetto locale @mdi/js di portal-server. Stesso requisito di accesso del selettore dei servizi (modulo ph-ai-agent + accesso 'open' per dispositivo).

Parametri

club `string` (obbligatorio) device `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Recupera un gruppo di SVG di icone MDI dall'Agente AI di una struttura (anteprime del selettore)

Risolve in una sola chiamata fino a 60 glifi MDI per nome dal set di icone incorporato nel dispositivo, sanificati lato server con la stessa allowlist applicata alle icone delle app salvate. Usato dal selettore di icone per mostrare i risultati della ricerca; i nomi sconosciuti restituiscono null.

Parametri

club `string` (obbligatorio) device `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Ambiti di destinatari in cui il richiedente può pubblicare da questa struttura

L'insieme di destinatari che chi pubblica può concedere, per il selettore di pubblicazione e modifica: le strutture raggiunte dai suoi ruoli ph-ai-agent (ambito multi-struttura), più l'indicazione se dispone del livello di organizzazione richiesto per destinatari a livello di intero brand o intera organizzazione nel brand o nell'organizzazione di questa struttura. Le stesse regole vengono applicate di nuovo lato server in fase di pubblicazione o aggiornamento (validatePublishAudience): questo endpoint definisce solo l'interfaccia.

Parametri

club `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Completamento automatico dei colleghi per i destinatari di un'app con utenti specifici

Cerca SOLO tra gli utenti che il richiedente può già vedere, ovvero le persone i cui ruoli coincidono con almeno una struttura, regione od organizzazione dell'accesso ph-ai-agent del richiedente. Una query di almeno 2 caratteri e un limite di 10 risultati rendono l'endpoint inutilizzabile per lo scraping; lo stesso insieme di utenti raggiungibili viene applicato di nuovo lato server quando i destinatari vengono salvati.

Parametri

club `string` (obbligatorio) q `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Pubblica un Live Service dell'Agente AI come Custom App di Performance Hub

Registra un'app web ospitata dall'Agente AI della struttura (un Live Service rilevato dal bridge) come voce "Custom Apps" del menu laterale per i destinatari scelti. Richiede il modulo ph-ai-agent in questa struttura E l'accesso 'open' per dispositivo; i destinatari sono limitati dagli ambiti dei ruoli di chi pubblica (non puoi mai pubblicare oltre ciò che puoi raggiungere). L'identità del servizio viene risolta IN TEMPO REALE dall'elenco /__services del dispositivo; lo schema http/https non viene mai salvato.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Custom App pubblicate visibili in questa struttura

Restituisce le app pubblicate attive i cui destinatari includono questa struttura, nel formato mostrato dal menu laterale (appId, name, icon, description). I destinatari vengono risolti di nuovo in tempo reale a ogni chiamata, quindi le modifiche all'accesso hanno effetto immediato.

Parametri

club `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

App pubblicate gestite da questa struttura (vista di chi pubblica)

Righe complete delle app la cui struttura di ORIGINE è questo club, per l'elenco di gestione "Published Apps" dell'applet. Ogni riga è annotata con canManage per l'utente richiedente (chi pubblica).

Parametri

club `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Genera un token di visualizzazione limitato al servizio per una Custom App pubblicata

Restituisce un URL firmato di breve durata + token che il browser usa per aprire UNA app pubblicata direttamente sul gateway relay regionale del dispositivo. Il token contiene un claim svc che indica la porta del servizio, quindi il gateway limita la sessione a /__services/proxy//: la chat o il terminale dell'agente non sono mai raggiungibili con esso. Chi visualizza deve avere il modulo custom-apps in una struttura inclusa nei destinatari dell'app; NON servono il modulo ph-ai-agent né l'accesso all'agente per dispositivo.

Parametri

club `string` (obbligatorio) appId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Riferimento di assistenza per una Custom App pubblicata (contatto del proprietario)

Chi fornisce assistenza per questa app pubblicata da un utente: l'email di chi l'ha pubblicata (in alternativa, il proprietario dell'agente che la ospita). Viene mostrato nei pannelli offline o di errore di chi visualizza, così le richieste di assistenza vanno al proprietario dell'app anziché a Performance Hub: le app pubblicate non rientrano nell'assistenza principale di PH. Prima vengono ricontrollati i destinatari dell'app; chi non ha mai ricevuto l'app in condivisione non ottiene alcuna informazione. Le app in pausa vengono comunque risolte (i proprietari rispondono anche alle domande "perché è in pausa?").

Parametri

club `string` (obbligatorio) appId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Invia via email una richiesta di assistenza al proprietario di una Custom App pubblicata

Invia il messaggio di chi visualizza al contatto di assistenza dell'app (chi l'ha pubblicata o, in alternativa, il proprietario dell'agente) come email con il marchio: A il proprietario, CC chi visualizza (come copia della richiesta), Rispondi a chi visualizza, così il proprietario gli risponde direttamente. Le app pubblicate sono gestite dagli utenti, quindi la loro assistenza resta fuori dalla coda di Performance Hub. I destinatari vengono ricontrollati; una richiesta per utente per app ogni 15 minuti (cooldown Redis, fail-open).

Parametri

club `string` (obbligatorio) appId `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiorna una Custom App pubblicata (nome, icona, descrizione, stato, destinatari)

Solo per chi pubblica. Le modifiche ai destinatari vengono riconvalidate rispetto agli ambiti dei ruoli di CHI MODIFICA, con le stesse regole di limitazione della pubblicazione. Lo stato alterna tra attivo e in pausa (le app in pausa spariscono dai menu e rifiutano la generazione di token).

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Annulla la pubblicazione di una Custom App (eliminazione logica)

Solo per chi pubblica. Elimina logicamente la riga del registro: l'app sparisce subito dai menu e la generazione di token di visualizzazione viene rifiutata; le sessioni del gateway già emesse scadono alla scadenza del token.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Trasferisci la proprietà di una Custom App pubblicata

Rispecchia il flusso di riassegnazione del proprietario dell'Agente AI: chi ha pubblicato l'app o un proprietario dell'account (modulo di fatturazione) può cederla a un altro utente, che poi la gestisce. Il nuovo proprietario deve avere accesso alla struttura nel club di origine dell'app.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Esportazioni di skill preparate sull'Agente AI di una struttura (selettore di condivisione)

Inoltra tramite il tunnel l'elenco delle esportazioni preparate dal bridge del dispositivo (GET /__skills/exports) per il selettore "Share a skill" dell'applet. Le esportazioni vengono preparate dal controllo di sicurezza e portabilità ph-skill-sharing sul dispositivo; ogni voce riporta l'esito della scansione lato dispositivo. Richiede il modulo ph-ai-agent E l'accesso 'open' per dispositivo (lo stesso requisito della pubblicazione).

Parametri

club `string` (obbligatorio) device `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Pubblica un'esportazione di skill preparata come NUOVA skill condivisa (versione bozza)

Scarica tramite il tunnel il tarball dell'esportazione preparata indicata dal bridge del dispositivo, lo estrae in memoria (path traversal, link simbolici e dimensioni eccessive vengono rifiutati), esegue la scansione di sicurezza deterministica lato cloud, crea il manifest dal frontmatter di SKILL.md, archivia il tarball indirizzato per contenuto nel bucket privato delle skill e crea l'intestazione della skill + una versione BOZZA. Se la scansione blocca, non viene salvato NULLA e vengono restituiti i risultati. I destinatari sono limitati dagli ambiti dei ruoli di chi pubblica. Invia la bozza (POST submit) per pubblicarla.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Pubblica un'esportazione preparata come NUOVA VERSIONE di una skill condivisa esistente

Stessa pipeline della pubblicazione, applicata a una skill esistente: il nome in SKILL.md dell'esportazione deve corrispondere alla skill, la versione deve essere nuova (le versioni sono immutabili) ed è obbligatorio un changelog. Solo chi ha pubblicato la skill può aggiungere versioni. Se la scansione blocca, viene salvata una riga di versione con stato 'rejected' (solo il report, nessun artefatto), così i risultati compaiono nella cronologia di chi pubblica.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Report di scansione completo (+ revisione LLM) per una versione della skill

L'elenco completo dei risultati per una versione, solo per chi pubblica e per gli amministratori dell'organizzazione (revisioni per l'approvazione); chi installa vede invece i conteggi riepilogativi nel dettaglio della skill.

Parametri

club `string` (obbligatorio) skillId `string` (obbligatorio) version `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Invia una versione bozza della skill (pubblicazione o messa in coda per l'approvazione)

Fa avanzare una versione bozza secondo la governance dell'organizzazione. Se l'organizzazione ha attivato la revisione LLM, viene eseguita prima la revisione delle istruzioni (best-effort; un verdetto 'fail' rifiuta, un verdetto 'flag' impone la coda di approvazione). Le condivisioni a livello di struttura vengono pubblicate subito, a meno che la governance non richieda l'approvazione; le condivisioni nella libreria dell'organizzazione (destinatari a livello di brand o organizzazione) richiedono l'approvazione per impostazione predefinita. La pubblicazione imposta il latestVersion della skill: le installazioni con criterio 'auto' la recepiscono al successivo ciclo di riconciliazione.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Ritira una skill condivisa (la rimuove dalla libreria)

Solo per chi pubblica. La skill sparisce subito dalla libreria e rifiuta nuove installazioni; le installazioni ESISTENTI continuano a funzionare: il ritiro riguarda solo l'elenco, non è un interruttore di disattivazione.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Modifica la scheda di una skill condivisa (nome visualizzato, descrizione, icona)

Solo per chi pubblica. Campi solo di presentazione: il nome canonico della skill ne costituisce l'identità (manifest, directory di installazione, corrispondenza delle versioni) e non cambia mai. Una stringa vuota riporta un campo a null (si torna al nome canonico o a nessuna icona). Le icone usano il catalogo MDI (mdi:icon-name), lo stesso formato delle app dell'agente pubblicate.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Trasferisci la proprietà di una skill condivisa

Rispecchia il flusso di trasferimento delle app pubblicate: chi ha pubblicato la skill o un proprietario dell'account (modulo di fatturazione) può cederla a un altro utente, che poi ne gestisce le versioni e la scheda. Il nuovo proprietario deve avere accesso alla struttura nel club di origine della skill.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Libreria delle skill visibile in questa struttura (filtrata per destinatari)

Skill attive con almeno una versione pubblicata i cui destinatari includono questa struttura (o indicano chi visualizza), annotate con il riepilogo dell'ultima versione pubblicata e la diffusione nell'organizzazione (strutture distinte, mai il numero grezzo di installazioni). I destinatari vengono risolti di nuovo in tempo reale a ogni chiamata.

Parametri

club `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Dettaglio della skill (versioni, requisiti, riepilogo della scansione, diffusione)

Dettaglio completo di una skill della libreria: cronologia delle versioni con changelog e riepiloghi delle scansioni (gli elenchi di endpoint per versione alimentano il confronto delle scansioni negli aggiornamenti), requisiti dichiarati nel manifest, provenienza di chi pubblica e indicatore di diffusione basato sul numero di strutture. I destinatari vengono ricontrollati: chi non ha mai ricevuto la skill in condivisione non ottiene alcuna informazione (chi pubblica e gli amministratori dell'organizzazione la vedono sempre).

Parametri

club `string` (obbligatorio) skillId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Skill pubblicate da questa struttura (elenco di gestione di chi pubblica)

Righe complete delle skill la cui struttura di ORIGINE è questo club, ciascuna annotata con canManage per l'utente richiedente e con il riepilogo dell'ultima versione (incluse bozze e approvazioni in sospeso: è la vista di lavoro di chi pubblica).

Parametri

club `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Installa una skill della libreria sull'Agente AI di una struttura

Soggetto a governance: gli installSources dell'organizzazione devono consentirlo, i destinatari della skill devono includere questa struttura (o indicare il richiedente), la versione deve essere pubblicata e il richiedente deve soddisfare il livello whoCanInstall per il dispositivo di destinazione (proprietario / utente autorizzato / amministratore della struttura / amministratore dell'organizzazione; vedi governance). Scrive la riga del ciclo di vita dell'installazione (la fonte attendibile) ed esegue subito un invio best-effort; il cron di riconciliazione garantisce la consegna non appena il dispositivo è raggiungibile.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Approva un aggiornamento della skill in sospeso per un'installazione

Porta il desiredVersion dell'installazione all'ultima versione pubblicata (il passaggio manuale dei criteri 'notify' e 'pinned', e il percorso previsto quando la governance imposta updatePosture su 'approvalRequired'). Mantiene la versione corrente come destinazione del ripristino in un passaggio e rimuove l'eventuale blocco degli aggiornamenti successivo a un ripristino (skipVersion). Stesso livello di autorizzazione whoCanInstall dell'installazione.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Riporta una skill installata alla versione precedente

Imposta desiredVersion sul previousVersion della riga di installazione (conservato a ogni cambio di versione) e lascia che il normale percorso di consegna la reinstalli. In un solo passaggio: le versioni si scambiano, quindi ripristinando due volte torni al punto di partenza. Blocca anche gli aggiornamenti (skipVersion = la versione da cui si è tornati indietro), così i criteri auto/notify mantengono il ripristino; il blocco si rimuove quando viene pubblicata una versione strettamente più recente, con update-approve o con set-policy.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Disinstalla una skill dall'Agente AI di una struttura

Contrassegna la riga di installazione come pending-uninstall e invia lo stato desiderato; la riga viene eliminata quando il dispositivo conferma la rimozione (verifica di riconciliazione). Stesso livello di autorizzazione whoCanInstall dell'installazione.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Imposta il criterio di aggiornamento per installazione di una skill su un dispositivo

auto (la riconciliazione applica automaticamente le nuove versioni pubblicate, a meno che l'updatePosture dell'organizzazione non richieda l'approvazione), notify (il proprietario riceve una notifica per ogni nuova versione e la applica manualmente) o pinned (non cambia mai senza un update-approve esplicito). La modifica del criterio rimuove l'eventuale blocco degli aggiornamenti successivo a un ripristino (skipVersion). Stesso livello di autorizzazione whoCanInstall dell'installazione.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Installazioni di skill sull'Agente AI di una struttura (scheda Skills)

Le righe del ciclo di vita delle installazioni per un dispositivo, ciascuna annotata con i campi della scheda della skill e con l'indicazione se esiste una versione pubblicata più recente. Richiede l'accesso 'open' per dispositivo (la scheda Skills si trova nel pannello dell'agente).

Parametri

club `string` (obbligatorio) device `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Versioni di skill in attesa di approvazione nell'organizzazione di questa struttura

La coda di approvazione degli amministratori dell'organizzazione: ogni versione in attesa di approvazione tra le skill dell'organizzazione, con la scheda della skill e i riepiloghi della scansione e della revisione LLM. Solo per gli amministratori dell'organizzazione.

Parametri

club `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Approva una versione di skill in sospeso (la pubblica)

Solo per gli amministratori dell'organizzazione. La versione viene pubblicata, il latestVersion della skill si aggiorna e chi l'ha pubblicata riceve una notifica. Le installazioni con criterio 'auto' recepiscono la versione al successivo ciclo di riconciliazione.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Rifiuta una versione di skill in sospeso

Solo per gli amministratori dell'organizzazione. La versione viene rifiutata con la motivazione del revisore e chi l'ha pubblicata riceve una notifica: può correggere i problemi rilevati e inviare una nuova versione (le versioni sono immutabili).

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Governance effettiva delle skill dell'agente per l'organizzazione di questa struttura

Il criterio salvato per l'organizzazione, unito alle impostazioni predefinite della piattaforma (un'organizzazione senza riga salvata vede solo le impostazioni predefinite). Solo per gli amministratori dell'organizzazione.

Parametri

club `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiorna la governance delle skill dell'agente per l'organizzazione di questa struttura

Aggiornamento parziale: cambiano solo i campi forniti; tutto il resto mantiene il valore salvato o predefinito. Solo per gli amministratori dell'organizzazione. Le sostituzioni per dispositivo si trovano nella riga di registrazione e si gestiscono tramite le route di configurazione del dispositivo esistenti.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Ottieni i dati ambientali di una struttura

Restituisce le condizioni meteo attuali, inclusi alba e tramonto (tramite Open-Meteo), e la temperatura interna della struttura (dai sensori Duress) per il club specificato. Memorizzato nella cache Redis per 30 minuti.

Parametri

clubId `string` (obbligatorio) ID interno del club o della struttura

Endpoint

GET /api/clubs/{clubId}/environment

Richiesta di esempio

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

Risposta

{}

Aggiunge o associa un dispositivo IoT generico a un club.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi aggiungere il dispositivo. body `string` (obbligatorio) Oggetto JSON del nuovo schermo da associare.

Endpoint

POST /api/devices/addGenericDevice/{club}

Richiesta di esempio

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

Risposta

{}

Rimuovi un display screen e ripristinane le impostazioni di fabbrica

Rimuove l'associazione attiva dello schermo con la struttura e predispone un ripristino delle impostazioni di fabbrica persistente. Uno schermo spento applica il ripristino alla successiva accensione e riconnessione, poi torna alla pagina di associazione HDMI. I record storici di fatturazione vengono conservati.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Associa un controller per porte a una struttura.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiorna le impostazioni del controller per porte di una struttura.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Dismette un controller per porte da una struttura.

Parametri

club `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce la configurazione dei relè di un controller per porte.

Parametri

uuid `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce i metadati del dispositivo

Parametri

uuid `string` (obbligatorio) ID univoco del dispositivo

Endpoint

GET /api/devices/metadata/{uuid}

Richiesta di esempio

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

Risposta

{}

Restituisce i metadati del dispositivo. La risposta è la riga dei metadati al livello principale (formato legacy) più `detectedType` (camera | ai-edge-processor | door-controller | ph-ai-agent | null) e `online` (true se aggiornato negli ultimi 5 minuti).

Parametri

deviceSerialNumber `string` (obbligatorio) Numero di serie del dispositivo

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce i dati Smart Club del club.

Parametri

club_id `string` (obbligatorio) ID interno del club a cui vuoi aggiungere il dispositivo.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce tutti i dispositivi associati a un singolo club.

Parametri

club `string` (obbligatorio) ID interno del club di cui vuoi elencare i dispositivi.

Endpoint

GET /api/devices/list/{club}

Richiesta di esempio

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

Risposta

{}

Restituisce tutte le release (versioni) delle applicazioni per i nostri dispositivi balena.

Endpoint

GET /api/devices/listReleases

Richiesta di esempio

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

Risposta

{}

Sposta un dispositivo in una nuova struttura (club) e aggiorna i sistemi correlati.

Parametri

club `string` (obbligatorio) ID della struttura di origine (il club in cui si trova attualmente il dispositivo) body `object` (obbligatorio) Parametri dello spostamento

Endpoint

POST /api/devices/move/{club}

Richiesta di esempio

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

Risposta

{}

Tenta di stabilire una connessione con il router di una struttura selezionando il dispositivo più adatto all'interno del club e inviando un comando MQTT per creare un tunnel.

Parametri

facilityID `string` (obbligatorio) ID interno della struttura per cui si tenta la connessione al router.

Endpoint

GET /api/devices/openRouterWebpage/{facilityID}

Richiesta di esempio

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

Risposta

{}

Catalogo dei Cloud Agent (zone, dimensioni, prezzi di vendita aggiornati)

Parametri

club `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Preventivo per un Cloud Agent (software + hosting)

Endpoint

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

Richiesta di esempio

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

Avvia un Cloud Agent (mette in coda il provisioning + associazione automatica)

Endpoint

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

Richiesta di esempio

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

Stato del processo del Cloud Agent

Endpoint

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

Richiesta di esempio

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

Elimina definitivamente un Cloud Agent (VM + balena + registrazione)

Endpoint

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

Richiesta di esempio

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

Risolvi una rimozione di un Cloud Agent in sospeso (riprova il backup, elimina senza backup o annulla)

Endpoint

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

Richiesta di esempio

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

Elenca le Connected Apps di un agente (suite + app con account collegati)

Restituisce lo stato delle Connected Apps dell'agente: il flag di attivazione, i riepiloghi per suite (Google Workspace, Microsoft 365) e il catalogo selezionato di app con gli account collegati di ciascuna (multi-account: un agente può avere più account per app, ciascuno con un alias facoltativo), risolti dalla sessione upstream dell'agente.

Parametri

facilityId `string` (obbligatorio) deviceId `string` (obbligatorio) Il balena UUID del dispositivo dell'agente.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Catalogo completo del marketplace delle Connected Apps per un agente

Restituisce ogni app collegabile (il catalogo completo dei toolkit con autenticazione gestita, memorizzato nella cache lato server per circa 12 ore) con i livelli in evidenza e suite e gli account collegati dell'agente per ogni app, più i riepiloghi per suite e le richieste di collegamento in sospeso dell'agente: un unico payload per il marketplace delle app con ricerca lato client.

Parametri

facilityId `string` (obbligatorio) deviceId `string` (obbligatorio) Il balena UUID del dispositivo dell'agente.

Endpoint

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

Richiesta di esempio

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"

Risposta

{}

Ignora una richiesta di collegamento dell'agente in sospeso

Contrassegna come ignorata la richiesta di collegamento in sospeso dell'agente per un toolkit (scompare dalla sezione "Requested by your agent" del marketplace). Idempotente: ignorare una richiesta non in sospeso non ha alcun effetto.

Parametri

facilityId `string` (obbligatorio) deviceId `string` (obbligatorio) Il balena UUID del dispositivo dell'agente.

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Attiva o disattiva le Connected Apps per un agente

Salva l'interruttore delle Connected Apps dell'agente e invia la variabile di dispositivo Balena PH_APPS_MCP_ENABLED solo a quel dispositivo (best-effort: il vero blocco sul relay MCP è il flag lato PH).

Parametri

facilityId `string` (obbligatorio) deviceId `string` (obbligatorio) Il balena UUID del dispositivo dell'agente.

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Payload di preparazione al collegamento per un'app (modalità, campi delle credenziali, guida alla configurazione)

Tutto ciò che serve alla finestra di collegamento prima di avviare una connessione: come si collega l'app (oauth = flusso di consenso ospitato, credentials = modulo nel prodotto), i campi delle credenziali da raccogliere in modalità credentials e la guida alla configurazione nel prodotto (scritta per le app prioritarie, altrimenti generata dai metadati dei campi dell'app, mai un link a documentazione esterna). Le app OAuth bring-your-own indicano anche se l'app OAuth del cliente è già registrata per QUESTO agente (byoConfigured) e l'URL di reindirizzamento da registrare presso il provider.

Parametri

facilityId `string` (obbligatorio) deviceId `string` (obbligatorio) Il balena UUID del dispositivo dell'agente. toolkit `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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"

Risposta

{}

Collega un'app con credenziali fornite dall'utente (chiave API e così via, senza OAuth)

Crea un account collegato per un'app in modalità credentials direttamente dal modulo nel prodotto, senza flusso di consenso ospitato. I campi delle credenziali provengono dal payload connect-info dell'app; tutti i campi obbligatori devono essere forniti. Le credenziali vengono convalidate con il provider, se supportato (best-effort: alcune app rifiutano una chiave errata solo alla prima chiamata a uno strumento da parte dell'agente). Un alias facoltativo identifica il nuovo account (multi-account: collegare un'app già collegata aggiunge UN ALTRO account).

Parametri

facilityId `string` (obbligatorio) deviceId `string` (obbligatorio) Il balena UUID del dispositivo dell'agente.

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Registra l'app OAuth del cliente per un'app BYO e avvia il relativo flusso di collegamento

Per le app OAuth bring-your-own (Xero, Shopify, ...): prende il client ID e il client secret dell'app OAuth che il cliente ha creato presso il provider (seguendo la guida alla configurazione dell'app), la registra per QUESTO agente (il secret viene salvato solo presso la piattaforma di integrazione upstream, mai in Performance Hub) e avvia subito il flusso di accesso ospitato con quell'app. Restituisce l'URL di consenso a cui indirizzare l'utente, con lo stesso contratto dell'endpoint di collegamento. Un nuovo invio sostituisce l'app registrata dell'agente (ad es. dopo la rotazione del secret): gli account collegati esistenti continuano a funzionare.

Parametri

facilityId `string` (obbligatorio) deviceId `string` (obbligatorio) Il balena UUID del dispositivo dell'agente.

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Scollega un account collegato da un agente

Elimina un singolo account collegato (multi-account: gli altri account della stessa app restano collegati). Prima dell'eliminazione si verifica che l'account appartenga a questo agente; se era l'ULTIMO account dell'app, il toolkit viene rimosso dall'insieme collegato dell'agente (la sessione viene ricreata in modo differito, così l'elenco degli strumenti dell'agente si aggiorna).

Parametri

facilityId `string` (obbligatorio) deviceId `string` (obbligatorio) Il balena UUID del dispositivo dell'agente.

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Rinomina (cambia l'alias di) uno degli account collegati di un agente

Imposta l'alias visualizzato di un singolo account collegato. Gli alias vengono normalmente impostati in automatico dopo OAuth (in base all'identità che ha effettuato l'accesso); questo endpoint supporta la ridenominazione manuale nella finestra dei dettagli dell'app. Un alias vuoto cancella l'etichetta. Prima dell'aggiornamento upstream si verifica che l'account appartenga a questo agente.

Parametri

facilityId `string` (obbligatorio) deviceId `string` (obbligatorio) Il balena UUID del dispositivo dell'agente.

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Attiva o disattiva un servizio integrato di Performance Hub per un agente

Attiva o disattiva per questo agente un servizio integrato sempre attivo (Smart Search, Weather, ...). I servizi integrati non richiedono collegamento né OAuth: sono inclusi in ogni agente e attivi per impostazione predefinita; questo interruttore salva l'impostazione specifica per l'agente e ricrea subito la sessione upstream dell'agente, così l'insieme degli strumenti si aggiorna. Nota che l'interruttore separato "External apps" (la route /enable) disattiva completamente l'intero server MCP delle app: quando è disattivato, anche i servizi integrati non sono disponibili, indipendentemente dai singoli interruttori.

Parametri

facilityId `string` (obbligatorio) deviceId `string` (obbligatorio) Il balena UUID del dispositivo dell'agente. slug `string` (obbligatorio) Slug del servizio integrato.

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Associa un dispositivo Agente AI a una struttura

Associazione basata prima sui metadati. Cerca il dispositivo per numero di serie nei metadati in tempo reale dei dispositivi, richiede che sia online, poi crea la riga di registrazione se necessario, assegna una regione di relay Chisel + porta del tunnel + secret, registra quello slot sul relay e invia al dispositivo la configurazione della struttura e del tunnel tramite Balena. Ai nuovi dispositivi viene inoltre assegnato un account di servizio MCP predefinito (attivo, limitato a questa struttura, con tutte le funzionalità); una nuova associazione mantiene qualsiasi autorizzazione MCP esistente. Le impostazioni avanzate facoltative sostituiscono i valori predefiniti applicati al momento dell'associazione (configurazione del backup, MCP attivo/disattivo, restrizione di accesso) e `restoreFrom` inizializza il nuovo dispositivo dal backup cloud di un altro dispositivo della struttura (origine attiva o dismessa; mette in coda un ripristino tra repository, restituito come `restoreRequest` per monitorarne l'avanzamento).

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Elenca i dispositivi Agente AI di una struttura

Restituisce i dispositivi Agente AI della struttura con lo stato online e del tunnel in tempo reale (usato dal selettore di dispositivi dell'applet).

Parametri

club `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiornamento + stato online dell'Agente AI

Indica se il dispositivo è online, se è disponibile o in sospeso un aggiornamento e la release proposta (la versione fissata per la flotta, se la flotta è fissata; la più recente installata correttamente, se la flotta segue l'ultima versione).

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Stato in tempo reale + metriche del dispositivo Agente AI

Restituisce un'istantanea selezionata per la barra delle metriche e il pannello di gestione dell'applet: campi di identità + registrazione, attività + connessione, versioni software e le ultime metriche dell'heartbeat (CPU, temperatura, memoria, archiviazione per punto di montaggio, tempo di attività, rete). Unisce il beacon dei metadati del dispositivo + lo stato di aggiornamento Balena; una delle due parti può mancare in caso di interruzione temporanea.

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Descrizione generata dall'AI per il report sullo stato del dispositivo

Restituisce una breve spiegazione, destinata all'operatore, dei problemi di stato attualmente rilevati. I fatti e i passaggi della procedura sono sempre in device-status; questo paragrafo aggiuntivo è best-effort e può essere null.

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Genera un token di accesso diretto al relay per un Agente AI

Restituisce un URL firmato di breve durata che il browser usa per connettersi DIRETTAMENTE al gateway relay regionale del dispositivo (evitando il passaggio globale da PH/Sydney), più il token HS256. PH resta l'autorità (Google SSO + controlli di modulo e struttura qui); il relay-gateway verifica il token. Il proxy /ai-agent-ui resta l'alternativa.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Invia un messaggio di chat in una sessione dell'Agente AI (risposta diretta dalla notifica)

Relay lato server usato dall'azione di risposta diretta della notifica web push: il service worker invia qui un POST (stessa origine, cookie SSO), così la risposta funziona anche senza schede di Performance Hub aperte. PH risolve la destinazione relay del dispositivo (stessa ricerca del proxy /ai-agent-ui), imposta x-ph-user per l'attribuzione del turno (la notifica push di completamento torna a questo utente) e inoltra a /api/chat/start del dispositivo con l'ID della sessione.

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Leggi le impostazioni di controllo degli accessi di un Agente AI (proprietario)

Restituisce il blocco di accesso del dispositivo (modalità, allowlist, visibilità, interruttore dell'assistenza PH) più le eventuali richieste di accesso in sospeso. Leggibile dal proprietario del dispositivo; gli altri utenti ricevono 403.

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiorna le impostazioni di controllo degli accessi di un Agente AI (proprietario)

Scrittura della modalità (org/restricted), dell'allowlist con restrizioni, della visibilità dell'elenco (all/admins) e dell'interruttore "Permit access from Performance Hub Support". Consentita al proprietario del dispositivo. Il proprietario stesso si può cambiare solo tramite reallocate-owner. Le richieste di accesso approvate sono persistenti: i richiedenti ancora approvati vengono aggiunti di nuovo all'allowlist salvata; rimuoverne uno dall'elenco inviato ne revoca l'approvazione (la richiesta passa a rifiutata; potrà richiedere di nuovo).

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Riassegna il proprietario di un Agente AI

Riassegna la proprietà del dispositivo a un altro utente di Performance Hub. Riservato ai proprietari dell'account (accesso al modulo di fatturazione SaaS): la soluzione di emergenza quando il proprietario di un agente con restrizioni lascia l'organizzazione. Ricevono una notifica sia il proprietario precedente sia quello nuovo (in-app + push + email).

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Elenco degli utenti della struttura per i selettori dell'allowlist e del proprietario dell'Agente AI

Restituisce email + nome (+ flag isOrgAdmin) di ogni utente il cui ruolo dà accesso a QUESTA struttura. Riservato al proprietario del dispositivo e a chi può riassegnarlo (proprietario dell'account), così gli utenti normali non possono elencare la base utenti.

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Richiedi l'accesso a un Agente AI con restrizioni

Crea (o riapre) la richiesta di accesso del richiedente per un dispositivo con restrizioni; idempotente per utente+dispositivo. Il proprietario riceve una notifica in-app, web push ed email con un deep link al modulo dell'agente.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Approva o rifiuta una richiesta di accesso a un Agente AI (proprietario)

Gestione di una richiesta in sospeso da parte del proprietario del dispositivo. L'approvazione aggiunge il richiedente all'allowlist del dispositivo; in entrambi i casi il richiedente riceve una notifica (in-app + push + email).

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Consenti + applica un aggiornamento dell'Agente AI

Fissa il dispositivo sulla release proposta (la versione fissata per la flotta o, se la flotta segue l'ultima versione, la più recente installata correttamente) e rilascia il blocco degli aggiornamenti, così il supervisor balena la applica. Lo stato sul volume dati del dispositivo viene mantenuto dopo l'aggiornamento.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Pianifica un aggiornamento dell'Agente AI per più tardi

Salva un orario di installazione pianificato nella registrazione del dispositivo. Un processo di backend ricorrente (ogni 5 minuti) applica l'aggiornamento (fissaggio + sblocco) una volta superato l'orario pianificato. La pianificazione sostituisce qualsiasi pianificazione esistente per il dispositivo.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Annulla un aggiornamento pianificato dell'Agente AI

Cancella l'installazione pianificata in sospeso per il dispositivo (nessun effetto se non c'è nulla di pianificato).

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Esegui un comando remoto su un dispositivo Agente AI

Pubblica un comando MQTT consentito (riavvio, riavvio di un container, blocco/sblocco degli aggiornamenti, gestione del Wi-Fi) al device-controller in esecuzione sull'Agente AI. Il dispositivo deve essere associato alla struttura.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiorna la configurazione di un Agente AI relativa alla struttura

Salva le impostazioni modificabili dall'operatore per un Agente AI associato: il nome del dispositivo, la posizione fisica del dispositivo e la cadenza del riavvio programmato. La pianificazione del riavvio viene inviata anche al dispositivo come variabile d'ambiente Balena REBOOT_DEVICE (alle 2 ora locale), in linea con il comportamento di Display Screens.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Strutture in cui è possibile spostare un Agente AI di questa struttura

Restituisce le strutture della stessa organizzazione a cui l'utente connesso può accedere (esclusa la struttura corrente), per il selettore "Sposta in un'altra struttura". Lo spostamento vero e proprio viene eseguito da POST /api/devices/move/:club, che applica lato server le stesse regole su stessa organizzazione e accesso alla destinazione.

Parametri

club `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

L'insieme di accessi MCP che il richiedente può concedere agli Agenti AI di una struttura

Restituisce ciò che l'utente connesso può concedere a un account di servizio MCP di un Agente AI nell'organizzazione di questa struttura: le strutture/regioni rientranti nel proprio accesso, se può concedere un ambito a livello di organizzazione, l'insieme dei moduli di cui dispone e il catalogo completo degli strumenti MCP (per la maschera avanzata per singolo strumento). L'interfaccia lo usa affinché gli utenti vedano solo opzioni comprese nelle proprie autorizzazioni; l'endpoint POST mcp-access applica la stessa attenuazione lato server.

Parametri

club `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Ottieni la configurazione dell'account di servizio MCP di un Agente AI

Restituisce la configurazione di accesso MCP del dispositivo (ambito, moduli, maschera degli strumenti, campi di audit).

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Configura l'account di servizio MCP di un Agente AI

Salva la configurazione di accesso MCP del dispositivo con attenuazione al momento della concessione. I richiedenti possono concedere solo strutture/regioni rientranti nel proprio accesso, l'ambito di organizzazione solo se hanno un ruolo a livello di organizzazione e solo i moduli di cui dispongono nell'organizzazione della struttura. Il flag enabled viene inviato anche al dispositivo come variabile d'ambiente Balena PH_MCP_ENABLED.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Ottieni la configurazione VPN di un Agente AI (oscurata)

Restituisce il flag di supporto VPN del dispositivo e l'elenco delle connessioni. Il contenuto dei profili e i valori delle credenziali non vengono mai restituiti: solo i metadati dell'importazione (remote, route, DNS) e i flag che indicano la presenza di credenziali. Lo stato in tempo reale di ogni connessione proviene dall'endpoint device-status (beacon metadata.vpn).

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Attiva o disattiva il supporto VPN di un Agente AI

Attiva/disattiva la funzionalità VPN del dispositivo. Invia la variabile di dispositivo balena PH_VPN_ENABLED e sollecita il dispositivo (MQTT vpnConfigChanged); quando la funzionalità viene disattivata le connessioni vengono mantenute (i tunnel si arrestano; la configurazione resta per la riattivazione).

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Importa uno o più profili OpenVPN su un Agente AI

Accetta caricamenti codificati in base64: singoli file .ovpn/.conf, pacchetti a file separati (configurazione + certificati/chiavi) e archivi (.zip, esportazioni Pritunl .tar/.tgz, Tunnelblick .tblk, Viscosity .visc/.visz). I profili vengono normalizzati in una forma inline canonica; ogni profilo diventa una connessione (importata disconnessa: inserisci le credenziali, poi connetti). Restituisce errori 400 utili per i caricamenti non utilizzabili.

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiorna una connessione VPN di un Agente AI (nome / credenziali / split DNS)

Aggiorna la connessione salvata. I campi delle credenziali sono di sola scrittura (omesso = mantieni il valore salvato; stringa vuota = cancella). Le modifiche a credenziali/split DNS incrementano la revisione della connessione, in modo che un tunnel attivo si riavvii con i nuovi valori.

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Elimina una connessione VPN di un Agente AI

Rimuove la connessione dalla registrazione e sollecita il dispositivo, che chiude il tunnel ed elimina il profilo e le credenziali in cache.

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio) connectionId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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"

Risposta

{}

Connetti / disconnetti una connessione VPN di un Agente AI

Modello a stato desiderato: imposta il flag enabled della connessione nella registrazione e sollecita il dispositivo (MQTT vpnConfigChanged senza payload); il dispositivo recupera lo stato autorevole tramite la sua chiamata universal-api autenticata con JWT e riallinea i propri tunnel. Una sollecitazione persa viene recuperata con la sincronizzazione periodica.

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Ottieni la configurazione e lo stato del backup cloud di un Agente AI

Restituisce le impostazioni di backup del dispositivo (abilitazione, conservazione, regione di archiviazione), lo stato del backup continuo (ultimo backup, dimensione, errori), la regione automatica risolta e le regioni di archiviazione disponibili per il selettore. La password del repository restic non viene mai restituita.

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiorna la configurazione del backup cloud di un Agente AI

Salva abilitazione/conservazione/regione. Ha effetto al successivo ciclo di backup orario del dispositivo (il dispositivo chiede a PH il contesto di esecuzione prima di ogni esecuzione), quindi non è necessario riavviare il dispositivo.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Elenca le origini di ripristino dei backup per l'associazione di un nuovo Agente AI

Vista a livello di struttura per l'opzione "ripristina da un backup" della finestra di aggiunta dell'agente: ogni registrazione della struttura, attiva E dismessa/sostituita, che ha ancora un repository di backup decifrabile e almeno un punto di ripristino utilizzabile, con i suoi snapshot più recenti. Restituisce anche gli elenchi di opzioni della configurazione di backup (allowedRetentionDays, availableRegions), così la finestra non ha bisogno dell'UUID di un dispositivo per popolare i suoi selettori.

Parametri

club `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Elenca i punti di ripristino dei backup di un Agente AI

Restituisce l'indice degli snapshot del dispositivo (dal più recente) da DynamoDB, senza passaggi sul dispositivo o sul repository, più lo stato corrente delle richieste di backup manuale / ripristino per il polling del pannello. Le richieste obsolete (mai prese in carico o senza heartbeat di avanzamento) vengono presentate come non riuscite, così l'interfaccia può sempre inviarne una nuova.

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Richiedi subito un backup manuale di un Agente AI

Scrive una richiesta di esecuzione manuale (con la nota dell'utente) nella riga della registrazione e sollecita il dispositivo tramite MQTT. Il dispositivo recupera la richiesta verificata tramite la sua chiamata run-context universal-api autenticata con JWT: anche senza MQTT, la richiesta viene presa in carico al successivo ciclo dello scheduler. Viene rifiutata mentre è in corso un altro backup o ripristino.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Fissa o sblocca un punto di ripristino di un Agente AI

I punti di ripristino fissati sono protetti dall'eliminazione per conservazione: la manutenzione notturna del dispositivo riceve gli ID degli snapshot fissati tramite la chiamata run-context e li esclude da restic forget, e le relative righe di indice non scadono mai per TTL. Rimuovendo il fissaggio si ripristina il normale comportamento di conservazione.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Ripristina un Agente AI da un punto di ripristino del backup

Scrive una richiesta di ripristino nella riga della registrazione e sollecita il dispositivo. I ripristini completi sovrascrivono /data e /home/hermeswebui (il dispositivo crea prima uno snapshot di sicurezza automatico pre-ripristino e arresta l'agente durante il ripristino) e richiedono di digitare il nome del dispositivo come conferma. Passando `paths` viene invece eseguito un ripristino non invasivo a livello di file solo di quei percorsi. Facoltativamente, al termine del ripristino dei dati, fissa il dispositivo alla release software dello snapshot (vedi backup-restore-release).

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Applica la release software registrata in un ripristino completato

Passaggio finale di un ripristino che ha richiesto la versione software dello snapshot: quando il dispositivo segnala il completamento del ripristino dei dati, fissa il dispositivo alla release salvata e sblocca gli aggiornamenti (stesso meccanismo dell'endpoint di aggiornamento). Viene attivato dal polling del pannello; è idempotente: il fissaggio salvato viene cancellato una volta applicato.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Sfoglia i file all'interno di un punto di ripristino del backup

Elenca un livello di directory di uno snapshot restic, servito interamente lato server dal repository Wasabi (funziona con il dispositivo offline). Vengono letti solo i metadati dell'albero: per gli elenchi non viene scaricato alcun dato dei file.

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio) takenAt `number` (obbligatorio) path `string` (facoltativo)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Cerca nomi di file all'interno di un punto di ripristino del backup

Ricerca di nomi di file senza distinzione tra maiuscole e minuscole a partire da una directory, servita lato server dai metadati dell'albero restic (non viene letto alcun dato dei file; funziona con il dispositivo offline). Trasmette l'elenco in streaming e si ferma alle prime 200 corrispondenze.

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio) takenAt `number` (obbligatorio) q `string` (obbligatorio) path `string` (facoltativo)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Cosa è cambiato tra due punti di ripristino del backup

Esegue lato server un restic diff tra due snapshot del dispositivo (solo metadati dell'albero) e restituisce l'elenco dei file aggiunti/rimossi/modificati (fino a un massimo di 500 modifiche) più statistiche di riepilogo. I risultati vengono memorizzati nella cache: gli snapshot sono immutabili.

Parametri

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

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Cronologia delle versioni di un file in tutti i punti di ripristino

Un unico restic find lato server su tutti gli snapshot del repository del dispositivo, ridotto alle versioni DISTINTE (i risultati consecutivi con dimensione+mtime identici vengono uniti) e collegato alle righe dell'indice degli snapshot per date/tipi/note.

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio) path `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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"

Risposta

{}

Cerca per nome di file in tutti i punti di ripristino dei backup di un dispositivo

Il percorso di recupero dei file eliminati: un unico restic find lato server su TUTTI gli snapshot del repository (senza distinzione tra maiuscole e minuscole, per sottostringa o glob), raggruppato per percorso con i punti di ripristino in cui compare ciascun file. Un file eliminato dal dispositivo è ancora reperibile qui finché un punto di ripristino lo contiene.

Parametri

club `string` (obbligatorio) uuid `string` (obbligatorio) q `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Scarica un singolo file da un punto di ripristino del backup

Trasmette un file direttamente dal repository restic al browser (come allegato). Le directory vengono trasmesse come archivio tar. Con limite di dimensione; servito lato server, quindi funziona con il dispositivo offline.

Parametri

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

Endpoint

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

Richiesta di esempio

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"

Risposta

{}

Dismetti un Agente AI da una struttura

Parametri

club `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Rimuovi un Agente AI da una struttura e ripristina le impostazioni di fabbrica dell'hardware

Dissocia completamente il dispositivo, in modo che possa essere associato a QUALSIASI struttura, e cancella tutti i dati sul NUC. La cancellazione viene predisposta tramite la variabile di dispositivo balena PH_FACTORY_RESET (un nonce monouso) PRIMA della rimozione nel cloud, quindi funziona anche se il dispositivo è offline al momento della rimozione: la cancellazione viene eseguita alla successiva connessione. Una sollecitazione MQTT factoryReset rende immediato il caso online. La rimozione nel cloud revoca poi ogni credenziale e concessione, cancella il collegamento della struttura in Balena (variabili del dispositivo + tag club) e il clubID dei metadati, elimina le richieste di accesso e il record DNS della LAN. I backup cloud vengono CONSERVATI: l'indice degli snapshot e la password del repository restano nella registrazione eliminata in modo reversibile, utilizzabili come origine di ripristino quando si aggiunge un sostituto. Richiede di digitare il nome del dispositivo come conferma.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Sostituisci un Agente AI guasto con un nuovo NUC (ripristino di emergenza)

Sostituzione del dispositivo in un unico passaggio: associa il NUC sostitutivo (slot del tunnel, segreti, variabili balena, seed del backup), trasferisce nome, posizione, pianificazione del riavvio, impostazioni di backup, blocco degli accessi e concessione MCP del vecchio dispositivo, ricollega l'indice degli snapshot precedente al nuovo dispositivo (così l'intera cronologia dei backup resta consultabile), dismette la vecchia registrazione (contrassegnata con replacedBy / replacedFrom) e, a meno che `restore` sia false, accoda un ripristino completo del punto di ripristino scelto dal repository di backup del VECCHIO dispositivo sul nuovo hardware. Funziona con il vecchio dispositivo guasto/offline; richiede di digitare il nome del vecchio dispositivo come conferma. Solo all'interno della stessa struttura.

Parametri

club `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Risolve un link breve del codice QR di un dispositivo Performance Hub nel deep link a cui punta, così lo scanner di Aggiungi dispositivo può rilevare il tipo di dispositivo. Vengono seguiti solo gli host performancehub.co.

Parametri

url `string` (obbligatorio) Il link breve scansionato

Endpoint

GET /api/devices/resolve-qr

Richiesta di esempio

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

Risposta

{}

Verifica la connettività con l'Unifi Controller di una struttura e la correttezza delle credenziali.

Parametri

facilityID `string` (obbligatorio) ID interno della struttura con cui vuoi verificare la connettività Unifi

Endpoint

GET /api/devices/testUnifiController/{facilityID}

Richiesta di esempio

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

Risposta

{}

Aggiorna un dispositivo IoT generico con una struttura.

Parametri

club `string` (obbligatorio) ID interno della struttura in cui vuoi aggiornare il dispositivo. body `string` (obbligatorio) Oggetto JSON dei parametri di aggiornamento.

Endpoint

PUT /api/devices/updateGenericDevice/{club}

Richiesta di esempio

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

Risposta

{}

Elenca il numero di accordi in sospeso che richiedono un'azione, in base a un utente e ai club a esso associati

Endpoint

GET /api/agreements/agreements-outstanding

Richiesta di esempio

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

Risposta

{}

Elenca tutti gli accordi disponibili per un club

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. contracts-sort `string` (facoltativo) Ordina gli accordi per date-effective o alphabetical. Il valore predefinito è date-effective. contracts-acknowledgement `string` (facoltativo) Filtra gli accordi per all, acknowledged o unacknowledged. Il valore predefinito è all. contracts-requirement `string` (facoltativo) Filtra gli accordi per all, signature, checkbox, popup o none. Il valore predefinito è all. contracts-status `string` (facoltativo) Filtra gli accordi per all, active o archived. Il valore predefinito è all.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Firma un accordo in base al suo ID.

Parametri

club `string` (obbligatorio) ID interno del club che firma l'accordo. agreementid `string` (obbligatorio) ID dell'accordo da firmare. body `string` (obbligatorio) Oggetto JSON contenente l'accordo e i parametri da aggiungere o caricare nel sistema...

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Riepilogo del Model Router della struttura (configurazione, saldo, spesa).

Parametri

clubID `string` (obbligatorio) tz `string` (facoltativo) Fuso orario IANA di chi visualizza: usato in alternativa per gli intervalli di spesa giornalieri e mensili quando la struttura non ha dati sul fuso orario.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Catalogo dei modelli disponibili con lo stato di attivazione per struttura (per impostazione predefinita tutti attivi).

Parametri

clubID `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Guardrail disponibili e modelli predefiniti di PH.

Parametri

clubID `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Servizi del Model Router connessi. Include i dispositivi Agente AI associati, gli agenti esterni con tipo esplicito e il servizio Workflow della struttura. La configurazione si modifica tramite PATCH /keys/{keyHash}.

Parametri

clubID `string` (obbligatorio) tz `string` (facoltativo) Fuso orario IANA di chi visualizza: usato in alternativa per gli intervalli di spesa giornalieri e mensili quando la struttura non ha dati sul fuso orario.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Attiva il Model Router per una struttura e predisponi il suo accesso all'inferenza.

Parametri

clubID `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiorna piano, allowlist dei modelli, guardrail, filtri dei contenuti (oscuramento o blocco tramite regex lato PH), limite di spesa e configurazione della ricarica automatica.

Parametri

clubID `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Azzera il contatore del limite massimo complessivo (riallineandolo alla spesa attuale) e registra il periodo chiuso nella cronologia.

Parametri

clubID `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Cronologia degli azzeramenti del limite massimo (dal più recente): limite, spesa e timestamp per ogni periodo chiuso.

Parametri

clubID `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Crea una nuova chiave API phk_ per la struttura (il testo in chiaro viene restituito una sola volta). Accetta, facoltativamente, limiti di spesa, allowlist dei modelli, guardrail, filtri dei contenuti e limiti di frequenza rpmLimit/tpmLimit.

Parametri

clubID `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Aggiorna i campi modificabili della chiave: etichetta, limiti di spesa per chiave, allowlist dei modelli, guardrail, filtri dei contenuti e limiti di frequenza rpmLimit/tpmLimit (sincronizzati con la chiave).

Parametri

clubID `string` (obbligatorio) keyHash `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Registri di inferenza per richiesta della struttura (in tempo reale, solo metadati).

Parametri

clubID `string` (obbligatorio) page `string` (facoltativo) pageSize `string` (facoltativo) status `string` (facoltativo) model `string` (facoltativo) provider `string` (facoltativo) source `string` (facoltativo) `key` o `agent` keyHash `string` (facoltativo) Filtra un singolo agente o chiave in base al suo keyHash PH. q `string` (facoltativo) Ricerca a testo libero su ID richiesta, etichetta della chiave o dell'agente, modello, provider, utente finale. minutes `string` (facoltativo) Intervallo inferiore a un giorno (ad es. Live=1440); sostituisce startDate/endDate. startTs `string` (facoltativo) Inizio dell'intervallo in secondi epoch (clic per ingrandire); sostituisce minuti e date. endTs `string` (facoltativo) Fine dell'intervallo in secondi epoch (clic per ingrandire); sostituisce minuti e date.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Istogramma delle richieste nel tempo per la vista Logs. Stessi filtri della route di elenco, ma aggregati lato server in intervalli di tempo (conteggi di successi e errori), così la risposta resta minima indipendentemente dal volume dei registri. La dimensione degli intervalli viene scelta automaticamente in base al periodo.

Parametri

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

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Intervalli di analisi dell'utilizzo + totali per modello in un periodo (in tempo reale).

Parametri

clubID `string` (obbligatorio) range `string` (facoltativo) 24h | 7 | 30 | 90 | year | all (ignorato se vengono forniti startDate/endDate) startDate `string` (facoltativo) endDate `string` (facoltativo) groupBy `string` (facoltativo) model (predefinito) | key | source | provider | status: dimensione per intervalli + gruppi subgroupBy `string` (facoltativo) seconda dimensione facoltativa annidata in ogni gruppo (Explore) keyHash `string` (facoltativo) filtro di approfondimento: limita a una singola chiave o agente model `string` (facoltativo) filtro di approfondimento: limita a un singolo modello provider `string` (facoltativo) source `string` (facoltativo) compare `string` (facoltativo) imposta su "prev" per restituire anche groupsPrev (il periodo di uguale durata immediatamente precedente)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Calendario dell'attività giornaliera nell'ultimo anno mobile (circa 53 settimane, in stile GitHub).

Parametri

clubID `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Addebita la carta salvata per la fatturazione SaaS per aggiungere credito prepagato del Model Router.

Parametri

clubID `string` (obbligatorio) body `object` (facoltativo)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Completa una ricarica dopo che l'applet ha completato l'autenticazione 3DS.

Parametri

clubID `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Riepilogo della carta salvata per la fatturazione SaaS su cui verranno addebitate le ricariche manuali e automatiche.

Parametri

clubID `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Transazioni contabili della struttura, dalla più recente. Facoltativamente filtrate per tipo (ad es. `types=topup,adjustment` per la cronologia dei movimenti di denaro, oppure `types=charge-reconcile` con `from`/`to` per le detrazioni di utilizzo di un mese).

Parametri

clubID `string` (obbligatorio) limit `integer` (facoltativo) Numero massimo di righe (predefinito 50, massimo 200) types `string` (facoltativo) Tipi di transazione separati da virgole (topup, charge-reconcile, refund, adjustment, trueup-shortfall) from `integer` (facoltativo) Solo le transazioni con createdAt >= from (secondi unix) to `integer` (facoltativo) Solo le transazioni con createdAt <= to (secondi unix)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Mesi `YYYY-MM` distinti (UTC, dal più recente) che contengono almeno una transazione dei tipi richiesti. Alimenta i menu a discesa dei filtri per anno e mese, così l'interfaccia propone solo i periodi che contengono effettivamente dati.

Parametri

clubID `string` (obbligatorio) types `string` (facoltativo) Tipi di transazione separati da virgole (topup, charge-reconcile, refund, adjustment, trueup-shortfall)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Ricevuta di pagamento in PDF con il marchio per una singola transazione del Model Router.

Parametri

clubID `string` (obbligatorio) txId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Pacchetto ZIP di ricevute di pagamento in PDF con il marchio per le transazioni di ricarica selezionate. Ogni ID deve essere una ricarica della struttura: le detrazioni di utilizzo e le rettifiche amministrative non hanno ricevute e vengono rifiutate.

Parametri

clubID `string` (obbligatorio) ids `string` (obbligatorio) ID delle transazioni separati da virgole (massimo 50)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Riepiloghi per mese di calendario (UTC) delle detrazioni di utilizzo della struttura, dal più recente. Il mese corrente è sempre incluso e contrassegnato con `isCurrentMonth` (dall'inizio del mese).

Parametri

clubID `string` (obbligatorio) months `integer` (facoltativo) Periodo di riferimento in mesi (predefinito 12, massimo 24; ignorato se è impostato `year`) year `integer` (facoltativo) Limita i riepiloghi a un anno di calendario UTC (ad es. 2026)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Rendiconto mensile di utilizzo in PDF con il marchio: un riepilogo delle detrazioni di utilizzo del mese (subtotali giornalieri + totale). Non è in alcun modo una fattura o una ricevuta; le detrazioni di utilizzo non comportano alcun incasso.

Parametri

clubID `string` (obbligatorio) month `string` (obbligatorio) Mese di calendario UTC, `YYYY-MM`

Endpoint

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

Richiesta di esempio

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"

Risposta

{}

Voci non elaborate delle detrazioni di utilizzo di un mese in formato CSV (ID transazione, timestamp UTC, importo, saldo successivo, istantanea della spesa complessiva): l'esportazione dettagliata che quadra con il totale del rendiconto del mese.

Parametri

clubID `string` (obbligatorio) month `string` (obbligatorio) Mese di calendario UTC, `YYYY-MM`

Endpoint

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

Richiesta di esempio

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"

Risposta

{}

Riepilogo di utilizzo e spesa della struttura (dati in tempo reale più il registro contabile riconciliato).

Parametri

clubID `string` (obbligatorio) tz `string` (facoltativo) Fuso orario IANA di chi visualizza: usato in alternativa per gli intervalli di spesa giornalieri e mensili quando la struttura non ha dati sul fuso orario.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Associa o aggiorna un dispositivo AI Edge Processor per un club

Parametri

body `string` (obbligatorio) Oggetto JSON per aggiornare la registrazione del dispositivo AI Edge Processor.

Endpoint

POST /api/ai-edge-processor/devices

Richiesta di esempio

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

Risposta

{}

Associa un dispositivo AI Edge Processor a un club. Risolve il dispositivo partendo dai metadati (prevale l'heartbeat in tempo reale), completa la riga di registrazione se il dispositivo non si è mai registrato da solo e rimuove le righe di registrazione obsolete lasciate da hardware riconfigurato.

Parametri

body `string` (obbligatorio) Oggetto JSON per aggiornare la registrazione del dispositivo AI Edge Processor.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce un elenco dei record di caricamento bbox di un club

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Indice di ricerca del database delle telecamere

Inoltra l'indice di ricerca camera-db della documentazione pubblica (produttori, serie, modelli, alias) usato dalla finestra Find my camera quando si aggiungono telecamere di rete. Memorizzato nella cache lato server per 12 ore.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Modelli dei produttori del database delle telecamere

Inoltra i modelli di URL RTSP e le impostazioni predefinite di un singolo produttore dal database delle telecamere della documentazione pubblica. Lo slug viene convalidato per impedire il path traversal. Memorizzato nella cache lato server per 12 ore.

Parametri

slug `string` (obbligatorio) Slug del produttore (ad es. hikvision)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce un elenco dei dati di check-in di una struttura

Parametri

club `string` (obbligatorio) ID interno del club o della struttura a cui vuoi accedere. startDate `string` (facoltativo) Data di inizio nel formato YYYY-MM-DD endDate `string` (facoltativo) Data di fine nel formato YYYY-MM-DD timezone `string` (facoltativo) Fuso orario per l'interpretazione delle date (predefinito Australia/Brisbane) nextToken `string` (facoltativo) Token di paginazione per recuperare la pagina successiva

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Recupera la configurazione del front-end o dell'interfaccia TVCC

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/cctv/config/:club

Richiesta di esempio

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

Risposta

{}

Ottieni la configurazione di distribuzione dei contenuti TVCC

Restituisce il dominio dei contenuti usato dai client TVCC per risolvere le risorse multimediali. Il dominio è determinato dalla variabile d'ambiente CONTENT_DOMAIN, con un valore predefinito che dipende dall'ambiente (la produzione serve /cctv, gli altri ambienti servono /cctv-stg).

Endpoint

GET /api/cctv/content-config

Richiesta di esempio

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

Risposta

{}

Modifica la configurazione del front-end o dell'interfaccia TVCC

Parametri

body `object` (obbligatorio) Oggetto JSON del nuovo blocco di configurazione da aggiungere al sistema.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce un elenco della disponibilità delle regioni dei bucket per la configurazione del provider di archiviazione TVCC

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Reimposta la raccolta dei volti non identificati

Reimposta la raccolta CompreFace dei volti non identificati della struttura eliminando tutti i soggetti. I record delle persone in DynamoDB, i rilevamenti dei volti e i blocchi della sequenza temporale in OpenSearch NON vengono modificati. Vengono cancellati solo i dati di riconoscimento facciale sottostanti. Nuovi profili ombra verranno creati automaticamente man mano che il sistema elabora nuovi rilevamenti delle telecamere.

Parametri

facilityId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Ottieni le informazioni sulla raccolta dei volti non identificati

Restituisce il numero attuale di soggetti nella raccolta CompreFace dei volti non identificati della struttura.

Parametri

facilityId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiunge una telecamera di rete (telecamera OEM/IP) tramite URL di streaming (RTSP, HTTP, HTTPS)

Parametri

body `string` (obbligatorio) Oggetto JSON per aggiungere una telecamera di rete.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiungi in blocco telecamere di rete a un Edge Processor

Registra più telecamere di rete RTSP/HTTP su un Edge Processor, poi invia FEED_CONFIG una sola volta, così il dispositivo ricarica la configurazione un'unica volta.

Parametri

body `object` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Associa o aggiorna un dispositivo per un club

Parametri

body `string` (obbligatorio) Oggetto JSON per aggiornare la registrazione del dispositivo TVCC.

Endpoint

POST /api/cctv/devices

Richiesta di esempio

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

Risposta

{}

Associa un dispositivo a un club

Parametri

body `string` (obbligatorio) Oggetto JSON per aggiornare la registrazione del dispositivo TVCC.

Endpoint

POST /api/cctv/devices/associate

Richiesta di esempio

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

Risposta

{}

Invia una richiesta MQTT a uno specifico UUID di dispositivo e attende una risposta (tramite websocket) con le funzionalità disponibili della telecamera.

Parametri

club `string` (obbligatorio) ID interno del club proprietario del dispositivo che stai interrogando. body `string` (obbligatorio) Oggetto JSON dei parametri di aggiornamento.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Elenca le registrazioni dei dispositivi

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/cctv/devices/:club

Richiesta di esempio

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

Risposta

{}

Rimuove una telecamera di rete contrassegnandola come eliminata e togliendola dal FEED_CONFIG dell'Edge Processor

Parametri

club `string` (obbligatorio) ID interno del club proprietario del dispositivo. balenaUUID `string` (obbligatorio) UUID della telecamera di rete da rimuovere.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Salva tutte le funzionalità configurate della telecamera e le applica al dispositivo come variabile d'ambiente (tramite balena)

Parametri

club `string` (obbligatorio) ID interno del club proprietario del dispositivo che stai interrogando. body `string` (obbligatorio) Oggetto JSON dei parametri di aggiornamento.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Salva una maschera di movimento (se configurata) per la telecamera e la applica al dispositivo come variabile d'ambiente (tramite balena)

Parametri

club `string` (obbligatorio) ID interno del club proprietario del dispositivo che stai interrogando. body `string` (obbligatorio) Oggetto JSON della maschera della telecamera.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Invia un comando v4l2 specifico (ad esempio luminosità o contrasto) al dispositivo fisico

Parametri

club `string` (obbligatorio) ID interno del club proprietario del dispositivo che stai interrogando. body `string` (obbligatorio) Oggetto JSON dei parametri di aggiornamento.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Verifica l'URL di streaming di una telecamera di rete

Invia un comando di prova a un Edge Processor per convalidare l'URL di streaming di una telecamera con ffprobe

Corpo della richiesta

Endpoint

POST /api/cctv/devices/test-stream

Richiesta di esempio

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

Risposta

{}

Elimina definitivamente dal database un singolo record di rilevamento del volto. Usato per rimuovere voci di tracciamento non corrispondenti o errate dal registro delle attività di una persona.

Parametri

club `string` (obbligatorio) fdID `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce un elenco dei dati di rilevamento del volto di una persona

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. personID `string` (obbligatorio) ID della persona nel sistema di identificazione facciale

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce i rilevamenti del volto che fanno riferimento a una determinata immagine ritagliata della persona, interrogati tramite il GSI personCropImage.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. personCropImage `string` (obbligatorio) URL dell'immagine ritagliata della persona salvato nel record di rilevamento del volto. limit `string` (facoltativo) Numero massimo di rilevamenti da restituire. nextToken `string` (facoltativo) Token di paginazione di una risposta precedente.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce un elenco dei dati di rilevamento del volto di un club, raggruppati per intervallo rispetto all'ora attuale

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce un elenco dei dati di rilevamento del volto di un club

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Cerca con OpenSearch i blocchi della sequenza temporale dei rilevamenti del volto in una struttura

Parametri

facilityId `string` (obbligatorio) ID interno della struttura in cui cercare timezone `string` (obbligatorio) Fuso orario IANA per la conversione delle date (ad es. Pacific/Auckland) startDate `string` (facoltativo) Filtro per data di inizio (YYYY-MM-DD), convertito in startUnix in base al fuso orario endDate `string` (facoltativo) Filtro per data di fine (YYYY-MM-DD), convertito in endUnix in base al fuso orario personId `string` (facoltativo) Filtra per uno specifico ID persona query `string` (facoltativo) Ricerca a testo libero (ad es. nome della persona) limit `string` (facoltativo) Risultati per pagina (predefinito 20, massimo 100) filters `string` (facoltativo) Oggetto filtri codificato in JSON (ad es. {"matchType":"identified"}) sortBy `string` (facoltativo) Campo per l'ordinamento (startUnix, endUnix, created). Il valore predefinito è endUnix. page `string` (facoltativo) Numero di pagina per la paginazione (predefinito 1) sortOrder `string` (facoltativo) Direzione di ordinamento (asc o desc). Il valore predefinito è desc.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce un elenco di report sulla struttura del club

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Avvia la generazione su richiesta delle mappe di calore. Richiama la stessa logica Starter usata dal cron programmato, ma consente di indicare una struttura specifica, una data/ora e un insieme di periodi. Se chiamato senza corpo, si comporta esattamente come il cron: analizza tutte le strutture idonee e mette in coda ogni dispositivo.

Corpo della richiesta

Endpoint

POST /api/cctv/heatmaps/generate

Richiesta di esempio

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

Risposta

{}

Risolve la posizione di un PNG della mappa di calore composta su un intervallo mobile per un singolo dispositivo. Restituisce solo metadati JSON: i byte del PNG si trovano sul dominio dei contenuti e il front-end costruisce l'URL così: `${contentDomain}/cctv/${storageService}/${region}/${filePath}?s=${token}` Ordine di risoluzione: 1. Corrispondenza nell'indice DynamoDB `composed#…` → restituzione immediata (~10 ms). 2. HEAD su Wasabi con la chiave di cache deterministica. Se trovato, scrive una riga di indice di completamento e restituisce il risultato. 3. Ripiego su dati obsoleti: esiste un record composto per questa tupla (dispositivo, intervallo, ora), anche di una data diversa. Viene restituito subito con `cache: 'HIT-STALE'`, così il front-end può mostrare *qualcosa*. Una nuova composizione viene avviata in modo asincrono. 4. Percorso a freddo: non esiste alcun record. La Lambda di composizione viene messa in coda tramite `InvocationType: 'Event'` e l'endpoint restituisce `202 { cache: 'PENDING' }`. Il front-end interroga finché non arriva un record (di solito 3-5 secondi). Gestione di oggi: quando `endDate` è l'"oggi" locale della struttura, l'endpoint restituisce invece il PNG di ieri: le sezioni di oggi sono ancora in fase di scrittura da parte del cron Starter e una nuova composizione sarebbe incompleta. La risposta riporta l'`endDate` richiesto e include `endDateUsed` (= ieri). Enum `cache`: - `HIT`: servito dall'indice DDB per la data richiesta. - `HIT-FALLBACK`: richiesto oggi; servita la riga di indice di ieri. - `HIT-BACKFILL`: assente in DDB ma Wasabi aveva il PNG; la riga è appena stata scritta. - `HIT-FALLBACK-BACKFILL`: completamento sul ripiego di ieri. - `HIT-STALE`: nessun record per la data richiesta, ma esiste un record di un'altra data per questa tupla; servito subito e una nuova composizione viene messa in coda in background. - `PENDING`: nessun record; la composizione è stata messa in coda. Il front-end deve interrogare periodicamente. La risposta è `202 Accepted`, senza `filePath`.

Parametri

facilityId `string` (obbligatorio) deviceUUID `string` (obbligatorio) Dispositivo per cui eseguire la composizione. Le composizioni sono per dispositivo. hour `integer` (obbligatorio) Ora del giorno (0–23) da comporre nel periodo di riferimento. endDate `string` (facoltativo) Ultima data dell'intervallo (YYYY-MM-DD). Predefinita: oggi (fuso orario della struttura). range `string` (facoltativo) Periodo di riferimento. Deve essere uno degli intervalli consentiti. nocache `integer` (facoltativo) Imposta su `1` per ignorare i livelli di cache DDB + HEAD e forzare una nuova composizione.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Individua quali ore del giorno hanno record di sezioni `1h` per un dispositivo in un periodo di riferimento mobile. Il front-end lo usa per popolare il selettore dell'ora insieme a un selettore di data + intervallo prima di chiamare l'endpoint di composizione (`/api/cctv/heatmaps/hourly/...`). Esempio: `GET /api/cctv/heatmaps/query-hourly/Birkdale?deviceUUID=abc123&endDate=2026-04-16&range=30d` Internamente: una query di intervallo DynamoDB su `cctvheatmaps` (`sk BETWEEN 1h#{start}-00 AND 1h#{end}-23`), raggruppata per ora. Restituisce una voce per ogni ora con almeno una sezione, inclusa una JPEG di riferimento rappresentativa (presa dal giorno più recente dell'intervallo: il riferimento è condiviso per dispositivo e per giorno).

Parametri

facilityId `string` (obbligatorio) deviceUUID `string` (obbligatorio) Dispositivo da interrogare. Le sezioni orarie sono per dispositivo. endDate `string` (facoltativo) Ultima data dell'intervallo (YYYY-MM-DD). Predefinita: oggi (fuso orario della struttura). range `string` (facoltativo) Periodo di riferimento. Deve essere uno degli intervalli consentiti.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Interroga i record delle mappe di calore pregenerate per una struttura. **Tutti i record per un tipo di periodo:** - `/api/cctv/heatmaps/Birkdale?periodType=1y` - `/api/cctv/heatmaps/Birkdale?deviceUUID=abc123&periodType=1d` **Intervallo di date, singolo tipo di periodo:** - `/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` **Intervallo di date, tutti i tipi di periodo applicabili (ometti periodType):** - `/api/cctv/heatmaps/Birkdale?from=2026-03-01&to=2026-03-31` Restituisce i record annuali, semestrali, trimestrali e così via, fino a quelli di 6h, che si sovrappongono all'intervallo indicato. **Momento specifico, tutti i 9 tipi di periodo per un dispositivo:** - `/api/cctv/heatmaps/Birkdale?deviceUUID=abc123&date=2026-03-15T14:30` Restituisce fino a 9 record (1y, 6m, 3m, 2m, 1m, 1w, 1d, 12h, 6h).

Parametri

facilityId `string` (obbligatorio) L'identificativo della struttura. deviceUUID `string` (facoltativo) Interroga un dispositivo specifico. Se omesso, interroga tutti i dispositivi (GSI). periodType `string` (facoltativo) Filtra per un singolo tipo di periodo. Se omesso insieme a from/to, interroga tutti i tipi. from `string` (facoltativo) Data di inizio (yyyy-mm-dd). Deve essere usata con `to`. to `string` (facoltativo) Data di fine (yyyy-mm-dd). Deve essere usata con `from`. date `string` (facoltativo) Ricerca in un momento specifico (yyyy-mm-dd o yyyy-mm-ddTHH:mm). Richiede deviceUUID. Restituisce un record per tipo di periodo.

Endpoint

GET /api/cctv/heatmaps/{facilityId}

Richiesta di esempio

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

Risposta

{}

Ottieni la miniatura della diretta del dispositivo

Parametri

club `string` (obbligatorio) ID interno del club. deviceId `string` (obbligatorio) ID interno del dispositivo TVCC.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Comunica al sistema TVCC che stai per guardare una diretta

Parametri

club `string` (obbligatorio) ID interno del club. deviceId `string` (obbligatorio) ID interno del dispositivo TVCC.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Approva una corrispondenza di intersezione

Imposta lo stato della corrispondenza su confermato e registra il revisore.

Parametri

club `string` (obbligatorio) matchId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Ottieni una singola corrispondenza di intersezione con i dettagli della visita

Restituisce il record della corrispondenza e la relativa suddivisione dei tempi per visita.

Parametri

club `string` (obbligatorio) matchId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Elenca le corrispondenze di intersezione di una struttura

Restituisce le corrispondenze paginate filtrate per stato.

Parametri

club `string` (obbligatorio) status `string` (facoltativo) limit `integer` (facoltativo) nextToken `string` (facoltativo)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Rifiuta una corrispondenza di intersezione

Imposta lo stato della corrispondenza su rifiutato e registra il revisore.

Parametri

club `string` (obbligatorio) matchId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Ottieni i conteggi riepilogativi delle corrispondenze di intersezione

Restituisce i conteggi delle corrispondenze della struttura raggruppati per stato.

Parametri

club `string` (obbligatorio) ID della struttura

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Legge lo stato di un'operazione "upsert identified person" in corso (copre creazione e modifica). Legge la riga direttamente dalla tabella `people-ops` di proprietà di cctv-rekognition-api, senza passare da una Lambda. Usato dal front-end TVCC per monitorare l'avanzamento dopo POST /api/cctv/people/{facility}/identified. Il percorso è allo stesso livello di `/cctv/people/...` (non annidato al suo interno), così il router express non può interpretare per errore `operationId` come `:personID` in `/cctv/people/:club/:personID`. Vedi l'ordine dei glob di createAPIRouter. Restituisce un segnaposto `pending` finché la Lambda upsertIdentifiedPerson non ha scritto la prima voce di fase (finestra di avvio a freddo). L'hook di polling del front-end tratta allo stesso modo il segnaposto e lo stato pending, quindi il contratto resta stabile per i chiamanti.

Parametri

operationId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiunge un'immagine del volto (da un rilevamento di tracciamento esistente) al soggetto di riconoscimento CompreFace della persona e salva un riferimento nella tabella delle foto ombra. NON carica l'immagine su Wasabi, perché è già presente come acquisizione del rilevamento del volto.

Parametri

club `string` (obbligatorio) personID `string` (obbligatorio) body `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiungi foto ombra al record di una persona

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. personID `string` (obbligatorio) ID del record della persona body `string` (obbligatorio) Oggetto JSON del nuovo blocco di configurazione da aggiungere al sistema.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Interroga le foto ombra di una persona

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. personID `string` (obbligatorio) ID del record della persona

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Rimuove definitivamente un record di foto ombra da CCTVShadowPhotosTable e rimuove il volto corrispondente da CompreFace (se faceId è salvato).

Parametri

club `string` (obbligatorio) personID `string` (obbligatorio) id `string` (obbligatorio) L'ID del record della foto ombra (chiave primaria)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Elimina i riferimenti e i record di riconoscimento associati in base a un personID

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. personID `string` (obbligatorio) ID univoco della persona TVCC.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce il record di una persona di un club

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. personID `string` (obbligatorio) ID database della persona.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Ottieni le zone di accesso corrispondenti al profilo di iscrizione di una persona

Risolve il tipo di membro, i tag e i piani di iscrizione della persona, poi restituisce le zone di accesso reali (origin=membership-plan, non assorbite) confrontate con le regole di inclusione ed esclusione. L'accessRestriction di ogni zona viene ridotto alle sole regole corrispondenti alla persona. Le telecamere delle zone figlie vengono unite nelle zone padre.

Parametri

club `string` (obbligatorio) ID interno della struttura personID `string` (obbligatorio) ID persona dalla tabella delle persone TVCC

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce lo stato attuale di un processo di unione, inclusi i risultati per ogni origine. Interroga questo endpoint ogni 3-5 secondi finché lo stato è IN_PROGRESS.

Parametri

club `string` (obbligatorio) mergeJobID `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Avvia in background l'unione di più profili di persone non identificate in un unico profilo superstite. Risponde subito 202 con un mergeJobID. Interroga /merge-status/:mergeJobID per l'avanzamento.

Parametri

club `string` (obbligatorio) body `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Aggiungi un volto alla raccolta della blacklist di una struttura

Parametri

facilityId `string` (obbligatorio) ID interno della struttura

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Crea o aggiorna una persona identificata in una struttura: crea un nuovo record o ne aggiorna uno esistente. Inoltra la richiesta alla Lambda upsertIdentifiedPerson, che scrive il record della persona, carica su Wasabi l'eventuale foto fornita e reindicizza il volto in CompreFace. Quando `isNewRecord` è true (predefinito), la Lambda esegue il ramo di creazione (cctvPeople.save) e genera un `personID` se non viene fornito. Quando `isNewRecord` è false, la Lambda esegue il ramo di aggiornamento (cctvPeople.update): `personID` è obbligatorio e deve identificare un record esistente.

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Aggiorna l'insieme dei campi partner facoltativi sincronizzati nella tabella delle persone TVCC di una struttura.

Parametri

facilityId `string` (obbligatorio) ID interno della struttura

Corpo della richiesta

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce un elenco dei dati delle persone di un club

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/cctv/people/:club

Richiesta di esempio

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

Risposta

{}

Cerca persone in una struttura tramite l'immagine del volto. Richiama la Lambda imageFaceSearch di cctv-rekognition-api con l'immagine base64 caricata e l'ID della struttura indicato nel percorso. Restituisce le corrispondenze in ordine di rilevanza più un riepilogo degli attributi DeepFace.

Parametri

club `string` (obbligatorio) ID della struttura o del club body `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Cerca persone in una struttura con OpenSearch

Parametri

facilityId `string` (obbligatorio) ID interno della struttura in cui cercare query `string` (facoltativo) Termine di ricerca (ad es. nome) page `string` (facoltativo) Numero di pagina (predefinito 1) limit `string` (facoltativo) Risultati per pagina (predefinito 20, massimo 100) filters `string` (facoltativo) Oggetto filtri codificato in JSON (ad es. {"membershipStatus":"active"}) sortBy `string` (facoltativo) Campo per l'ordinamento (created, lastName, firstName, membershipUpdatedOn). Il valore predefinito è created. sortOrder `string` (facoltativo) Direzione di ordinamento (asc o desc). Il valore predefinito è desc.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiorna gli elementi di rilevamento del volto con un nuovo personID e associa i record di riconoscimento

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. body `string` (obbligatorio) Oggetto JSON del nuovo blocco di configurazione da aggiungere al sistema.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce un oggetto con tutti i filtri disponibili per i dati delle registrazioni TVCC di un club

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Trasmetti la registrazione in streaming.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiorna le informazioni sulla registrazione.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce un riepilogo dei dati delle registrazioni TVCC di un club

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce un elenco dei dati delle registrazioni TVCC di un club in base a un intervallo rispetto all'ora attuale

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce un elenco dei dati delle registrazioni TVCC di un club

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/cctv/recordings/:club

Richiesta di esempio

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

Risposta

{}

Le registrazioni vengono eliminate automaticamente dopo un periodo prestabilito; usa questa funzione per conservarle

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Cerca le istantanee dei report di una struttura in un intervallo di date

Parametri

facilityId `string` (obbligatorio) ID interno della struttura startDate `string` (obbligatorio) Filtro per data di inizio (YYYY-MM-DD) endDate `string` (obbligatorio) Filtro per data di fine (YYYY-MM-DD) deviceIds `string` (facoltativo) Elenco separato da virgole di ID di telecamere o dispositivi in base a cui filtrare view `string` (facoltativo) Vista alternativa del report da calcolare (inoltrata alla Lambda dei report)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Ricerca vettoriale sui contenuti multimediali TVCC indicizzati di una struttura. Risponde con un text/event-stream inoltrato dalla Lambda searchAnything, così il client può mostrare l'avanzamento mentre un container a freddo carica l'encoder. Gli eventi sono `status`, poi `result` oppure `error`. Ci sono tre modi per effettuare una ricerca, due dei quali con questo metodo. Invia `query` per cercare a testo libero. Invia `seedIndex` + `seedKey` per cercare per esempio ("altri simili") usando il vettore di una riga già presente nell'indice: è così che trovi altri risultati simili a quello che l'utente sta guardando. Per cercare tramite un'immagine in possesso dell'utente, invia invece i byte con `POST` a questo stesso percorso. Invia parole insieme a un'immagine per restringere l'una con l'altra: **il testo filtra, l'immagine ordina**. I candidati provengono dal seed, le parole decidono quali vengono mantenuti e la somiglianza visiva decide l'ordine: così i risultati continuano ad assomigliare all'immagine e le parole scartano quelli che non corrispondono. I due non vengono mai fusi in un unico vettore, per questo `queryKind` resta `similar` in una ricerca combinata; è la presenza di `query` nel risultato a indicare che è stato applicato un filtro testuale. Aspettati che le ricerche combinate restituiscano abbastanza spesso nessun risultato e tratta questo caso come un esito distinto: `perIndex..textGated` conta i candidati che corrispondevano all'immagine ma non alle parole, quindi una pagina vuota si può spiegare con "togli le parole" anziché "prova un'altra immagine". Una ricerca con seed senza parole non carica alcun encoder, quindi non subisce mai un avvio a freddo; aggiungendo parole si perde questo vantaggio. In ogni caso, per impostazione predefinita cerca in tutti gli indici: i vettori dei ritagli, delle registrazioni e dei timelapse condividono un unico spazio, quindi il ritaglio di una persona può trovare filmati corrispondenti. I punteggi delle ricerche con seed sono molto più alti di quelli testuali (il confronto tra immagini non attraversa alcun divario di modalità) e vengono filtrati da una soglia separata, non ancora calibrata: `result.queryKind` indica quale scala stai leggendo, e un punteggio di una scala non va mai confrontato con quello dell'altra. Per impostazione predefinita cerca in tutti gli indici e restituisce un unico elenco unito, ordinato per punteggio; ogni risultato riporta `index` e `kind`, così il chiamante può distinguere un risultato immagine da un risultato video (quest'ultimo aggiunge `offsetMs`). Gli indici senza tabella per la struttura vengono segnalati in `skipped` invece di generare un errore. I risultati sotto la soglia di rilevanza calibrata di ciascun indice vengono scartati, quindi una query senza corrispondenze reali restituisce un elenco vuoto invece di risultati insensati presentati con sicurezza; `perIndex` indica cosa ha fornito ciascun indice e perché. I risultati si possono restringere per ora di acquisizione e per telecamera. Preferisci `cameraId` a `camera`: è il balenaUUID della telecamera, l'unico valore che ogni indice salva in modo identico, quindi un solo filtro li restringe tutti. Un filtro a cui un indice non può rispondere viene segnalato in `perIndex..filtersIgnored` e in quell'indice si cerca senza restrizioni, invece di escluderlo dalla ricerca. I risultati delle registrazioni sono **uno per clip, non uno per fotogramma corrispondente**: i fotogrammi vengono campionati ogni 2 s, quindi un soggetto che si sofferma corrisponde a dieci fotogrammi quasi identici della stessa registrazione. Ogni clip restituisce il fotogramma migliore, più `matchCount` e `offsetsMs`, che elencano ogni momento corrispondente al suo interno e si possono usare direttamente come punti di ricerca nel video. I ritagli di persone non vengono mai accorpati, perché due ritagli della stessa persona sono due avvistamenti distinti.

Parametri

facilityId `string` (obbligatorio) ID interno della struttura in cui cercare query `string` (facoltativo) Descrizione a testo libero di ciò che cerchi. Obbligatoria a meno che non venga inviato warm=1 o un seed. Combinata con un seed, non è più l'elemento ordinato ma diventa un filtro sui candidati del seed, scartando quelli il cui punteggio testuale è sotto la soglia di rilevanza dell'indice. seedIndex `string` (facoltativo) Cerca per esempio anziché per testo: l'indice in cui si trova la riga seed (person-crops, recording-frames, timelapse-frames). È l'`index` del risultato su cui l'utente ha fatto clic. Deve essere inviato con seedKey. seedKey `string` (facoltativo) La `key` della riga seed, ripresa esattamente dal risultato. Il seed è escluso dai propri risultati: per una registrazione significa l'intera clip, perché gli altri suoi fotogrammi distano 2 s l'uno dall'altro e sono quasi identici. seedFrameId `string` (facoltativo) Obbligatorio quando seedIndex è recording-frames: quell'indice salva una riga per ogni fotogramma campionato e tutte condividono la chiave della clip, quindi la sola chiave identifica una clip e non un momento. Invia il `frameId` del risultato. Le righe meno recenti non lo hanno: in quel caso invia seedOffsetMs. seedOffsetMs `string` (facoltativo) Identificativo alternativo del fotogramma per i seed recording-frames la cui riga è precedente a `frame_id`. Invia l'`offsetMs` del risultato. Ignorato se viene fornito seedFrameId. warm `string` (facoltativo) Prepara un container Lambda senza eseguire una ricerca. Chiamalo al caricamento della pagina. warmTarget `string` (facoltativo) Quale encoder carica `warm`: `text` (predefinito), `image` o `both`. La torre visiva occupa 355 MB contro i 283 MB di quella testuale, quindi la sua preparazione è facoltativa: richiedi `image` solo quando l'utente ha effettivamente preparato un'immagine, non al caricamento della pagina. index `string` (facoltativo) Set di dati in cui cercare, separati da virgole: person-crops, recording-frames, timelapse-frames. I risultati vengono uniti in un unico elenco ordinato per punteggio. Per impostazione predefinita si cerca in tutti e tre; passa un elenco esplicito per restringere la ricerca. timelapse-frames riguarda le telecamere che non registrano e producono solo un fotogramma al minuto, e la sua soglia di rilevanza non è ancora calibrata. model `string` (facoltativo) Encoder con cui eseguire la query. Deve corrispondere all'encoder con cui è stato indicizzato il set di dati. limit `string` (facoltativo) Risultati da restituire per indice (predefinito 50, massimo 100): non è un totale, quindi una ricerca in tutti e tre gli indici può restituirne fino al triplo. Per le registrazioni conta le clip anziché i fotogrammi corrispondenti. from `string` (facoltativo) Trova solo i contenuti acquisiti a partire da questo momento, in millisecondi dall'epoch. Nota: si tratta dell'ora di acquisizione, non di caricamento. to `string` (facoltativo) Trova solo i contenuti acquisiti prima di questo momento (escluso), in millisecondi dall'epoch. cameraId `string` (facoltativo) balenaUUID delle telecamere, separati da virgole, a cui restringere la ricerca: il campo `balenaUUID` di ogni voce restituita da /api/cctv/recordings/filters/:club. È il filtro per telecamera da preferire: ogni indice salva questo stesso valore, quindi un solo filtro li restringe tutti. Nota che lo riportano solo i ritagli il cui collegamento al rilevamento del volto è stato risolto (circa l'1% oggi), quindi restringere i ritagli per telecamera restituirà pochi risultati o nessuno finché non verrà eseguito il completamento dei ritagli; le registrazioni sono completamente popolate e vengono filtrate con precisione. camera `string` (facoltativo) Nomi delle telecamere, separati da virgole, a cui restringere la ricerca. In pratica vale solo per le registrazioni: person-crops salva un nome di telecamera vuoto in ogni riga, quindi qualsiasi valore qui esclude tutti i ritagli. Preferisci cameraId. cameraGroup `string` (facoltativo) Gruppi di telecamere, separati da virgole, a cui restringere la ricerca. Popolato in tutte le registrazioni ma solo in circa l'1% dei ritagli, per lo stesso motivo di cameraId. minScore `string` (facoltativo) Sostituisce la soglia del coseno per indice che filtra il rumore. Omettilo in produzione; ogni indice ha un valore predefinito calibrato (e uno separato, non calibrato, per le ricerche con seed). Passa 0 per vedere i vicini più prossimi senza filtri quando esegui il debug della rilevanza.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Cerca tramite un'immagine in possesso dell'utente, anziché tramite parole o un risultato già sullo schermo. Identico al GET sotto ogni altro aspetto (stessi parametri di query, stesso flusso di eventi, stessa forma del risultato), quindi qui sono documentate solo le differenze. Invia i **byte originali del file** come corpo della richiesta con un Content-Type `image/*`. Non ridimensionare, ritagliare o ricodificare prima l'immagine nel browser: il server riproduce un ridimensionamento molto specifico (una compressione a 256x256 con un kernel bilineare con antialiasing) con cui sono stati creati i vettori indicizzati, mentre il ridimensionamento del canvas ne usa uno diverso. Dalle misurazioni, questa sostituzione finisce a circa 0,93 di coseno dalla risposta corretta, una distanza maggiore di quella tra due immagini realmente diverse: i risultati vengono quindi ordinati in modo plausibile ma errato, senza alcun errore. Il limite è di 4 MB, un vincolo di trasporto e non di qualità: i byte viaggiano nel payload di invocazione della Lambda, limitato a 6 MB, e la codifica base64 li aumenta di un terzo. I risultati vengono valutati confrontando immagini, quindi `queryKind` è `image` e i punteggi sono sulla stessa scala, molto più alta, di una ricerca con seed: mai confrontabili con i punteggi testuali. Aspettati che siano leggermente *inferiori* a quelli di una ricerca con seed equivalente: il vettore di un seed è stato scritto dal dispositivo stesso, mentre un caricamento viene ricodificato qui da un motore diverso, che lo colloca a pochi centesimi da dove lo avrebbe posto il dispositivo. Dalle misurazioni, i risultati hanno comunque la stessa qualità; semplicemente non sono lo stesso identico insieme. Aggiungere `query` filtra i risultati in base a quelle parole, esattamente come per un seed. L'invio di un seed *e* di un'immagine viene rifiutato: entrambi sono l'elemento da ordinare, quindi la coppia non ha senso. Questa è la richiesta più costosa servita dall'endpoint. Un'immagine caricata carica la torre visiva, e aggiungere parole carica anche quella testuale, entrambe su un container a freddo. `warm=1&warmTarget=image`, inviato non appena l'utente prepara un'immagine, toglie questo costo dal percorso critico.

Parametri

facilityId `string` (obbligatorio) ID interno della struttura in cui cercare body `string` (obbligatorio) Byte dell'immagine non elaborati, non modificati, massimo 4 MB query `string` (facoltativo) Parole facoltative con cui restringere i risultati per immagine, scartando le corrispondenze il cui punteggio testuale è sotto la soglia di rilevanza dell'indice.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce i dettagli di archiviazione e altre metriche della TVCC del club

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce un elenco dei record di caricamento dei timelapse di un club

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/cctv/timelapse/:club

Richiesta di esempio

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

Risposta

{}

Elenca le azioni eseguite dagli utenti sulle registrazioni nel front-end o nell'interfaccia TVCC

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Registra un'azione eseguita da un utente sulle registrazioni nel front-end o nell'interfaccia TVCC

Parametri

body `string` (obbligatorio) Oggetto JSON del nuovo blocco di configurazione da aggiungere al sistema.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Ottieni il token utente per il front-end o l'interfaccia TVCC

Parametri

club `string` (obbligatorio) ID del club

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Genera un token per l'accesso temporaneo o come ospite

Parametri

club `string` (obbligatorio) L'identificativo univoco del club. body `string` (obbligatorio) Oggetto JSON con i dettagli del token da emettere.

Endpoint

POST /api/cctv/token/{club}

Richiesta di esempio

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

Risposta

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

Restituisce un elenco dei record dei token per l'accesso temporaneo o come ospite

Parametri

club `string` (obbligatorio) L'identificativo univoco del club.

Endpoint

GET /api/cctv/token/{club}

Richiesta di esempio

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

Risposta

{}

Ottieni il token di accesso tramite l'ID di accesso

Parametri

accessID `string` (obbligatorio) ID del record del token nel database.

Endpoint

POST /guest/cctv/token/:accessID

Richiesta di esempio

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

Risposta

{}

Elimina gli orari di accesso di una struttura

Parametri

facilityId `string` (obbligatorio) body `object` (obbligatorio) Oggetto JSON dei nuovi orari di accesso.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce un elenco degli orari di accesso della struttura

Parametri

facilityId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiorna o crea gli orari di accesso di una struttura

Parametri

facilityId `string` (obbligatorio) body `object` (obbligatorio) Oggetto JSON dei nuovi orari di accesso.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Elimina una zona di accesso della struttura

Parametri

facilityId `string` (obbligatorio) body `object` (obbligatorio) Oggetto JSON della nuova zona di accesso.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce un elenco delle zone di accesso della struttura

Parametri

facilityId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Aggiorna o crea una zona di accesso della struttura

Parametri

facilityId `string` (obbligatorio) body `object` (obbligatorio) Oggetto JSON della nuova zona di accesso.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce l'unione di tutti gli ID dei moduli amministrativi di brand e strutture di un'organizzazione, sotto forma di oggetti modulo.

Parametri

organisationId `string` (obbligatorio) ID dell'organizzazione

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Restituisce l'elenco di tutte le organizzazioni

Parametri

includeBrands `string` (facoltativo) Includi i brand associati all'organizzazione includeFacilities `string` (facoltativo) Includi le strutture associate all'organizzazione includeRegions `string` (facoltativo) Includi le regioni associate all'organizzazione

Endpoint

GET /api/organisations

Richiesta di esempio

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

Risposta

{}

Un semplice strumento AI che analizza il contenuto di un ticket di assistenza e crea suggerimenti in base agli argomenti disponibili e agli argomenti di ricerca Algolia suggeriti...

Parametri

messageBody `string` (obbligatorio) Corpo del messaggio da inviare topicData `string` (obbligatorio) Oggetto o array JSON dei topicData restituiti da osTicket (sistema di ticket e assistenza) facilityId `string` (facoltativo) L'ID interno del club necessario per individuare l'indice Algolia corretto in cui cercare.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Una semplice API di generazione di immagini

Parametri

type `string` (obbligatorio) Tipo di immagine da generare name `string` (obbligatorio) Nome dell'immagine maxSize `string` (facoltativo) Dimensione massima facoltativa della risposta, ad es. 200KB, 1MB o un semplice numero di byte. L'immagine viene ridimensionata o compressa per rientrare nel limite.

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Query LLM semplice

Endpoint leggero per query LLM semplici e senza stato. Usa un modello economico senza ragionamento (gpt-4o-mini) con limiti di token rigorosi. Nessuna cronologia della conversazione, nessuno strumento, nessuno streaming: solo un prompt in ingresso e testo in uscita.

Corpo della richiesta

Endpoint

POST /api/ai/llm/query

Richiesta di esempio

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

Risposta

{}

Restituisce la configurazione di Algolia, inclusi nome dell'indice, ID app e chiave API.

Parametri

facilityId `string` (obbligatorio)

Endpoint

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

Richiesta di esempio

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

Risposta

{}

Inizializza l'indice Algolia dei materiali di marketing per la stampa

Parametri

organisationId `string` (obbligatorio)

Endpoint

PUT /api/algolia/index

Richiesta di esempio

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

Risposta

{}

Cerca materiali di marketing per la stampa

Corpo della richiesta

Endpoint

POST /algolia/search-marketing-print

Richiesta di esempio

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

Risposta

{}

Cerca materiali di marketing per la stampa

Parametri

club `string` (facoltativo) ID del club searchTerms `string` (facoltativo) Termini di ricerca algoliaArgs `object` (facoltativo) Argomenti di ricerca Algolia aggiuntivi

Endpoint

GET /algolia/search-marketing-print

Richiesta di esempio

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

Risposta

{}

Aggiorna in blocco gli oggetti di marketing per la stampa di un club specifico

Endpoint

POST /algolia/bulk-update-marketing-print

Richiesta di esempio

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

Risposta

{}

Recupera da Algolia le risorse di marketing per la stampa.

Parametri

organisationId `string` (obbligatorio) search `string` (facoltativo) limit `string` (facoltativo) brand `string` (facoltativo) tag `string` (facoltativo)

Endpoint

GET /api/algolia/marketing/assets

Richiesta di esempio

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

Risposta

{}

Inizializza l'indice Algolia dei materiali di marketing per la stampa con la configurazione della struttura.

Parametri

organisationId `string` (obbligatorio)

Endpoint

POST /api/algolia/marketing/assets

Richiesta di esempio

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

Risposta

{}

Esegue una ricerca in un indice Algolia specificato in base a termini di ricerca, club e/o impostazioni locali. La ricerca può essere ulteriormente personalizzata con argomenti Algolia aggiuntivi.

Parametri

searchTerms `string` (obbligatorio) I termini da cercare nell'indice Algolia. club `string` (facoltativo) ID interno del club che effettua la richiesta. Se specificato, la ricerca viene filtrata in base alla regione associata al club. locale `string` (facoltativo) Le impostazioni locali da usare per determinare la regione se non viene specificato un club. Derivate da navigator.languages. algoliaArgs `string` (facoltativo) Argomenti aggiuntivi o personalizzati da passare alla richiesta di ricerca Algolia.

Endpoint

POST /api/algolia/search-wiki

Richiesta di esempio

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

Risposta

{}

Elenca tutti gli annunci

Endpoint

GET /api/announcements/list

Richiesta di esempio

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

Risposta

{}

Carica una risorsa in un BUCKET S3 PUBBLICO (tramite la Upload API), che poi elabora e ottimizza il file, genera le miniature e così via. *Nota: le risorse saranno disponibili pubblicamente*

Parametri

file `string` (facoltativo) Nome del file o della risorsa da caricare.

Endpoint

POST /api/asset-upload

Richiesta di esempio

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

Risposta

{}

Restituisce lo stato del caricamento in base all'UUID indicato del record di caricamento

Parametri

uuid `string` (obbligatorio) UUID del record di caricamento

Endpoint

GET /api/asset-upload/:uuid

Richiesta di esempio

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

Risposta

{}

Invia un comando al sistema Sonos del club

Parametri

body `object` (obbligatorio) Oggetto JSON del comando e dell'input da inviare a Sonos.

Endpoint

PUT /api/audio-control/command/:club

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/audio-control/command/:club \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Recupera la configurazione del front-end di Controllo audio

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/audio-control/config/:club

Richiesta di esempio

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

Risposta

{}

Modifica la configurazione del front-end di Controllo audio

Parametri

body `object` (obbligatorio) Oggetto JSON del nuovo blocco di configurazione da aggiungere al sistema.

Endpoint

PUT /api/audio-control/config/:club/:section

Richiesta di esempio

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

Risposta

{}

Recupera le impostazioni del brand per una regione specifica

Parametri

brandId `string` (facoltativo) L'ID del brand regionCode `string` (facoltativo) Il codice ISO della regione di cui recuperare le impostazioni

Endpoint

GET /api/brands/{brandId}/regions/{regionCode}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/regions/{regionCode} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiorna più impostazioni del brand per una regione specifica

Parametri

brandId `string` (facoltativo) L'ID del brand da aggiornare regionCode `string` (facoltativo) Il codice ISO della regione di cui aggiornare le impostazioni acceptFreeTrialBookingsVisibility `string` (facoltativo) customTrackingCodeVisibility `string` (facoltativo) displayDataSources `string` (facoltativo) displayDefaultDataSource `string` (facoltativo) displayDefaultUI `string` (facoltativo) displayUIOptions `string` (facoltativo) defaultAboutBusiness `string` (facoltativo) defaultAboutBusinessFacebook `string` (facoltativo) facilityCoverImage `string` (facoltativo) digitalProfileSettingsVisibility `string` (facoltativo) facilityHoursVisibility `string` (facoltativo) facilityLocationVisibility `string` (facoltativo) facilityPaymentMethods `string` (facoltativo) facilityPrimaryLogo `string` (facoltativo) facilityStatusVisibility `string` (facoltativo) landingPagesVisibility `string` (facoltativo) lineChatIntegrationVisibility `string` (facoltativo) whatsAppIntegrationVisibility `string` (facoltativo) defaultWhatsAppMessage `string` (facoltativo) socialUrlsVisibility `string` (facoltativo) yextApiKey `string` (facoltativo) Chiave API usata dall'integrazione Yext per questa combinazione di brand e regione. Viene consultata solo quando `directorySyncMode` è `yext`. directorySyncMode `string` (facoltativo) Il backend di sincronizzazione da eseguire per le strutture di questa combinazione di brand e regione. Se manca, il valore predefinito è `yext`, per compatibilità con i brand precedenti all'introduzione di Directory Publishers. websiteUrl `string` (facoltativo) androidAppUrl `string` (facoltativo) iosAppUrl `string` (facoltativo) featuredMessageDescription `string` (facoltativo) yextCategoryIds `string` (facoltativo) Chiave di archiviazione legacy: si tratta in realtà di ID di categoria di Google Business Profile (ad es. gcid:gym). Il prefisso "yext" è precedente alla dismissione di Yext; viene mantenuto per compatibilità con le righe esistenti del database. customInputFields `string` (facoltativo) customInputFieldsToRemove `string` (facoltativo)

Endpoint

PUT /api/brands/{brandId}/regions/{regionCode}

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/brands/{brandId}/regions/{regionCode} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Recupera le impostazioni del brand per una struttura specifica

Parametri

facilityId `string` (facoltativo) L'ID della struttura di cui recuperare le impostazioni del brand

Endpoint

GET /api/facilities/{facilityId}/brand-settings

Richiesta di esempio

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

Risposta

{}

Crea un nuovo brand

Parametri

name `string` (obbligatorio) Il nome del brand organisationId `string` (obbligatorio) L'ID dell'organizzazione a cui appartiene il brand redirectDashboard `string` (facoltativo) L'URL a cui reindirizzare dopo l'accesso al posto della dashboard predefinita

Endpoint

POST /api/brands

Richiesta di esempio

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

Risposta

{}

Restituisce l'elenco di tutti i brand

Endpoint

GET /api/brands

Richiesta di esempio

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

Risposta

{}

Restituisce l'oggetto brand

Parametri

brandId `string` (obbligatorio) L'ID del brand da recuperare includeOrganisation `boolean` (facoltativo) Indica se includere i dati dell'organizzazione nella risposta

Endpoint

GET /api/brands/{brandId}

Richiesta di esempio

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

Risposta

{}

Aggiorna un brand in base all'ID

Parametri

brandId `string` (facoltativo) L'ID del brand da aggiornare name `string` (obbligatorio) Il nome del brand brandOrganisationId `string` (facoltativo) L'ID dell'organizzazione a cui appartiene il brand redirectDashboard `string` (facoltativo) L'URL a cui reindirizzare dopo l'accesso al posto della dashboard predefinita yextApiKey `string` (facoltativo) La chiave API usata per accedere all'API di Yext per questo brand customMenuLayout `object` (facoltativo) Struttura del menu laterale per brand (sezioni / gruppi / voci con riferimenti a moduli di sistema o URL personalizzati). Può essere impostata solo da un amministratore dell'organizzazione di questo brand.

Endpoint

PUT /api/brands/{brandId}

Richiesta di esempio

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

Risposta

{}

Elenca le strutture di un brand

Restituisce un elenco sintetico delle strutture (ID, nome, codice ISO della regione) appartenenti al brand. Usato per popolare i selettori di destinazione delle strutture nella configurazione del brand.

Parametri

brandId `string` (obbligatorio) L'ID del brand di cui elencare le strutture

Endpoint

GET /api/brands/{brandId}/facilities

Richiesta di esempio

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

Risposta

{}

Restituisce l'elenco di tutti i brand associati all'organizzazione del club.

Endpoint

GET /api/clubs/{club}/brands

Richiesta di esempio

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

Risposta

{}

Restituisce l'elenco di tutti i tipi di calendario

Endpoint

GET /api/programs/calendars/calendar-types

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/programs/calendars/calendar-types \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elimina un banner della dashboard

Elimina logicamente un banner della dashboard appartenente al brand.

Parametri

brandId `string` (obbligatorio) L'ID del brand a cui appartiene il banner bannerId `string` (obbligatorio) L'ID del banner da eliminare

Endpoint

DELETE /api/brands/{brandId}/dashboard-banners/{bannerId}

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/brands/{brandId}/dashboard-banners/{bannerId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca i banner della dashboard di un brand

Restituisce tutti i banner della dashboard (non eliminati) configurati per il brand, per la gestione da parte degli amministratori.

Parametri

brandId `string` (obbligatorio) L'ID del brand di cui elencare i banner

Endpoint

GET /api/brands/{brandId}/dashboard-banners

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/dashboard-banners \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Crea o aggiorna un banner della dashboard

Crea un nuovo banner della dashboard per il brand o ne aggiorna uno esistente quando `bannerId` viene fornito nel corpo. I banner possono essere programmati (inizio e fine in secondi unix, null = senza limite) e destinati all'intero brand, a regioni specifiche (codici ISO) o a strutture specifiche.

Parametri

brandId `string` (obbligatorio) L'ID del brand a cui appartiene il banner

Corpo della richiesta

Endpoint

PUT /api/brands/{brandId}/dashboard-banners

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/brands/{brandId}/dashboard-banners \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Risposta

{}

Ottieni i banner attivi del pannello di controllo di una struttura

Determina i banner del pannello di controllo da mostrare in questo momento per una struttura, in base al brand della struttura, alla regione (codice paese ISO) e, per ogni banner, al flag enabled, alla finestra di pianificazione e al targeting. Usato dalle interfacce del pannello di controllo.

Parametri

facilityId `string` (obbligatorio) L'ID della struttura per cui determinare i banner

Endpoint

GET /api/facilities/{facilityId}/dashboard-banners

Richiesta di esempio

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

Risposta

{}

Restituisce la risorsa KYC di un club.

Parametri

clubId `string` (obbligatorio) L'ID del club. key `string` (obbligatorio) La chiave della risorsa KYC.

Endpoint

GET /api/clubs/{clubId}/kyc-assets/{key}

Richiesta di esempio

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

Risposta

{}

Restituisce le informazioni KYC del club.

Endpoint

GET /api/clubs/{clubId}/kyc

Richiesta di esempio

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

Risposta

{}

Aggiorna le informazioni KYC del club.

Parametri

clubId `string` (obbligatorio) L'ID del club da aggiornare. body `object` (obbligatorio)

Endpoint

PUT /api/clubs/{clubId}/kyc

Richiesta di esempio

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

Risposta

{}

Carica una risorsa KYC per un club.

Parametri

clubId `string` (obbligatorio) L'ID del club. file `string` (obbligatorio) Il file da caricare.

Endpoint

POST /api/clubs/{clubId}/kyc-assets

Richiesta di esempio

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

Risposta

{}

Restituisce le impostazioni delle preferenze del club.

Endpoint

GET /api/club/preferences/:club

Richiesta di esempio

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

Risposta

{}

Crea o aggiorna la voce delle preferenze del club.

Corpo della richiesta

Endpoint

POST /api/club/preferences/:club

Richiesta di esempio

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

Risposta

{}

Restituisce l'elenco dei membri con accordo.

Endpoint

GET /api/clubpass/user/email/exist/:club

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/clubpass/user/email/exist/:club \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco dei membri con accordo.

Endpoint

GET /api/clubpass/user/phone/exist/:club

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/clubpass/user/phone/exist/:club \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce un elenco degli utenti che appartengono al club specificato

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere

Endpoint

GET /api/clubs/{club}/members

Richiesta di esempio

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

Risposta

{}

Indica se il club è aperto nella data specificata.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. date `string` (obbligatorio) Data da verificare in formato unix

Endpoint

GET /api/club-busy-hours/:club

Richiesta di esempio

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

Risposta

{}

Restituisce tutti i metadati del club mostrati sui siti web di Example Club.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/clubs/clubpage/clubdata/{club}

Richiesta di esempio

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

Risposta

{}

Aggiorna i metadati di un club con i nuovi dati forniti dal front-end. I campi assenti dal corpo della richiesta vengono mantenuti (nessun SET, nessun REMOVE). I campi inviati come `null` o stringa vuota vengono cancellati. Passa `updateAll: false` per usare il percorso dedicato di unione parziale; in entrambi i casi, i chiamanti non devono mai inviare campi che non gestiscono.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. body `string` (obbligatorio) Oggetto JSON con i dati del club che vuoi aggiornare.

Endpoint

POST /api/clubs/clubpage/updateclub/{club}

Richiesta di esempio

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

Risposta

{}

aggiungi un nuovo record di tracciamento personalizzato

Parametri

club `string` (obbligatorio) ID del club body `string` (obbligatorio) Array di elementi di tracciamento personalizzato.

Endpoint

POST /api/clubs/{club}/customtracking

Richiesta di esempio

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

Risposta

{}

Restituisce il tracciamento personalizzato di un club specifico

Endpoint

GET /api/clubs/customtracking/:clubID

Richiesta di esempio

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

Risposta

{}

Aggiorna le voci di tracciamento personalizzato

Parametri

club `string` (obbligatorio) ID del club body `string` (obbligatorio) Oggetto JSON con i dati del club che vuoi aggiornare.

Endpoint

POST /api/clubs/{club}/customtracking/update

Richiesta di esempio

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

Risposta

{}

Restituisce l'immagine predefinita della vetrina di un club.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/clubs/{club}/default-shop-front

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/default-shop-front \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca le porte disponibili nella struttura

Parametri

body `object` (obbligatorio) Oggetto JSON con i dati del club che vuoi aggiornare.

Endpoint

POST /api/clubs/integrations/doors/:facilityId

Richiesta di esempio

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

Risposta

{}

Sblocca una porta specifica della struttura

Parametri

body `object` (obbligatorio) Oggetto JSON con i dati del club che vuoi aggiornare.

Endpoint

POST /api/clubs/integrations/doors/unlock

Richiesta di esempio

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

Risposta

{}

Restituisce tutte le integrazioni e i dettagli di configurazione del club specificato.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/clubs/integrations/list/{club}

Richiesta di esempio

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

Risposta

{}

Aggiorna i metadati di un club con i nuovi dati forniti dal front-end.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. body `object` (obbligatorio) Oggetto JSON con i dati del club che vuoi aggiornare.

Endpoint

POST /api/clubs/integrations/update/{club}

Richiesta di esempio

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

Risposta

{}

Restituisce un valore booleano che indica se il club si trova in un paese europeo

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. date `string` (obbligatorio) Data da verificare in formato unix

Endpoint

GET /api/clubs/is-eu/{club}

Richiesta di esempio

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

Risposta

{}

Restituisce un elenco generale di tutti i club presenti nel nostro database.

Endpoint

GET /api/clubs/listclubs

Richiesta di esempio

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

Risposta

{}

Indica se il club è aperto nella data specificata.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. date `string` (obbligatorio) Data da verificare in formato unix

Endpoint

GET /api/clubs/{club}/open-on/{date}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/open-on/{date} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Ottieni le recensioni del club da DynamoDB.

Parametri

club `string` (obbligatorio) ID del club

Endpoint

GET /api/clubs/{club}/reviews

Richiesta di esempio

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

Risposta

{}

Ottieni le impostazioni delle recensioni del club da DynamoDB.

Parametri

facilityId `string` (obbligatorio) ID della struttura

Endpoint

GET /api/clubs/{club}/reviews-settings

Richiesta di esempio

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

Risposta

{}

Aggiorna le impostazioni delle recensioni del club su DynamoDB.

Parametri

club `string` (obbligatorio) ID del club

Endpoint

PUT /api/clubs/{club}/reviews-settings

Richiesta di esempio

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

Risposta

{}

Riattiva la pubblicazione automatica nelle impostazioni delle recensioni.

Parametri

club `string` (obbligatorio) ID del club

Endpoint

PUT /api/clubs/{club}/reviews/publish-recent-reviews

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/publish-recent-reviews \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Pubblica una recensione

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. review `string` (obbligatorio) ID interno della recensione che vuoi pubblicare.

Endpoint

PUT /api/clubs/{club}/reviews/{review}/publish

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{review}/publish \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Riattiva la pubblicazione automatica nelle impostazioni delle recensioni.

Parametri

club `string` (obbligatorio) ID del club

Endpoint

PUT /api/clubs/{club}/reviews-settings/re-enable-auto-publish

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings/re-enable-auto-publish \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Pubblica una risposta a una recensione tramite la piattaforma di origine (Google e così via).

Parametri

club `string` (obbligatorio) ID della struttura reviewId `string` (obbligatorio) ID della recensione PH (cercato nella tabella club-social-reviews) body `string` (obbligatorio)

Endpoint

POST /api/clubs/{club}/reviews/{reviewId}/respond

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{reviewId}/respond \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Annulla la pubblicazione di una recensione

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. review `string` (obbligatorio) ID interno della recensione di cui vuoi annullare la pubblicazione.

Endpoint

PUT /api/clubs/{club}/reviews/{review}/un-publish

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{review}/un-publish \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce dal database PH un elenco dei proprietari che appartengono al club specificato

Parametri

clubID `string` (obbligatorio) ID interno del club a cui vuoi accedere

Endpoint

GET /api/clubs/{clubID}/owners

Richiesta di esempio

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

Risposta

{}

Restituisce tutti i piani di iscrizione della struttura.

Parametri

facilityId `string` (obbligatorio) ID interno della struttura

Endpoint

GET /api/facilities/membership-plans/:facilityId

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/facilities/membership-plans/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiorna il record di un piano di iscrizione.

Parametri

facilityId `string` (obbligatorio) ID interno della struttura body `object` (obbligatorio) Oggetto JSON con i dati del piano di iscrizione che vuoi aggiornare.

Endpoint

PUT /api/facilities/membership-plans/:facilityId

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/facilities/membership-plans/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Riattiva la pubblicazione automatica nelle impostazioni delle recensioni.

Parametri

club `string` (obbligatorio) ID del club

Endpoint

PUT /api/clubs/{club}/reviews/publish-recent-reviews

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/publish-recent-reviews \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Riattiva la pubblicazione automatica nelle impostazioni delle recensioni.

Parametri

club `string` (obbligatorio) ID del club

Endpoint

PUT /api/clubs/{club}/reviews-settings/re-enable-auto-publish

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings/re-enable-auto-publish \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco di tutte le valute disponibili

Endpoint

GET /api/currencies

Richiesta di esempio

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

Risposta

{}

Restituisce la posizione geografica a partire dall'indirizzo IP.

Parametri

ip `string` (obbligatorio) Indirizzo IP da cercare

Endpoint

GET /api/geo/ip-location/:club

Richiesta di esempio

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

Risposta

{}

Restituisce la posizione geografica dell'utente corrente in base al suo IP.

Endpoint

GET /api/geo/ip-current

Richiesta di esempio

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

Risposta

{}

Restituisce solo l'indirizzo IP pubblico del client richiedente (nessuna geolocalizzazione, nessuna chiamata ad API di terze parti). Usato dall'applet degli Agenti AI per confrontare l'IP pubblico del browser con l'IP WAN segnalato da un dispositivo, per rilevare se si trovano sulla stessa rete.

Endpoint

GET /api/geo/client-ip

Richiesta di esempio

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

Risposta

{}

Parser dei numeri di telefono.

Parametri

body `string` (obbligatorio) Oggetto JSON del numero che vuoi analizzare.

Endpoint

POST /api/phone/parser

Richiesta di esempio

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

Risposta

{}

Restituisce il dispositivo orologio principale

Parametri

club_id `string` (obbligatorio) ID interno del club a cui vuoi aggiungere il dispositivo.

Endpoint

GET /api/clubs/{club_id}/smart-club/health-check/master-clock

Richiesta di esempio

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"

Risposta

{}

Restituisce il dispositivo Sonos principale

Parametri

club_id `string` (obbligatorio) ID interno del club a cui vuoi aggiungere il dispositivo.

Endpoint

GET /api/clubs/{club_id}/smart-club/health-check/sonos-mqtt

Richiesta di esempio

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"

Risposta

{}

ottieni le notifiche di batteria scarica dei dispositivi Duress per un determinato club.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/clubs/{club}/smart-club/health-check/low-battery-duress

Richiesta di esempio

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"

Risposta

{}

Restituisce i dati di analisi della rete

Parametri

club_id `string` (obbligatorio) ID interno del club a cui vuoi aggiungere il dispositivo.

Endpoint

GET /api/clubs/{club_id}/smart-club/health-check/network-analysis

Richiesta di esempio

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"

Risposta

{}

invia le notifiche di batteria scarica dei dispositivi Duress per un determinato club.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/clubs/{club}/smart-club/health-check/send-low-battery-duress-notifs

Richiesta di esempio

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"

Risposta

{}

Restituisce i dati dei test di velocità dei dispositivi per ogni tipo di dispositivo

Parametri

club_id `string` (obbligatorio) ID interno del club a cui vuoi aggiungere il dispositivo.

Endpoint

GET /api/clubs/{club_id}/smart-club/health-check/speed-test

Richiesta di esempio

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"

Risposta

{}

Ottieni gli insights delle schede di una struttura. Per impostazione predefinita restituisce i totali giornalieri aggregati di tutti gli editori, oppure un singolo editore quando viene fornito `publisherId`.

Parametri

facilityId `string` (obbligatorio) publisherId `string` (facoltativo) startDate `string` (obbligatorio) endDate `string` (obbligatorio)

Endpoint

GET /api/facilities/{facilityId}/directory-insights

Richiesta di esempio

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

Risposta

{}

Ottieni gli insights aggregati delle schede di un brand su tutti gli editori.

Parametri

brandId `string` (obbligatorio) startDate `string` (obbligatorio) endDate `string` (obbligatorio)

Endpoint

GET /api/brands/{brandId}/directory-insights

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/directory-insights \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Principali parole chiave di ricerca (con suddivisione tra brand e non brand) per una struttura, attualmente ricavate da Google Business Profile.

Parametri

facilityId `string` (obbligatorio) publisherId `string` (facoltativo) Il valore predefinito è "google": al momento è supportato solo Google. startDate `string` (obbligatorio) endDate `string` (obbligatorio) limit `string` (facoltativo)

Endpoint

GET /api/facilities/{facilityId}/directory-search-keywords

Richiesta di esempio

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

Risposta

{}

Principali parole chiave di ricerca per un brand, aggregate su tutte le strutture.

Parametri

brandId `string` (obbligatorio) startDate `string` (obbligatorio) endDate `string` (obbligatorio) limit `string` (facoltativo)

Endpoint

GET /api/brands/{brandId}/directory-search-keywords

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/directory-search-keywords \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca le domande e risposte di una struttura.

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/facilities/{facilityId}/qna

Richiesta di esempio

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

Risposta

{}

Rispondi a una domanda.

Endpoint

POST /api/facilities/{facilityId}/qna/{questionId}/answer

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna/{questionId}/answer \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elimina una risposta.

Endpoint

DELETE /api/facilities/{facilityId}/qna/{questionId}/answer/{answerId}

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna/{questionId}/answer/{answerId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce gli editori abilitati per l'organizzazione della struttura, con il relativo stato di connessione.

Parametri

facilityId `string` (obbligatorio) organisationId `string` (obbligatorio)

Endpoint

GET /api/facilities/{facilityId}/directory-publishers/resolved

Richiesta di esempio

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

Risposta

{}

Ottieni le impostazioni condivise di Door & Gate Access di una struttura

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/door-access/rules/{facilityId}

Richiesta di esempio

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

Risposta

{}

Aggiorna le impostazioni condivise di Door & Gate Access di una struttura

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

PUT /api/door-access/rules/{facilityId}

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/door-access/rules/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Risposta

{}

Ottieni le Access Policies di una struttura

La configurazione di accesso esistente viene convertita automaticamente in policy applicate equivalenti alla prima lettura.

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/door-access/policies/{facilityId}

Richiesta di esempio

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

Risposta

{}

Sostituisci le Access Policies con controllo ottimistico della revisione

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

PUT /api/door-access/policies/{facilityId}

Richiesta di esempio

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

Risposta

{}

Crea una Access Policy

Parametri

facilityId `string` (obbligatorio)

Endpoint

POST /api/door-access/policies/{facilityId}

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiorna una Access Policy

Parametri

facilityId `string` (obbligatorio) policyId `string` (obbligatorio)

Endpoint

PATCH /api/door-access/policies/{facilityId}/{policyId}

Richiesta di esempio

curl -X PATCH https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elimina una Access Policy

Parametri

facilityId `string` (obbligatorio) policyId `string` (obbligatorio) revision `integer` (obbligatorio)

Endpoint

DELETE /api/door-access/policies/{facilityId}/{policyId}

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Duplica una Access Policy con un nuovo ID stabile

Parametri

facilityId `string` (obbligatorio) policyId `string` (obbligatorio)

Endpoint

POST /api/door-access/policies/{facilityId}/{policyId}/duplicate

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId}/duplicate \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Conta gli utenti e le porte interessati da tutte le Access Policies

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/door-access/policies/{facilityId}/impacts

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/impacts \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Conta gli utenti e le porte interessati da una Access Policy

Parametri

facilityId `string` (obbligatorio) policyId `string` (obbligatorio)

Endpoint

GET /api/door-access/policies/{facilityId}/{policyId}/impact

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId}/impact \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca tipi di persona, stati e tag della struttura

Restituisce i valori distinti di tipo di persona, stato dell'iscrizione e tag presenti nelle righe User Access della struttura (ph-door-access-users), ricavati dalla sincronizzazione con i partner + inserimento manuale. L'applet door-gate-access li usa per popolare i menu a discesa delle regole di accesso. I tag sono l'unione dei `tags` sincronizzati e dei `customTags` amministrativi, come nel valutatore delle regole.

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/door-access/people-config/{facilityId}

Richiesta di esempio

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

Risposta

{}

Elenca i controller delle porte di una struttura con le relative regole di Door & Gate Access effettive

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/door-access/doors/{facilityId}

Richiesta di esempio

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

Risposta

{}

Salva override per porta, icona e configurazione lato dispositivo

Unico punto di scrittura per tutto ciò che l'applet di amministrazione DGA modifica su una porta: - `accessRulesOverride` / `geofenceOverride`: passa `null` per cancellarli e tornare al valore predefinito della struttura. - `icon`: chiave stabile (vedi services/door-access/door-icons.js); i valori sconosciuti restituiscono 400. - `holdTimeSeconds` (1\u201330), `maintenanceMode` (`off` / `force-open` / `force-closed`), `doorLocation` (testo libero, \u226464 caratteri), `playNotificationSoundOnRelayToggle` (booleano), `autoUnlockSchedule` (griglia di finestre settimanali). Questi campi un tempo erano solo di Device Management, ma ora l'applet li scrive direttamente, così gli amministratori non devono lasciare il pannello della porta per le modifiche di configurazione quotidiane. Quando viene modificato uno qualsiasi dei campi lato dispositivo, la route invia anche le variabili d'ambiente Balena corrispondenti (`RELAY_NOTIFICATION_SOUND`, `DOOR_MAINTENANCE_MODE`, `DOOR_AUTO_UNLOCK_SCHEDULE`) e invia un comando MQTT `unlockUpdates`, così il dispositivo applica la nuova configurazione senza attendere il successivo aggiornamento delle variabili Balena. Best effort \u2014 la risposta è 200 anche se Balena è temporaneamente irraggiungibile.

Parametri

facilityId `string` (obbligatorio) doorId `string` (obbligatorio)

Corpo della richiesta

Endpoint

PUT /api/door-access/doors/{facilityId}/{doorId}/override

Richiesta di esempio

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

Risposta

{}

Verifica leggera dello stato Balena per l'avviso di ricaricamento nel pannello della porta

Il pannello dell'applet DGA lo recupera in modo differito quando un amministratore apre una porta, per mostrare il testo corretto "il salvataggio ricaricherà il controller": la variante predefinita "pochi secondi" o quella più marcata "diversi minuti" quando è in sospeso anche un aggiornamento della release. Restituisce uno snapshot piatto ricavato da `balena.models.device.get()`. In caso di errore restituisce `data: null` (invece di un 5xx), così un'interruzione di Balena peggiora solo il testo dell'avviso invece di impedire l'apertura del pannello.

Parametri

facilityId `string` (obbligatorio) doorId `string` (obbligatorio)

Endpoint

GET /api/door-access/doors/{facilityId}/{doorId}/device-status

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/device-status \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Override amministrativo: sblocca una porta dall'applet

Attiva brevemente il relè usando l'attuale `holdTimeSeconds` della porta, scrivendo una riga di audit `admin-override` in ph-door-app-access-events, in modo che l'azione sia attribuibile nei Registri di accesso. Riesce sempre, anche con `maintenanceMode === 'force-closed'`: è la via d'uscita per gli amministratori. Restituisce 200 non appena viene inviata la pubblicazione MQTT; gli stati confermato / non riuscito / scaduto non vengono attesi qui (anche il flusso legacy /api/devices/door-controllers + /api/ics/devices/command è fire-and-forget).

Parametri

facilityId `string` (obbligatorio) doorId `string` (obbligatorio)

Endpoint

POST /api/door-access/doors/{facilityId}/{doorId}/unlock

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/unlock \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Riproduci una sequenza di segnali acustici di localizzazione sul controller della porta

Pubblica un comando MQTT `beep` affinché il controller emetta tre segnali acustici di media durata (~500 ms ciascuno, ~350 ms di pausa, ~2 s in totale). Usato dagli amministratori per individuare fisicamente un controller di porta sul posto. Il pulsante legacy di Device Management usa una raffica di ~30 s di segnali brevi, ma il driver del cicalino del firmware emette in modo affidabile solo il primo, quindi l'applet invia invece una sequenza più breve e affidabile. Nessuna riga di audit \u2014 azione diagnostica senza effetti sul controllo degli accessi.

Parametri

facilityId `string` (obbligatorio) doorId `string` (obbligatorio)

Endpoint

POST /api/door-access/doors/{facilityId}/{doorId}/identify

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/identify \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Riavvia da remoto un controller di porta

Pubblica lo stesso comando MQTT fire-and-forget `rebootDevice` che invia il pulsante legacy "Remotely Reboot Device" di Device Management, ma protetto dal modulo `door-gate-access`, così gli amministratori DGA possono riavviare un controller dalla sezione Avanzate del pannello della porta senza una concessione `device-management` separata. Restituisce 200 non appena la pubblicazione viene inviata; il dispositivo va offline per tutta la durata del riavvio.

Parametri

facilityId `string` (obbligatorio) doorId `string` (obbligatorio)

Endpoint

POST /api/door-access/doors/{facilityId}/{doorId}/reboot

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/reboot \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca le righe User Access di una struttura

Restituisce tutte le righe user-access non eliminate della struttura. Supporta filtri lato client (source, search, accessEnabled, hasGrants). Il calcolo lato server `hideExcluded` della Fase 4 verrà aggiunto quando sarà disponibile il valutatore delle concessioni ibride; per ora il parametro è accettato ma restituisce l'insieme completo.

Parametri

facilityId `string` (obbligatorio) search `string` (facoltativo) source `string` (facoltativo) accessEnabled `string` (facoltativo) hasGrants `string` (facoltativo) hideExcluded `boolean` (facoltativo) Se true, gli utenti sincronizzati (source != manual) che non potrebbero passare da nessuna porta in nessun momento in questa struttura vengono nascosti. La risposta include un oggetto `hidden: { count, sample }`.

Endpoint

GET /api/door-access/users/{facilityId}

Richiesta di esempio

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

Risposta

{}

Crea manualmente una riga User Access in una struttura

Crea una nuova riga con `source: 'manual'`. Restituisce 409 con `existingUserId` se il telefono o l'email forniti corrispondono già a una riga in questa struttura.

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/door-access/users/{facilityId}

Richiesta di esempio

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

Ottieni una singola riga User Access

Parametri

facilityId `string` (obbligatorio) userId `string` (obbligatorio)

Endpoint

GET /api/door-access/users/{facilityId}/{userId}

Richiesta di esempio

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

Risposta

{}

Aggiornamento parziale di una riga User Access

Modifica qualsiasi sottoinsieme dei campi di identità / autorizzazione. Passa `null` per cancellare un campo facoltativo. Restituisce 409 se il nuovo telefono o la nuova email coincidono con un'altra riga nella stessa struttura. `appMessage` accetta la stessa struttura del messaggio a livello di struttura su PUT /api/door-access/rules/{facilityId}: testo, gravità, link facoltativo, pianificazione facoltativa di inizio/fine. L'app mobile mostra questo messaggio nella dashboard solo all'utente destinatario.

Parametri

facilityId `string` (obbligatorio) userId `string` (obbligatorio)

Corpo della richiesta

Endpoint

PATCH /api/door-access/users/{facilityId}/{userId}

Richiesta di esempio

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

Risposta

{}

Eliminazione reversibile di una riga User Access

Contrassegna la riga con `deleted: true` e disattiva l'accesso. Il collegamento del registro di controllo allo userId viene mantenuto; gli amministratori possono riattivarla manualmente.

Parametri

facilityId `string` (obbligatorio) userId `string` (obbligatorio)

Endpoint

DELETE /api/door-access/users/{facilityId}/{userId}

Richiesta di esempio

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

Risposta

{}

Attribuzione dell'accesso per porta di un utente

Per ogni porta restituisce l'autorizzazione deterministica corrente (`allowedNow`, `allowedVia`, `deniedReason`) e i percorsi configurati per Access Policies, concessioni permanenti, pianificazioni delle policy, concessioni di finestre temporali amministrative e finestre aggiornate delle origini partner mappate. Restituisce anche la disponibilità attiva/successiva e l'aggiornamento delle origini. Il blockAllAccess della porta e la manutenzione vengono valutati prima di tutti i percorsi di autorizzazione.

Parametri

facilityId `string` (obbligatorio) userId `string` (obbligatorio)

Endpoint

GET /api/door-access/users/{facilityId}/{userId}/effective-access

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/effective-access \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Crea in blocco righe User Access da un'importazione CSV

Crea più righe `source: 'manual'` in un'unica richiesta, riutilizzando la stessa convalida, normalizzazione di telefono/email, verifica dei conflitti per struttura, messaggistica automatica e logica di invito (facoltativa) della singola creazione. Le righe vengono elaborate in ordine, quindi una riga successiva che coincide con una creata in precedenza viene segnalata come duplicato. Le concessioni vengono fornite come ID di porte/gruppi già risolti (il client risolve i nomi in ID). Le concessioni di finestre temporali vengono intenzionalmente rifiutate in blocco e devono essere aggiunte tramite l'endpoint di sostituzione per utente dopo l'importazione. Non genera mai eccezioni per riga; l'esito di ogni riga viene segnalato singolarmente.

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/door-access/users/{facilityId}/bulk

Richiesta di esempio

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

Risposta

{}

Sostituisci le concessioni di autorizzazione ibrida di una riga User Access

Interfaccia del valutatore ibrido della Fase 3. Le concessioni coesistono con le regole basate sui tag della struttura: un utente è autorizzato quando una delle due corrisponde al momento dello sblocco.

Parametri

facilityId `string` (obbligatorio) userId `string` (obbligatorio)

Corpo della richiesta

Endpoint

PUT /api/door-access/users/{facilityId}/{userId}/grants

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/grants \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Risposta

{}

Sostituisci le concessioni aggiuntive di Access Time Window di una riga User Access

Sostituisce solo `timeWindowGrants`; le `grants` permanenti e le `sourceTimeWindows` delle integrazioni restano invariate. Ogni elemento richiede un ambito (`facilityWide`, `doors` o `groups`) e una `window` assoluta o settimanale. L'invio di un array vuoto cancella esplicitamente tutte le finestre amministrative.

Parametri

facilityId `string` (obbligatorio) userId `string` (obbligatorio)

Corpo della richiesta

Endpoint

PUT /api/door-access/users/{facilityId}/{userId}/time-window-grants

Richiesta di esempio

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

Risposta

{}

Blocca una riga User Access rispetto agli aggiornamenti di sincronizzazione dall'origine

Imposta `decoupledFromSource: true`, cancella tutte le `sourceTimeWindows` gestite dalle integrazioni e fa sì che la sincronizzazione (cron + stream) registri e salti questa riga finché un amministratore non cancella il flag tramite /recouple.

Parametri

facilityId `string` (obbligatorio) userId `string` (obbligatorio)

Endpoint

POST /api/door-access/users/{facilityId}/{userId}/decouple

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/decouple \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Ricollega una riga User Access agli aggiornamenti di sincronizzazione dall'origine

Parametri

facilityId `string` (obbligatorio) userId `string` (obbligatorio)

Endpoint

POST /api/door-access/users/{facilityId}/{userId}/recouple

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/recouple \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Revoca tutti i token di aggiornamento dell'app Door & Gate Access di un utente

Revoca in base al telefono/email salvati dell'utente (la tabella dei token di aggiornamento ha come chiave `sha256(plaintext)`; i GSI byMobilePhone / byEmail ci consentono di eliminare a ventaglio partendo da un singolo utente). Anche altri utenti che condividono lo stesso telefono/email in un'altra struttura verrebbero disconnessi.

Parametri

facilityId `string` (obbligatorio) userId `string` (obbligatorio)

Endpoint

POST /api/door-access/users/{facilityId}/{userId}/logout

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/logout \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Invia (di nuovo) a un utente l'email di invito all'app Door & Gate Access

Forza l'invio dell'email di invito al download dell'app all'indirizzo email salvato dell'utente (solo email; nessun SMS). Ignora i controlli di idoneità e di invio già effettuato usati dal percorso di sincronizzazione automatica: si tratta di un'azione amministrativa esplicita. Restituisce 400 se l'utente non ha un'email registrata.

Parametri

facilityId `string` (obbligatorio) userId `string` (obbligatorio)

Endpoint

POST /api/door-access/users/{facilityId}/{userId}/resend-invite

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/resend-invite \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Anteprima dei destinatari di un invio in blocco di inviti all'app

Calcola l'insieme degli utenti che riceverebbero un'email di invito all'app. L'insieme di base comprende tutti gli utenti non eliminati con un'email che non hanno mai usato l'app (`appLastSeenAt` vuoto). Per impostazione predefinita l'insieme è ristretto agli utenti che hanno attualmente accesso (corrispondenza di regola o concessione) e non sono mai stati invitati; `includeAlreadyInvited` e `includeNoAccess` lo ampliano. Non viene inviata alcuna email: restituisce i conteggi, un piccolo campione e gli userId candidati per l'endpoint di esecuzione.

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/door-access/users/{facilityId}/bulk-invite/preview

Richiesta di esempio

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

Risposta

{}

Invia le email di invito all'app a un gruppo di utenti

Invia l'email di invito al download dell'app a ciascuno degli userId forniti (massimo 50 per richiesta; il client suddivide in lotti l'elenco completo dei candidati ricavato dall'anteprima). Ogni utente viene riconvalidato al momento dell'invio: le righe che non esistono più, non hanno un'email o hanno usato l'app dopo l'anteprima vengono saltate, mai segnate come non riuscite. Gli esiti per utente vengono segnalati singolarmente, così il client può riepilogare inviati / non riusciti / saltati.

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/door-access/users/{facilityId}/bulk-invite

Richiesta di esempio

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

Risposta

{}

Elenca i gruppi di porte di una struttura

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/door-access/door-groups/{facilityId}

Richiesta di esempio

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

Risposta

{}

Crea un gruppo di porte

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/door-access/door-groups/{facilityId}

Richiesta di esempio

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

Ottieni un singolo gruppo di porte

Parametri

facilityId `string` (obbligatorio) groupId `string` (obbligatorio)

Endpoint

GET /api/door-access/door-groups/{facilityId}/{groupId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiorna un gruppo di porte

Parametri

facilityId `string` (obbligatorio) groupId `string` (obbligatorio)

Corpo della richiesta

Endpoint

PATCH /api/door-access/door-groups/{facilityId}/{groupId}

Richiesta di esempio

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

Risposta

{}

Eliminazione reversibile di un gruppo di porte

Parametri

facilityId `string` (obbligatorio) groupId `string` (obbligatorio)

Endpoint

DELETE /api/door-access/door-groups/{facilityId}/{groupId}

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca le integrazioni con i partner configurate in una struttura

Restituisce le integrazioni con i partner della struttura (id, nome, logo, abilitazione) unendo ph-facility-partner-config con il catalogo ph-partners. Con ambito door-gate-access (così gli amministratori senza accesso alle integrazioni esterne possono comunque visualizzare i badge dei partner e l'elenco di sincronizzazione per partner).

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/door-access/partners/{facilityId}

Richiesta di esempio

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

Risposta

{}

Leggi la configurazione di sincronizzazione User Access di una struttura

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/door-access/sync-config/{facilityId}

Richiesta di esempio

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

Risposta

{}

Aggiorna la configurazione di sincronizzazione User Access di una struttura

Sono accettati solo i campi controllati dagli amministratori (`enabled`, `requireIdentifier` e la mappa `partners` dei partner); `lastRunAt` e `lastRunCounts` vengono scritti dal motore di sincronizzazione stesso. `partner.partners` è una mappa di abilitazione per partner con chiave partnerId (opt-out): quando l'interruttore principale `partner.enabled` è attivo, un partner si sincronizza a meno che non abbia qui una voce esplicita `{ enabled: false }`.

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

PUT /api/door-access/sync-config/{facilityId}

Richiesta di esempio

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

Risposta

{}

Leggi la configurazione della messaggistica automatica per utente di una struttura

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/door-access/auto-messages/{facilityId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiorna la configurazione della messaggistica automatica per utente di una struttura

Salva le regole, poi rivaluta immediatamente ogni riga User Access della struttura, così gli utenti esistenti ricevono o perdono subito il proprio messaggio automatico. I messaggi manuali e le righe scollegate restano invariati.

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

PUT /api/door-access/auto-messages/{facilityId}

Richiesta di esempio

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

Risposta

{}

Stato della rivalutazione in background dei messaggi automatici

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/door-access/auto-messages/{facilityId}/sweep-status

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId}/sweep-status \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Esegui su richiesta una sincronizzazione User Access per una struttura

Esamina in modo sincrono ogni origine abilitata (partner / cctv) della struttura e allinea le righe ph-door-access-users tramite la cascata di deduplicazione. Restituisce i conteggi per origine. Le origini disattivate compaiono come `skippedSyncDisabled: 1` invece di essere assenti, così l'interfaccia può mostrare entrambe le righe in modo coerente.

Parametri

facilityId `string` (obbligatorio)

Endpoint

POST /api/door-access/sync/{facilityId}/run

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/run \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Anteprima di prova di un'eliminazione in blocco degli utenti sincronizzati dai partner

Restituisce il conteggio + un campione delle righe user-access che verrebbero eliminate in modo reversibile, più un confirmToken che deve essere rimandato all'endpoint di esecuzione. Nessun dato viene modificato. I registri di accesso non vengono mai toccati.

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/door-access/sync/{facilityId}/bulk-delete/preview

Richiesta di esempio

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

Risposta

{}

Esegui un'eliminazione in blocco degli utenti sincronizzati dai partner (eliminazione reversibile)

Elimina in modo reversibile ogni riga user-access sincronizzata dai partner nell'ambito. Richiede il confirmToken restituito dall'anteprima; se l'insieme attuale è cambiato dall'anteprima, il token non corrisponde e la richiesta viene rifiutata (409), così l'amministratore la riesamina. I registri di accesso vengono conservati.

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/door-access/sync/{facilityId}/bulk-delete

Richiesta di esempio

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

Risposta

{}

Attività recente di sincronizzazione User Access (registro per la risoluzione dei problemi)

Restituisce gli esiti di sincronizzazione più recenti di una struttura (creato / saltato / disattivato) con il motivo, così gli amministratori possono capire perché un membro è stato o non è stato sincronizzato. Dal più recente.

Parametri

facilityId `string` (obbligatorio) limit `integer` (facoltativo)

Endpoint

GET /api/door-access/sync/{facilityId}/log

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/log \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca gli eventi Door & Gate Access di una struttura

Restituisce gli eventi di sblocco da app mobile, da override amministrativo e dalla Partner API esterna in un unico flusso in ordine cronologico inverso.

Parametri

facilityId `string` (obbligatorio) from `integer` (facoltativo) to `integer` (facoltativo) limit `integer` (facoltativo)

Endpoint

GET /api/door-access/events/{facilityId}

Richiesta di esempio

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

Risposta

{}

Simula una valutazione del geofence per il segnaposto della modalità di test amministrativa

Corpo della richiesta

Endpoint

POST /api/door-access/geofence/test

Richiesta di esempio

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

Risposta

{}

Ottieni lo stato di onboarding / attivazione di una struttura

Alimenta la pagina iniziale "Get Started" dell'applet e il banner di avanzamento della configurazione. Restituisce i conteggi in tempo reale di porte e utenti, i due passaggi principali derivati (esiste un utente, esiste una porta), i flag facoltativi "reviewed" salvati e se la struttura è attivata (entrambi i passaggi principali completati). La prima volta che una struttura viene attivata, viene registrato il timestamp activatedAt.

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/door-access/onboarding/{facilityId}

Richiesta di esempio

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

Risposta

{}

Aggiorna i flag di onboarding facoltativi "reviewed" di una struttura

Salva i flag facoltativi dell'elenco di controllo della configurazione che un amministratore spunta (regole di accesso, impostazioni di sincronizzazione, geofencing). I passaggi principali e l'attivazione sono ricavati in tempo reale dai conteggi dei dati e non possono essere impostati qui. Restituisce lo stato di onboarding completo aggiornato.

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

PUT /api/door-access/onboarding/{facilityId}

Richiesta di esempio

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

Risposta

{}

Restituisce una risposta JSON con i dati di analisi della struttura.

Parametri

clubId `string` (facoltativo) L'ID della struttura di cui recuperare i dati di analisi. fromDate `string` (facoltativo) La data di inizio dei dati di analisi da recuperare. toDate `string` (facoltativo) La data di fine dei dati di analisi da recuperare.

Endpoint

GET /clubs/{clubId}/lead-events

Richiesta di esempio

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

Risposta

{}

Restituisce una risposta JSON con i dati di analisi della struttura.

Parametri

clubId `string` (facoltativo) L'ID della struttura di cui recuperare i dati di analisi. fromDate `string` (facoltativo) La data di inizio dei dati di analisi da recuperare. toDate `string` (facoltativo) La data di fine dei dati di analisi da recuperare.

Endpoint

GET /clubs/{clubId}/analytics/page-views

Richiesta di esempio

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

Risposta

{}

Restituisce una risposta JSON con i dati di analisi della struttura.

Parametri

clubId `string` (facoltativo) L'ID della struttura di cui recuperare i dati di analisi. fromDate `string` (facoltativo) La data di inizio dei dati di analisi da recuperare. toDate `string` (facoltativo) La data di fine dei dati di analisi da recuperare.

Endpoint

GET /clubs/{clubId}/analytics/referrers

Richiesta di esempio

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

Risposta

{}

Restituisce una risposta JSON con i dati di analisi della struttura.

Parametri

clubId `string` (facoltativo) L'ID della struttura di cui recuperare i dati di analisi. fromDate `string` (facoltativo) La data di inizio dei dati di analisi da recuperare. toDate `string` (facoltativo) La data di fine dei dati di analisi da recuperare.

Endpoint

GET /clubs/{clubId}/analytics/socials

Richiesta di esempio

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

Risposta

{}

Restituisce una risposta JSON con i dati di analisi della struttura.

Parametri

clubId `string` (facoltativo) L'ID della struttura di cui recuperare i dati di analisi. fromDate `string` (facoltativo) La data di inizio dei dati di analisi da recuperare. toDate `string` (facoltativo) La data di fine dei dati di analisi da recuperare.

Endpoint

GET /clubs/{clubId}/analytics/top-cities

Richiesta di esempio

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

Risposta

{}

Restituisce una risposta JSON con i dati di analisi della struttura.

Parametri

clubId `string` (facoltativo) L'ID della struttura di cui recuperare i dati di analisi. fromDate `string` (facoltativo) La data di inizio dei dati di analisi da recuperare. toDate `string` (facoltativo) La data di fine dei dati di analisi da recuperare.

Endpoint

GET /clubs/{clubId}/analytics/total-page-views

Richiesta di esempio

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

Risposta

{}

Restituisce una risposta JSON con i dati di analisi della struttura.

Parametri

clubId `string` (facoltativo) L'ID della struttura di cui recuperare i dati di analisi. fromDate `string` (facoltativo) La data di inizio dei dati di analisi da recuperare. toDate `string` (facoltativo) La data di fine dei dati di analisi da recuperare.

Endpoint

GET /clubs/{clubId}/analytics/traffic

Richiesta di esempio

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

Risposta

{}

Genera un JWT (JSON Web Token) front-end temporaneo per i grafici incorporabili di Google Analytics nella pagina front-end 'analytics'.

Endpoint

GET /api/ga/onetimetoken

Richiesta di esempio

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

Risposta

{}

Restituisce i widget del pannello di controllo da 'The Training Camp' se la struttura ha membri attivi.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/reporting/apps/widgets/{club}

Richiesta di esempio

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

Risposta

{}

Restituisce tutte le festività della struttura non ancora verificate.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/reporting/club/{club}/unreviewed-holidays

Richiesta di esempio

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

Risposta

{}

Imposta come verificate tutte le festività della struttura non ancora verificate.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

PUT /api/reporting/club/{club}/review-holidays

Richiesta di esempio

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

Risposta

{}

Restituisce il report KPI in formato CSV, suddiviso mese per mese negli ultimi 12 mesi. *NOTA* Crea un unico report per TUTTE le strutture del sistema: non eseguirlo più volte in parallelo, altrimenti sovraccaricherai GymMaster!

Parametri

months `string` (facoltativo) Numero di mesi (dalla data corrente) da recuperare (predefinito 12)

Endpoint

GET /api/reporting/gymmaster/all-clubs-kpi-report

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/reporting/gymmaster/all-clubs-kpi-report \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce i grafici dei ricavi dell'MMS per una determinata struttura.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. range `string` (facoltativo) Intervallo in giorni (a ritroso dalla data corrente) da recuperare

Endpoint

GET /api/reporting/gymmaster/revenuegraph/{club}

Richiesta di esempio

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

Risposta

{}

Restituisce i dati/le analisi MMS (Member Management System) del pannello di controllo per una determinata struttura. I dati includono le statistiche di GymMaster/Perfect Gym e altre metriche interne raccolte dal nostro sistema.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. range `string` (facoltativo) Intervallo in giorni (a ritroso dalla data corrente) da recuperare

Endpoint

GET /api/reporting/gymmaster/widgets/{club}

Richiesta di esempio

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

Risposta

{}

Restituisce i dati del widget Myzone del pannello di controllo per una determinata struttura.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/reporting/myzone/widgets/{club}

Richiesta di esempio

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

Risposta

{}

Restituisce un oggetto con i servizi considerati offline da uno o più dei nostri endpoint di pagina di stato/monitoraggio, configurati tramite lo strumento interno 'Uptime Kuma'.

Endpoint

GET /api/reporting/statuspage/events

Richiesta di esempio

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

Risposta

{}

Restituisce le prenotazioni di allenamenti in programma nei prossimi 7 giorni.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/reporting/clubs/{club}/workout-bookings

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/reporting/clubs/{club}/workout-bookings \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco delle festività storiche di una struttura.

Parametri

clubId `string` (facoltativo) ID del club fromDate `string` (facoltativo) Timestamp Unix della data di inizio dell'intervallo di festività da restituire. toDate `string` (facoltativo) Timestamp Unix della data di fine dell'intervallo di festività da restituire.

Endpoint

GET /api/clubs/{clubId}/historical-holidays

Richiesta di esempio

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

Risposta

{}

Restituisce le automazioni dei dispositivi associate alla struttura.

Parametri

club `string` (obbligatorio) ID interno del club di cui vuoi elencare i dispositivi.

Endpoint

GET /api/ics/automations/list/{club}

Richiesta di esempio

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

Risposta

{}

Aggiorna la configurazione di un display/dispositivo esistente.

Parametri

club `string` (obbligatorio) ID interno della struttura in cui vuoi aggiornare il dispositivo. body `string` (obbligatorio) Oggetto JSON dei parametri di aggiornamento.

Endpoint

POST /api/ics/automations/update/{club}

Richiesta di esempio

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

Risposta

{}

Aggiunge/associa un dispositivo schermo fisico o un computer alla tua struttura.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi aggiungere il dispositivo. body `string` (obbligatorio) Oggetto JSON del nuovo schermo da associare.

Endpoint

POST /api/ics/devices/add/{club}

Richiesta di esempio

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

Risposta

{}

Indica al dispositivo di connettersi a un nuovo SSID in base ai parametri.

Parametri

club `string` (obbligatorio) ID interno della struttura in cui vuoi aggiornare il dispositivo. body `string` (obbligatorio) Oggetto JSON dei parametri di aggiornamento.

Endpoint

POST /api/ics/devices/changewifi/{club}

Richiesta di esempio

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

Risposta

{}

Aggiorna la configurazione di un display/dispositivo esistente.

Parametri

club `string` (obbligatorio) ID interno della struttura in cui vuoi aggiornare il dispositivo. body `string` (obbligatorio) Oggetto JSON dei parametri di aggiornamento.

Endpoint

POST /api/ics/devices/command/{club}

Richiesta di esempio

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

Risposta

{}

Carica un URL/una pagina web sullo schermo di un dispositivo specifico.

Parametri

club `string` (obbligatorio) ID interno della struttura in cui vuoi aggiornare il dispositivo. body `string` (obbligatorio) Oggetto JSON dei parametri di aggiornamento.

Endpoint

POST /api/ics/devices/loadurl/{club}

Richiesta di esempio

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

Risposta

{}

Aggiorna la configurazione di un display/dispositivo esistente.

Parametri

club `string` (obbligatorio) ID interno della struttura in cui vuoi aggiornare il dispositivo. body `string` (obbligatorio) Oggetto JSON dei parametri di aggiornamento.

Endpoint

PUT /api/ics/devices/update/{club}

Richiesta di esempio

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

Risposta

{}

Rinomina un display/dispositivo. Solo registrazione: a differenza dell'endpoint di aggiornamento, non invia nulla al dispositivo, quindi è disponibile anche per gli schermi che eseguono una build software a fine vita.

Parametri

club `string` (obbligatorio) ID interno della struttura a cui appartiene il dispositivo. body `string` (obbligatorio) Oggetto JSON con i parametri di ridenominazione.

Endpoint

PUT /api/ics/devices/rename/{club}

Richiesta di esempio

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

Risposta

{}

Ottiene i widget e i link ai contenuti multimediali offline di una struttura, in base alla data fornita.

Parametri

club `string` (obbligatorio) ID interno della struttura di cui vuoi modificare il templated content. date `string` (obbligatorio) Data per cui restituire gli URL dei widget: usa il formato `YYYY-MM-DD`.

Endpoint

GET /api/ics/external-resources/{club}

Richiesta di esempio

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

Risposta

{}

Ottiene i widget e i link ai contenuti multimediali offline di una struttura, in base alla data fornita.

Parametri

club `string` (obbligatorio) ID interno della struttura di cui vuoi modificare il templated content.

Endpoint

GET /api/ics/list-scheduled-workouts/{club}

Richiesta di esempio

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

Risposta

{}

Modifica il templated content di una determinata struttura.

Parametri

club `string` (obbligatorio) ID interno della struttura di cui vuoi modificare il templated content. body `string` (obbligatorio) Oggetto JSON del nuovo templated content da applicare.

Endpoint

POST /api/ics/loadprogram/{club}

Richiesta di esempio

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

Risposta

{}

Recupera la configurazione del templated content di un display/dispositivo esistente.

Parametri

club `string` (obbligatorio) ID interno della struttura di cui vuoi recuperare i dati del templated content.

Endpoint

GET /api/ics/programs/{club}

Richiesta di esempio

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

Risposta

{}

Aggiorna la configurazione del templated content di un display/dispositivo esistente.

Parametri

club `string` (obbligatorio) ID interno della struttura in cui vuoi aggiornare il dispositivo. body `string` (obbligatorio) Oggetto JSON dei parametri di aggiornamento.

Endpoint

PUT /api/ics/programs/{club}

Richiesta di esempio

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

Risposta

{}

Recupera le opzioni di configurazione del templated content.

Endpoint

GET /api/ics/programs/options/{facilityID}

Richiesta di esempio

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

Risposta

{}

Chat con contesto RAG: non ha accesso agli strumenti, solo a un semplice strumento di richiesta|risposta API che consente di recuperare direttamente le conoscenze dalla knowledge base.

Parametri

organisationId `string` (facoltativo) L'ID dell'organizzazione (rilevato automaticamente se non fornito)

Corpo della richiesta

Endpoint

POST /api/llm/chat

Richiesta di esempio

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

Risposta

{}

Elimina gli embedding degli articoli dal vector store e aggiorna lo stato di tracciamento degli embedding

Corpo della richiesta

Endpoint

DELETE /api/llm/delete-article

Richiesta di esempio

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

Risposta

{}

Elenca i record del tracker degli embedding per organizzazione e stato

Parametri

organisationId `string` (facoltativo) ID dell'organizzazione (risolto automaticamente se omesso) status `string` (obbligatorio) Stato da filtrare (deve essere uno tra in_queue, done, anomaly, fail, deleted) Limit `string` (facoltativo) Numero massimo di elementi per pagina LastEvaluatedKey `string` (facoltativo) JSON del LastEvaluatedKey di DynamoDB per la paginazione

Endpoint

GET /api/llm/embedding-track/by-org-and-status

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/llm/embedding-track/by-org-and-status \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca i record del tracker degli embedding per organizzazione (con filtro facoltativo per tipo di risorsa)

Parametri

organisationId `string` (facoltativo) ID dell'organizzazione (risolto automaticamente se omesso) resourceType `string` (facoltativo) Tipo di risorsa facoltativo (ad es. "article"). Se fornito, filtra i record in cui resourceTypeId inizia con "{type}#". Limit `string` (facoltativo) Numero massimo di elementi per pagina LastEvaluatedKey `string` (facoltativo) JSON del LastEvaluatedKey di DynamoDB per la paginazione

Endpoint

GET /api/llm/embedding-track/by-org

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/llm/embedding-track/by-org \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Inizializza la raccolta del database vettoriale dell'organizzazione

Parametri

organisationId `string` (facoltativo) L'ID dell'organizzazione (rilevato automaticamente se non fornito)

Endpoint

POST /api/llm/init-org

Richiesta di esempio

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

Risposta

{}

Ricerca semantica nella knowledge base

Parametri

organisationId `string` (facoltativo) L'ID dell'organizzazione (rilevato automaticamente se non fornito)

Corpo della richiesta

Endpoint

POST /api/llm/semantic-search

Richiesta di esempio

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

Risposta

{}

Avvia l'elaborazione in streaming degli articoli in coda per l'embedding, con aggiornamenti di avanzamento in tempo reale

Parametri

organisationId `string` (facoltativo) L'ID dell'organizzazione (rilevato automaticamente se non fornito)

Endpoint

POST /api/llm/start-embedding-stream

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/llm/start-embedding-stream \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Inserisce o aggiorna gli embedding degli articoli nel database vettoriale

Gestisce l'embedding degli articoli in base allo stato corrente: - Se l'articolo non è pubblicato OPPURE è privato: elimina gli embedding - Se l'articolo è pubblicato E pubblico: ricrea gli embedding con il contenuto completo Richiede sempre il corpo completo dell'articolo.

Parametri

organisationId `string` (facoltativo) L'ID dell'organizzazione (rilevato automaticamente se non fornito)

Corpo della richiesta

Endpoint

POST /api/llm/upsert-embeddings

Richiesta di esempio

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

Risposta

{}

Endpoint di test per eliminare in blocco gli embedding degli articoli per organizzazione e stato facoltativo

Parametri

organisationId `string` (facoltativo) ID dell'organizzazione (risolto automaticamente dal contesto utente se omesso) status `string` (facoltativo) Stato da filtrare (facoltativo: se omesso, elimina TUTTI gli articoli dell'organizzazione indipendentemente dallo stato) hardDelete `string` (facoltativo) Indica se eliminare definitivamente i record di tracciamento degli embedding (true) o eliminarli in modo reversibile aggiornandone lo stato (false)

Endpoint

DELETE /api/llm/test/batch-delete-by-status

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/llm/test/batch-delete-by-status \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Trasforma e suddivide il testo in blocchi con statistiche dettagliate

Endpoint di test che trasforma il testo e lo suddivide in blocchi, quindi fornisce statistiche dettagliate sulla distribuzione dei blocchi, inclusi conteggi di caratteri, percentuali e metriche di qualità, per aiutare a valutare l'efficacia della suddivisione.

Corpo della richiesta

Endpoint

POST /api/llm/test/transform-chunk

Richiesta di esempio

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

Risposta

{}

Ottieni il numero totale di vettori nell'indice vettoriale dell'organizzazione

Endpoint di test per contare tutti i vettori nell'indice vettoriale dell'organizzazione dell'utente corrente

Parametri

organisationId `string` (facoltativo) L'ID dell'organizzazione (rilevato automaticamente se non fornito)

Endpoint

GET /api/llm/test/vector-count

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-count \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elimina dall'indice vettoriale tutti i vettori di uno specifico articleId

Endpoint di test per eliminare dall'indice vettoriale dell'organizzazione dell'utente corrente tutti i vettori associati a uno specifico articleId.

Parametri

organisationId `string` (facoltativo) L'ID dell'organizzazione (rilevato automaticamente se non fornito) articleId `string` (obbligatorio) L'articleId di cui eliminare i vettori dryRun `string` (facoltativo) Se true, mostra solo cosa verrebbe eliminato senza eliminarlo effettivamente

Endpoint

DELETE /api/llm/test/vector-delete-article

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/llm/test/vector-delete-article \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Testa il Vector SDK elencando tutti gli indici

Endpoint di test per verificare la connettività del Vector SDK ed elencare tutti gli indici nel bucket vettoriale

Endpoint

GET /api/llm/test/vector-indices

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-indices \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Inizializza l'indice vettoriale di un'organizzazione

Crea il bucket vettoriale e l'indice per l'organizzazione dell'utente corrente

Parametri

organisationId `string` (facoltativo) L'ID dell'organizzazione (rilevato automaticamente se non fornito)

Endpoint

POST /api/llm/test/vector-init-index

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/llm/test/vector-init-index \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Ottieni tutti i metadati vettoriali di uno specifico articleId

Endpoint di test per recuperare dall'indice vettoriale tutti i blocchi vettoriali e i relativi metadati di uno specifico articleId. Utile per verificare come un articolo viene suddiviso e archiviato. Il filtro è gestito dal servizio di vector store.

Parametri

organisationId `string` (facoltativo) L'ID dell'organizzazione (rilevato automaticamente se non fornito) articleId `string` (obbligatorio) L'ID dell'articolo di cui recuperare i metadati vettoriali

Endpoint

GET /api/llm/test/vector-metadata-by-article

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-metadata-by-article \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Ottieni i vettori recenti con i metadati dall'indice vettoriale

Endpoint di test per recuperare dall'indice vettoriale dell'organizzazione dell'utente corrente i 10 vettori più recenti con i metadati (ma senza i dati vettoriali). Utile per verificare la struttura dei metadati.

Parametri

organisationId `string` (facoltativo) L'ID dell'organizzazione (rilevato automaticamente se non fornito) limit `string` (facoltativo) Numero di vettori recenti da restituire (massimo 100)

Endpoint

GET /api/llm/test/vector-recent

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-recent \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Carica una risorsa per il Marketing Manager/Designer nello storage S3.

Parametri

file `string` (facoltativo) Nome del file o della risorsa da caricare.

Endpoint

POST /api/marketing/design/static/download

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/marketing/design/static/download \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce le singole risorse in formato JSON da caricare nel gestore delle risorse.

Parametri

id `string` (obbligatorio) ID della risorsa da ottenere. organisationId `string` (obbligatorio) L'ID dell'organizzazione della struttura a cui appartiene la risorsa.

Endpoint

GET /api/marketing/assets/get/{id}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets/get/{id} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce tutte le risorse di design.

Parametri

body `string` (obbligatorio) Oggetto JSON dei dati della struttura che vuoi salvare. organisationId `string` (obbligatorio) L'ID dell'organizzazione della struttura a cui appartiene la risorsa. useCache `string` (facoltativo) search `string` (facoltativo) La query di ricerca per filtrare le risorse per nome o tag. brand `string` (facoltativo) Il brand per cui filtrare le risorse. tag `string` (facoltativo) Il tag per cui filtrare le risorse.

Endpoint

GET /api/marketing/assets/get

Richiesta di esempio

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

Risposta

{}

Restituisce una singola pagina di risorse di marketing per la stampa di un'organizzazione. Usa Algolia per la ricerca per pertinenza + la paginazione per pagine (con conteggi totali) e ricorre a DynamoDB quando Algolia non è disponibile.

Parametri

organisationId `string` (obbligatorio) L'ID dell'organizzazione della struttura a cui appartengono le risorse. search `string` (facoltativo) La query di ricerca per filtrare le risorse per nome o tag. brand `string` (facoltativo) Il brand per cui filtrare le risorse. tag `string` (facoltativo) Il tag per cui filtrare le risorse. page `string` (facoltativo) Numero di pagina da recuperare, a partire da zero. limit `string` (facoltativo) Numero di risorse per pagina (massimo 300). useCache `string` (facoltativo) Se false, ignora Algolia e interroga direttamente DynamoDB.

Endpoint

GET /api/marketing/assets

Richiesta di esempio

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

Risposta

{}

Restituisce l'elenco delle risorse disponibili caricate tramite il gestore delle risorse.

Parametri

organisationId `string` (obbligatorio)

Endpoint

GET /api/marketing/assets/list

Richiesta di esempio

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

Risposta

{}

Aggiunge/salva una risorsa.

Parametri

body `string` (obbligatorio) Oggetto JSON dei dati della struttura che vuoi salvare. organisationId `string` (obbligatorio) L'ID dell'organizzazione della struttura a cui appartiene la risorsa.

Endpoint

PUT /api/marketing/assets/save

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/assets/save \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Carica una risorsa per il Marketing Manager/Designer nello storage S3.

Parametri

file `string` (facoltativo) Nome del file o della risorsa da caricare. organisationId `string` (facoltativo) L'ID dell'organizzazione a cui appartiene la risorsa.

Endpoint

POST /api/marketing/assets/upload

Richiesta di esempio

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

Risposta

{}

Restituisce l'elenco di tutte le pagine personalizzate di un'organizzazione.

Parametri

organisationId `string` (obbligatorio) ID interno dell'organizzazione di cui restituire le pagine personalizzate.

Endpoint

GET /api/marketing/custom-pages

Richiesta di esempio

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

Risposta

{}

Inserisce o aggiorna una pagina personalizzata per un'organizzazione.

Parametri

organisationId `string` (obbligatorio) ID interno dell'organizzazione di cui restituire le pagine personalizzate. body `object` (obbligatorio) Dati della pagina personalizzata da inserire o aggiornare.

Endpoint

PUT /api/marketing/custom-pages

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/custom-pages \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco di tutte le pagine personalizzate di una struttura.

Parametri

facilityId `string` (obbligatorio) ID interno della struttura di cui restituire le pagine personalizzate.

Endpoint

GET /api/facilities/{facilityId}/marketing/custom-pages

Richiesta di esempio

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

Risposta

{}

Restituisce tutti i design esportati/renderizzati per uno specifico ID di struttura.

Parametri

club `string` (obbligatorio) ID interno della struttura che effettua la richiesta. sort `string` (facoltativo) Criterio di ordinamento dei design: sono supportati 'oldest', 'newest' o 'design'.

Endpoint

GET /api/marketing/designs/{club}/exports

Richiesta di esempio

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

Risposta

{}

Restituisce il contenuto HTML di un singolo design in formato JSON da caricare nell'editor.

Parametri

id `string` (obbligatorio) ID del design da ottenere.

Endpoint

GET /api/marketing/designs/get/{id}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/get/{id} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco delle mappature degli input nei design di marketing e stampa e nei modelli di design

Parametri

clubId `string` (obbligatorio) ID interno della struttura che effettua la richiesta. availableFeatures `string` (facoltativo) Restituisce tutti gli elementi con funzionalità specifiche brand `string` (facoltativo) Filtra i design per brand features `string` (facoltativo) Filtra i risultati in base alle funzionalità

Endpoint

GET /api/marketing/designs/input-mapping/{clubId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/input-mapping/{clubId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco dei design disponibili per una determinata struttura, utilizzabili all'interno dei design (Print Designs) creati nell'editor marketing/stampa dell'hub.

Parametri

club `string` (obbligatorio) ID interno della struttura che effettua la richiesta. designAdmin `string` (facoltativo) Restituisce tutti i dati dei design (vista amministrativa / richiede che l'utente sia amministratore). brand `string` (facoltativo) Filtra i design per brand

Endpoint

GET /api/marketing/designs/{club}/list

Richiesta di esempio

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

Risposta

{}

Forza il sistema a renderizzare/ri-renderizzare tutte le miniature e le anteprime dei design (usato principalmente se cambiano le risorse 'upstream' in S3 ecc.)... **NOTA** Puoi chiamare questa funzione solo una volta ogni X minuti (e non puoi chiamarla se è già in corso un rendering). Questo serve a evitare un carico eccessivo sui nostri server durante il rendering di tutti i design...

Endpoint

GET /api/marketing/designs/render-all-thumbnails

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/render-all-thumbnails \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Avvia il rendering di un design dinamico

Parametri

body `string` (obbligatorio) Oggetto JSON dei dati della struttura da inviare al processore di rendering del design...

Endpoint

POST /api/marketing/designs/dynamic/render-design

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/marketing/designs/dynamic/render-design \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiunge/salva/aggiorna un design.

Parametri

body `string` (obbligatorio) Oggetto JSON dei dati della struttura che vuoi salvare.

Endpoint

PUT /api/marketing/designs/{club}/save

Richiesta di esempio

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

Risposta

{}

Restituisce il singolo design statico in formato JSON da caricare

Parametri

id `string` (obbligatorio) ID del design statico da ottenere.

Endpoint

GET /api/marketing/designs/static/get/{id}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/static/get/{id} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiunge/salva/aggiorna un modello di design statico.

Parametri

body `string` (obbligatorio) Oggetto JSON dei dati della struttura che vuoi salvare.

Endpoint

PUT /api/marketing/designs/static/{club}/save

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/designs/static/{club}/save \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Rimuove dal sistema una variabile impostata dall'utente.

Parametri

club `string` (obbligatorio) ID interno della struttura che effettua la richiesta. body `string` (obbligatorio) JSON contenente l'ID della variabile da rimuovere.

Endpoint

DELETE /api/marketing/variables/{club}/delete

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/marketing/variables/{club}/delete \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco delle variabili disponibili per una determinata struttura, utilizzabili all'interno dei design (Print Designs) creati nell'editor marketing/stampa dell'hub.

Parametri

club `string` (obbligatorio) ID interno della struttura che effettua la richiesta.

Endpoint

GET /api/marketing/variables/{club}/list

Richiesta di esempio

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

Risposta

{}

Crea una singola nuova 'variabile' definita dall'utente per la struttura indicata.

Parametri

club `string` (obbligatorio) ID interno della struttura che effettua la richiesta. body `string` (obbligatorio) Oggetto JSON della nuova variabile.

Endpoint

POST /api/marketing/variables/{club}/new

Richiesta di esempio

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

Risposta

{}

Aggiunge/salva/aggiorna una o più variabili di design nel sistema tramite un array di oggetti.

Parametri

club `string` (obbligatorio) ID interno della struttura che effettua la richiesta. body `string` (obbligatorio) Array di uno o più oggetti JSON da aggiungere/aggiornare (consente di salvare più elementi/oggetti in un'unica richiesta API).

Endpoint

PUT /api/marketing/variables/{club}/save

Richiesta di esempio

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

Risposta

{}

Restituisce il manifest della documentazione MCP per l'utente connesso

Alimenta la pagina `/mcp-docs` dell'app. Restituisce l'URL del server MCP, le intestazioni di autenticazione supportate, l'identità del chiamante e il flag di amministratore, e l'elenco filtrato degli strumenti (filtrato in modo identico a `/mcp/tools/list`, così la pagina della documentazione non mostra mai uno strumento che il chiamante non può effettivamente usare).

Endpoint

GET /api/mcp/docs-manifest

Richiesta di esempio

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

Risposta

{}

Crea un contratto utente.

Parametri

body `object` (obbligatorio) Oggetto JSON dei dati della struttura che vuoi salvare.

Endpoint

POST /api/member-agreements/contracts-tna/:club

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco dei contratti.

Endpoint

GET /api/member-agreements/contracts-tna/:club

Richiesta di esempio

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

Risposta

{}

Elimina un contratto utente.

Endpoint

DELETE /api/member-agreements/contracts-tna/:club/:id

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce i dettagli di un contratto.

Endpoint

GET /api/member-agreements/contracts-tna/:club/:id

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiorna un contratto utente.

Parametri

body `object` (obbligatorio) Oggetto JSON dei dati della struttura che vuoi salvare.

Endpoint

PATCH /api/member-agreements/contracts-tna/:club/:id

Richiesta di esempio

curl -X PATCH https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Ottieni i contratti predefiniti della struttura.

Parametri

body `object` (obbligatorio) Oggetto JSON dei dati della struttura che vuoi salvare.

Endpoint

GET /api/member-agreements/default-tna/:club

Richiesta di esempio

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

Risposta

{}

Imposta il contratto predefinito della struttura.

Parametri

body `object` (obbligatorio) Oggetto JSON dei dati della struttura che vuoi salvare.

Endpoint

POST /api/member-agreements/default-tna/:club

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/member-agreements/default-tna/:club \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco dei contratti globali o regionali.

Endpoint

GET /api/member-agreements/global-tna/:club

Richiesta di esempio

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

Risposta

{}

Restituisce l'elenco dei membri con accordo.

Endpoint

GET /api/member-agreements/:club

Richiesta di esempio

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

Risposta

{}

Restituisce l'elenco dei membri della struttura per stagione per l'app del training camp.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. season `string` (facoltativo) Stagione del training camp per cui vuoi filtrare. userIds `string` (facoltativo) Array di ID utente da filtrare. useCache `string` (facoltativo) Indica se usare la cache. isUserMemberInfo `string` (facoltativo) Se abilitato, filtra i dati in base a userIds (si consiglia di usare un solo ID utente) e include i dati necessari, come classifica e preferenze dell'utente.

Endpoint

GET /api/members-leads/trainingcamp/club/season-members/{club}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/members-leads/trainingcamp/club/season-members/{club} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elimina più lead di prenotazione di allenamenti.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. body `string` (obbligatorio)

Endpoint

DELETE /api/members-leads/workout-booking/club/leads/{club}

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco dei lead di prenotazione di allenamenti di una struttura.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. all `string` (facoltativo) Indica se mostrare tutti i lead o solo quelli imminenti.

Endpoint

GET /api/members-leads/workout-booking/club/leads/{club}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiorna un lead di prenotazione di allenamento.

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere. body `string` (obbligatorio)

Endpoint

PUT /api/members-leads/workout-booking/club/leads/{club}

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Attiva o disattiva il contrassegno di un lead di prenotazione di allenamento.

Parametri

club `string` (obbligatorio) ID interno del club. body `string` (obbligatorio)

Endpoint

PATCH /api/members-leads/workout-booking/club/leads/{club}/flag

Richiesta di esempio

curl -X PATCH https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club}/flag \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Ottieni i moduli effettivi di una struttura

Restituisce tutti i moduli disponibili per una struttura risolvendo la gerarchia: preferenze della struttura → moduli del brand → moduli dell'organizzazione. Per migliorare le prestazioni, i risultati vengono memorizzati nella cache in Redis.

Parametri

facilityId `string` (obbligatorio) L'ID della struttura per cui risolvere i moduli

Endpoint

GET /api/facilities/{facilityId}/modules

Richiesta di esempio

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

Risposta

[]

Restituisce il catalogo dei moduli più la configurazione di visualizzazione del menu laterale. Viene restituito l'elenco completo dei moduli, così il renderer front-end può decidere la visibilità per ciascun utente; l'ACL è comunque applicato lato server tramite `auth.checkModuleAccess()`.

Endpoint

GET /api/modules

Richiesta di esempio

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

Risposta

{}

Ottieni le categorie di notifica.

Endpoint

GET /api/notification/categories

Richiesta di esempio

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

Risposta

{}

Elimina una notifica letta.

Endpoint

DELETE /api/club/notification/consumed/:club

Richiesta di esempio

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

Risposta

{}

Crea un messaggio di notifica.

Endpoint

POST /api/club/notification/consumed/:club

Richiesta di esempio

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

Risposta

{}

Restituisce l'array delle notifiche lette.

Endpoint

GET /api/club/notification/consumed/:club

Richiesta di esempio

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

Risposta

{}

Elimina un messaggio di notifica.

Endpoint

DELETE /api/club/notification/messages/:club

Richiesta di esempio

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

Risposta

{}

Restituisce l'array dei messaggi di notifica.

Endpoint

GET /api/club/notification/messages/:club

Richiesta di esempio

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

Risposta

{}

Aggiorna un messaggio di notifica.

Endpoint

PATCH /api/club/notification/messages/:club

Richiesta di esempio

curl -X PATCH https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Crea un messaggio di notifica.

Parametri

body `string` (obbligatorio)

Endpoint

POST /api/club/notification/messages/:club

Richiesta di esempio

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

Risposta

{}

Ottieni i destinatari delle notifiche per struttura.

Endpoint

POST /api/club/notification/viewers/:club

Richiesta di esempio

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

Risposta

{}

Ottieni le categorie di notifica per utente.

Endpoint

GET /api/club/notification/user-categories/:club

Richiesta di esempio

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

Risposta

{}

Crea un messaggio di notifica.

Endpoint

POST /api/notification/webhook

Richiesta di esempio

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

Risposta

{}

Ottieni la chiave pubblica VAPID per le notifiche push HTML5

Restituisce la chiave pubblica VAPID usata per creare le sottoscrizioni push del browser.

Endpoint

GET /html5-push/vapid-public-key

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/html5-push/vapid-public-key \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Salva o aggiorna una sottoscrizione push HTML5

Salva una sottoscrizione push del browser per l'utente corrente.

Corpo della richiesta

Endpoint

POST /html5-push/subscribe

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/html5-push/subscribe \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Risposta

{}

Elimina una sottoscrizione push HTML5

Rimuove una sottoscrizione push del browser per l'utente corrente.

Corpo della richiesta

Endpoint

POST /html5-push/unsubscribe

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/html5-push/unsubscribe \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Risposta

{}

Ottieni lo stato di onboarding della sede per l'utente chiamante

Restituisce le due parti dell'onboarding di una struttura, configurazione (dettagli + selezione dei prodotti, salvati nelle preferenze della struttura) e pagamento (ricavato in tempo reale dal record payment-settings della fatturazione SaaS), più un flag `required` personalizzato per il chiamante su cui si basa la shell dell'app. Solo per le sedi con stack tecnologico; le sedi con stack business restituiscono sempre required=false.

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/onboarding/{facilityId}

Richiesta di esempio

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

Risposta

{}

Salva l'avanzamento in corso della procedura guidata di onboarding di una struttura

Salva lo stato parziale della procedura guidata (selezione dei prodotti, testo libero "Other", dettagli dell'attività verificati, passaggio corrente), così un aggiornamento o un abbandono riprende da dove l'utente era rimasto. Non registra mai il completamento: vedi l'endpoint complete.

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

PUT /api/onboarding/{facilityId}

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/onboarding/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Risposta

{}

Genera suggerimenti di precompilazione AI per la procedura guidata di onboarding

Usa il contesto esistente di struttura/brand/organizzazione per proporre i dettagli della struttura (testo di presentazione, campi di contatto ordinati), una selezione di prodotti suggerita e brevi consigli personalizzati. I risultati vengono memorizzati nella cache in Redis per 7 giorni. I suggerimenti sono solo indicativi: il client li mostra in un modulo di revisione modificabile. Risponde sempre 200; `suggestions` è null quando l'AI non è disponibile, così la procedura guidata continua a funzionare.

Parametri

facilityId `string` (obbligatorio)

Endpoint

POST /api/onboarding/{facilityId}/ai-prefill

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/onboarding/{facilityId}/ai-prefill \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Completa la parte di configurazione dell'onboarding della sede

Convalida le selezioni e i dettagli confermati, salva i dettagli dell'attività nel record della struttura, inizializza il layout del menu tecnologico della struttura a partire dalla selezione dei prodotti (a meno che non esista già un layout personalizzato) e registra il completamento della configurazione. La parte di pagamento intenzionalmente NON può essere completata qui: è ricavata in tempo reale dal record payment-settings della fatturazione SaaS, quindi il requisito obbligatorio della carta non può essere aggirato chiamando questo endpoint. Restituisce lo stato aggiornato.

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/onboarding/{facilityId}/complete

Richiesta di esempio

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

Risposta

{}

Attiva un'azione dichiarata di un'integrazione partner per una struttura

Esegue un'azione "Run integration" dichiarata nel record del partner (ph-partners.actions[]), con ambito limitato a una struttura. Un blocco single-flight in Redis impedisce esecuzioni manuali simultanee per la stessa combinazione di azione e struttura.

Parametri

partnerId `string` (obbligatorio) actionId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/partners/{partnerId}/actions/{actionId}/run

Richiesta di esempio

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

Leggi lo stato di esecuzione di un'azione di integrazione partner

Restituisce se un'esecuzione manuale è attualmente in corso (blocco single-flight attivo) più l'ultima esecuzione richiesta, per il polling del pulsante delle impostazioni.

Parametri

partnerId `string` (obbligatorio) actionId `string` (obbligatorio) facilityId `string` (obbligatorio)

Endpoint

GET /api/partners/{partnerId}/actions/{actionId}/status

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/partners/{partnerId}/actions/{actionId}/status \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Ottieni tutte le configurazioni dei partner di un brand

Parametri

brandId `string` (obbligatorio) L'ID del brand

Endpoint

GET /api/partners/brand-config/{brandId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/partners/brand-config/{brandId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

[]

Crea o aggiorna la configurazione di un partner per un brand

Parametri

body `object` (obbligatorio)

Endpoint

PUT /api/partners/brand-config

Richiesta di esempio

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

Risposta

{}

Migra i dati dell'integrazione GymMaster in facility-partner-config

Interroga tutte le strutture con i campi gymMasterAPI e gymMasterDomain e crea/aggiorna i record facility-partner-config corrispondenti. Si tratta di un endpoint di migrazione da eseguire una sola volta.

Parametri

partnerId `string` (obbligatorio) L'ID partner GymMaster da usare per tutti i record migrati dryRun `boolean` (facoltativo) Se true, indica solo cosa verrebbe migrato senza scrivere nel database

Endpoint

GET /api/partners/migrate-gymmaster

Richiesta di esempio

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

Risposta

{}

Abilita un partner per un'organizzazione.

Parametri

partnerId `string` (obbligatorio) ID del partner

Endpoint

POST /api/partners/organisation/enable

Richiesta di esempio

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

Risposta

{}

Elenca i partner dell'organizzazione. Gli amministratori dell'organizzazione vedono solo i partner della propria organizzazione.

Endpoint

GET /api/partners/organisation

Richiesta di esempio

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

Risposta

{}

Rimuovi un partner dell'organizzazione.

Parametri

keyId `string` (obbligatorio) ID della chiave del partner dell'organizzazione organisationId `string` (obbligatorio) ID dell'organizzazione del partner

Endpoint

DELETE /api/partners/organisation/{keyId}

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/partners/organisation/{keyId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiorna la modalità di accesso e i moduli di un partner dell'organizzazione.

Parametri

keyId `string` (obbligatorio) ID della chiave del partner dell'organizzazione organisationId `string` (obbligatorio) ID dell'organizzazione del partner partnerId `string` (obbligatorio) ID del partner accessMode `string` (obbligatorio) Modalità di accesso del partner modules `string` (facoltativo) Elenco dei moduli per la modalità di accesso LIMITED

Endpoint

PUT /api/partners/organisation/update-access

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/partners/organisation/update-access \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Crea check-in per una struttura

Accetta un array di oggetti check-in e li inoltra alla Partner API per l'elaborazione. Massimo 25 check-in per richiesta.

Corpo della richiesta

Endpoint

POST /api/partners/check-ins

Richiesta di esempio

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

Risposta

{}

Elimina la configurazione di un partner per una struttura

Rimuove la configurazione di un'integrazione partner in una struttura

Parametri

facilityId `string` (obbligatorio) ID della struttura (ID club) partnerId `string` (obbligatorio) ID del partner

Endpoint

DELETE /api/partners/facility-config/{facilityId}/{partnerId}

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/partners/facility-config/{facilityId}/{partnerId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca tutte le configurazioni dei partner di una struttura

Restituisce tutte le integrazioni partner configurate per la struttura indicata

Parametri

facilityId `string` (obbligatorio) ID della struttura (ID club)

Endpoint

GET /api/partners/facility-config/{facilityId}

Richiesta di esempio

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

Risposta

{}

Crea o aggiorna la configurazione di un partner per una struttura

Inserisce o aggiorna la configurazione di un'integrazione partner in una struttura

Corpo della richiesta

Endpoint

POST /api/partners/facility-config

Richiesta di esempio

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

Risposta

{}

Elimina un membro tramite memberId

Elimina il record di un membro esistente usando il memberId.

Parametri

memberId `string` (obbligatorio) Identificatore univoco del membro

Endpoint

DELETE /api/partners/members/{memberId}

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/partners/members/{memberId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiorna un membro tramite memberId

Aggiorna il record di un membro esistente usando il memberId.

Parametri

memberId `string` (obbligatorio) Identificatore univoco del membro

Corpo della richiesta

Endpoint

PUT /api/partners/members/{memberId}

Richiesta di esempio

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

Risposta

{}

Ottieni lo stato di un'operazione di sincronizzazione dei membri

Restituisce lo stato corrente di un'operazione asincrona di creazione/eliminazione di membri avviata tramite POST /api/partners/members o DELETE /api/partners/members/{memberId}. Il frontend interroga periodicamente questo endpoint al posto del flusso legacy basato sul polling dell'elenco e sulla corrispondenza dei nomi. NOTA Il filtro per partnerId/facilityId a livello di riga è richiesto dalle regole di isolamento multi-tenant ma è rimandato a una PR di rafforzamento della Fase 3a.1: gli operationId sono UUID a 128 bit e la route è già protetta dall'accesso al modulo `external-integrations`. Chiunque disponga di un operationId valido e dell'accesso amministrativo al modulo può interrogarne lo stato.

Parametri

operationId `string` (obbligatorio) UUID restituito da POST/DELETE

Endpoint

GET /api/partners/members/operations/{operationId}

Richiesta di esempio

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

Risposta

{}

Crea o aggiorna i membri di una struttura

Accetta un array di oggetti membro e li inoltra alla Partner API per l'elaborazione. Massimo 25 membri per richiesta.

Corpo della richiesta

Endpoint

POST /api/partners/members

Richiesta di esempio

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

Risposta

{}

Crea o aggiorna i piani di iscrizione di una struttura

Accetta un array di oggetti piano di iscrizione e li inoltra alla Partner API per l'elaborazione. Massimo 25 piani di iscrizione per richiesta.

Corpo della richiesta

Endpoint

POST /api/partners/membership-plans

Richiesta di esempio

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

Risposta

{}

Crea un nuovo ruolo

Parametri

body `string` (obbligatorio) Oggetto ruolo

Endpoint

POST /api/roles

Richiesta di esempio

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

Risposta

{}

Restituisce l'elenco di tutti i ruoli

Endpoint

GET /api/roles

Richiesta di esempio

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

Risposta

{}

Elimina un ruolo tramite ID

Endpoint

DELETE /api/roles/{roleId}

Richiesta di esempio

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

Risposta

{}

Aggiorna un ruolo tramite ID

Parametri

body `string` (obbligatorio) Oggetto ruolo

Endpoint

PUT /api/roles/{roleId}

Richiesta di esempio

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

Risposta

{}

Crea una nuova voce aggiuntiva per la fattura della fatturazione SaaS

Parametri

organisationId `string` (facoltativo) L'ID dell'organizzazione per cui creare la voce aggiuntiva body `string` (facoltativo) Corpo della richiesta

Endpoint

POST /api/saas-billing/additional-line-items

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco delle voci aggiuntive della fattura della fatturazione SaaS

Parametri

organisationId `string` (obbligatorio) L'ID dell'organizzazione

Endpoint

GET /api/saas-billing/additional-line-items

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco delle voci aggiuntive della fattura SaaS della struttura

Endpoint

GET /api/clubs/{clubId}/saas-billing/additional-line-items

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/saas-billing/additional-line-items \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiorna una voce aggiuntiva della fattura della fatturazione SaaS

Parametri

itemId `string` (obbligatorio) L'ID della voce aggiuntiva da aggiornare body `string` (obbligatorio) Il corpo della richiesta

Endpoint

PUT /api/saas-billing/additional-line-items/{itemId}

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items/{itemId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Tariffe orarie combinate di Cloud Agent per Your Rates

Restituisce le dimensioni di Cloud Agent offerte con un unico prezzo orario combinato (hosting + software). La suddivisione non è inclusa. usedPlans sono gli SKU eseguiti da questa struttura negli ultimi 30 giorni.

Parametri

clubID `string` (obbligatorio)

Endpoint

GET /api/clubs/{clubID}/saas-billing/cloud-agent-rates

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/cloud-agent-rates \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elimina un report mensile importato

Parametri

club `string` (facoltativo) ID del club reportId `string` (facoltativo) ID del report

Endpoint

DELETE /api/saas-billing/extended-access/monthly-usage-report/{reportId}

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/{reportId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Ottieni il report più recente sull'archiviazione TVCC di una struttura

Restituisce lo snapshot giornaliero più recente dell'archiviazione TVCC della struttura dai registri di fatturazione salvati (fino agli ultimi 31 giorni). Include totalStorage, la data e gli addebiti relativi all'archiviazione.

Parametri

club `string` (obbligatorio) ID del club

Endpoint

GET /api/saas-billing/extended-access/latest-cctv-storage-report/{club}

Richiesta di esempio

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"

Risposta

{}

Restituisce una fattura PDF della struttura per il periodo indicato.

Parametri

club `string` (facoltativo) ID del club month `string` (facoltativo) Mese del report in formato numerico. 1 = gennaio, 2 = febbraio ecc. year `string` (facoltativo) Anno del report in formato numerico, ad es. 2021

Endpoint

GET /api/saas-billing/extended-access/monthly-usage-report/:club/invoice

Richiesta di esempio

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"

Risposta

{}

Pacchetto ZIP dei PDF delle fatture della piattaforma per i mesi di utilizzo selezionati. Corrispettivo in blocco dell'endpoint singolo .../invoice: alimenta il download a selezione multipla nella scheda Invoices & Receipts dell'applet Billing & Cost Management.

Parametri

club `string` (facoltativo) ID del club months `string` (facoltativo) Mesi di utilizzo/report separati da virgole in formato YYYY-MM (massimo 24)

Endpoint

GET /api/saas-billing/extended-access/monthly-usage-report/{club}/invoices.zip

Richiesta di esempio

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"

Risposta

{}

Restituisce i report di utilizzo mensili di più mesi in un'unica chiamata. Alimenta il grafico Cost History e le variazioni mese su mese nell'applet Billing & Cost Management. I mesi ancora senza utilizzo restituiscono report: null (in linea con il 404 → $0 dell'interfaccia dell'endpoint a mese singolo).

Parametri

club `string` (facoltativo) ID del club months `string` (facoltativo) Mesi di utilizzo separati da virgole in formato YYYY-MM (massimo 12)

Endpoint

GET /api/saas-billing/extended-access/monthly-usage-report/{club}/batch

Richiesta di esempio

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"

Risposta

{}

Importa i report mensili della struttura.

Parametri

club `string` (facoltativo) ID del club

Endpoint

PUT /api/saas-billing/extended-access/usage-report/:club

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce un report CSV dell'utilizzo TVCC degli ultimi 30 giorni per tutte le strutture.

Endpoint

GET /api/saas-billing/extended-access/usage-report/:club

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca tutti i report giornalieri del mese della struttura.

Parametri

club `string` (facoltativo) ID del club month `string` (facoltativo) Mese del report in formato numerico. 1 = gennaio, 2 = febbraio ecc. year `string` (facoltativo) Anno del report in formato numerico, ad es. 2021

Endpoint

GET /api/saas-billing/extended-access/monthly-usage-report/{club}/daily-reports

Richiesta di esempio

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"

Risposta

{}

Restituisce l'elenco dei report mensili importati per l'amministratore

Parametri

organisationId `string` (obbligatorio) ID dell'organizzazione

Endpoint

GET /api/saas-billing/extended-access/usage-report/imported

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/imported \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce un report CSV dell'utilizzo TVCC degli ultimi 30 giorni per tutte le strutture.

Parametri

club `string` (facoltativo) ID del club month `string` (facoltativo) Mese del report in formato numerico. 1 = gennaio, 2 = febbraio ecc. year `string` (facoltativo) Anno del report in formato numerico, ad es. 2021

Endpoint

GET /api/saas-billing/extended-access/monthly-usage-report/:club

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce il report di utilizzo periodico della struttura.

Parametri

club `string` (facoltativo) ID del club periodStart `string` (facoltativo) Inizio del periodo nel formato YYYY-MM-DD periodEnd `string` (facoltativo) Fine del periodo nel formato YYYY-MM-DD

Endpoint

GET /api/saas-billing/extended-access/periodical-usage-report/:club

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/periodical-usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Pacchetto dei PDF dei documenti di fatturazione in un unico ZIP, con tipi di documento misti: fatture della piattaforma (per mese di utilizzo), ricevute di ricarica del wallet SaaS e ricevute di ricarica di Model Router. Corrispettivo in blocco degli endpoint per tipo invoices.zip / receipts.zip per la scheda unificata Invoices & Receipts. Ogni mese/ID richiesto deve corrispondere a un documento di proprietà della struttura: un solo valore non valido fa fallire l'intero pacchetto.

Parametri

clubID `string` (obbligatorio) invoiceMonths `string` (facoltativo) Mesi di utilizzo separati da virgole in formato YYYY-MM walletIds `string` (facoltativo) ID delle transazioni di ricarica del wallet SaaS separati da virgole aiIds `string` (facoltativo) ID delle transazioni di ricarica di Model Router separati da virgole

Endpoint

GET /api/clubs/{clubID}/saas-billing/documents.zip

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/documents.zip \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiungi una nota a un record mensile

Parametri

recordID `string` (facoltativo) L'ID del record da ottenere note `string` (facoltativo) La nota da aggiungere al record

Endpoint

POST /api/saas-billing/monthly-records/{recordID}/notes

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{recordID}/notes \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco dei record mensili della fatturazione SaaS

Parametri

club `string` (facoltativo) L'ID della struttura da ottenere month `string` (facoltativo) Il mese di fatturazione in formato YYYY-MM

Endpoint

GET /api/saas-billing/monthly-records/{club}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{club} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco dei record mensili della fatturazione SaaS non riusciti o che richiedono 3D Secure

Parametri

clubID `string` (facoltativo) L'ID della struttura di cui ottenere i record mensili non riusciti

Endpoint

GET /api/clubs/:clubID/saas-billing/flagged

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/clubs/:clubID/saas-billing/flagged \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce TUTTI i record mensili della fatturazione SaaS (il registro delle fatture) di una struttura, dal mese di fatturazione più recente. Corrispettivo con ambito struttura dell'endpoint paginate-monthly-records riservato agli amministratori: alimenta la scheda "Invoices & Receipts" per i clienti nell'applet Billing & Cost Management.

Parametri

clubID `string` (facoltativo) L'ID della struttura di cui elencare i record mensili

Endpoint

GET /api/clubs/{clubID}/saas-billing/monthly-records

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/monthly-records \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco dei record mensili della fatturazione SaaS

Parametri

organisationId `string` (facoltativo) ID dell'organizzazione month `string` (facoltativo) Mese in formato MM. year `string` (facoltativo) Anno in formato YYYY. filters `string` (facoltativo) Filtri della stringa di query creati dalla tabella dati. order `string` (facoltativo) Stringa di query creata dalla tabella dati.

Endpoint

GET /api/saas-billing/monthly-records

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/monthly-records \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Riprova i pagamenti non riusciti di una struttura

Parametri

clubID `string` (facoltativo) L'ID della struttura di cui ottenere i record mensili non riusciti

Endpoint

PUT /api/clubs/:clubID/saas-billing/retry-failed-payments

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/:clubID/saas-billing/retry-failed-payments \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiorna un record mensile

Parametri

recordID `string` (facoltativo) L'ID del record da ottenere status `string` (facoltativo) Lo stato da assegnare al record

Endpoint

PUT /api/saas-billing/monthly-records/{recordID}

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{recordID} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Verifica se i pagamenti sono andati a buon fine e aggiorna lo stato del record

Parametri

clubID `string` (facoltativo) recordID `string` (facoltativo) L'ID del record da ottenere

Endpoint

PUT /api/clubs/{clubID}/saas-billing/monthly-records/{recordID}/validate

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/monthly-records/{recordID}/validate \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiungi un metodo di pagamento per una struttura.

Parametri

clubID `string` (facoltativo)

Endpoint

POST /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Sincronizza con Stripe i metodi di pagamento di una struttura.

Parametri

clubID `string` (facoltativo)

Endpoint

PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce il budget di spesa della struttura più i valori calcolati da inizio mese e previsti.

Parametri

clubID `string` (facoltativo)

Endpoint

GET /api/clubs/{clubID}/saas-billing/budget

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/budget \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Crea/aggiorna/cancella il budget di spesa della struttura.

Parametri

clubID `string` (facoltativo) body `object` (facoltativo)

Endpoint

PUT /api/clubs/{clubID}/saas-billing/budget

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/budget \
  -H "x-api-key: YOUR_API_KEY"

Elimina un metodo di pagamento dalle impostazioni di pagamento della struttura.

Parametri

clubID `string` (facoltativo) paymentMethodID `string` (facoltativo)

Endpoint

DELETE /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}

Richiesta di esempio

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"

Risposta

{}

Ottieni le impostazioni di pagamento di una struttura.

Parametri

clubID `string` (facoltativo)

Endpoint

GET /api/clubs/{clubID}/saas-billing/payment-settings

Richiesta di esempio

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

Risposta

{}

Aggiorna le impostazioni di pagamento di una struttura.

Parametri

clubID `string` (facoltativo) lockedOut `boolean` (facoltativo) Indica se la struttura verrà bloccata fuori dal sistema. pauseBilling `boolean` (facoltativo) Indica se la fatturazione automatica della struttura verrà sospesa. customerID `string` (facoltativo) Se aggiunto, aggiorna l'ID cliente Stripe della struttura. deleteSourceID `string` (facoltativo) Indica se eliminare il cliente di origine da Stripe.

Endpoint

PUT /api/clubs/{clubID}/saas-billing/payment-settings

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Ottieni il primo mese fatturato per tutte le strutture.

Parametri

clubID `string` (facoltativo)

Endpoint

GET /api/saas-billing/payment-settings/earliest-billed-month

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/payment-settings/earliest-billed-month \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca gli account che possono sbloccare un blocco di fatturazione di una struttura, per livelli: prima gli utenti che dispongono del modulo di fatturazione, gli amministratori dell'organizzazione solo come alternativa quando nessuno ne dispone.

Parametri

clubID `string` (obbligatorio)

Endpoint

GET /api/clubs/{clubID}/saas-billing/lockout-contacts

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/lockout-contacts \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Scorre a pagine tutte le strutture del sistema e restituisce gli ID cliente di ciascuna.

Parametri

clubID `string` (facoltativo) organisationId `string` (facoltativo) ID dell'organizzazione

Endpoint

GET /api/saas-billing/payment-settings/customer-ids

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/payment-settings/customer-ids \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Imposta il metodo di pagamento principale di una struttura.

Parametri

clubID `string` (facoltativo)

Endpoint

PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}/primary

Richiesta di esempio

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"

Risposta

{}

Aggiorna il profilo di fatturazione di una struttura.

Parametri

clubID `string` (facoltativo) invoiceEntity `string` (facoltativo) billingContacts `string` (facoltativo) Elenco degli UUID dei contatti KYC ccEmails `string` (facoltativo) Elenco degli indirizzi email da mettere in copia nelle fatture

Endpoint

PUT /api/clubs/{clubID}/saas-billing/payment-settings/billing-profile

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/billing-profile \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiorna un metodo di pagamento di una struttura.

Parametri

clubID `string` (facoltativo) cardID `string` (facoltativo)

Endpoint

PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{cardID}

Richiesta di esempio

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"

Risposta

{}

Restituisce, per ogni struttura, il dettaglio di tutti gli addebiti di prodotto applicabili e delle voci aggiuntive per l'esportazione CSV. Risolve la gerarchia di override globale/regione/struttura per ogni struttura a cui l'utente ha accesso.

Parametri

organisationId `string` (obbligatorio) ID dell'organizzazione per l'ACL

Endpoint

GET /api/saas-billing/charges-config/export

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/charges-config/export \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce la configurazione degli addebiti di una destinazione specifica

Parametri

clubId `string` (facoltativo) L'ID della struttura di cui ottenere la configurazione degli addebiti

Endpoint

GET /api/saas-billing/charges-config/{clubId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/charges-config/{clubId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Riepilogo di fatturazione dell'organizzazione della struttura: ambito effettivo del pagatore, eventuali modifiche di consolidamento pianificate e se il chiamante può gestire l'opzione di consolidamento.

Parametri

clubID `string` (obbligatorio)

Endpoint

GET /api/clubs/{clubID}/saas-billing/org/summary

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/org/summary \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Record mensili consolidati dell'organizzazione (estratti conto) con il dettaglio per struttura, dal più recente. Vuoto finché non si chiude il primo mese consolidato dell'organizzazione.

Parametri

clubID `string` (obbligatorio)

Endpoint

GET /api/clubs/{clubID}/saas-billing/org/monthly-records

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/org/monthly-records \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Riepilogo del wallet prepagato: saldo, addebiti di utilizzo da inizio mese, configurazione della ricarica automatica, metodo di fatturazione.

Parametri

clubID `string` (obbligatorio)

Endpoint

GET /api/clubs/{clubID}/saas-billing/wallet

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Movimenti del wallet, dal più recente. I wallet con ambito organizzazione includono le righe di tutte le strutture (ognuna riporta il clubID di origine).

Parametri

clubID `string` (obbligatorio) limit `string` (facoltativo) types `string` (facoltativo) tipi di transazione separati da virgole from `string` (facoltativo) to `string` (facoltativo) cursor `string` (facoltativo) nextCursor di una pagina precedente

Endpoint

GET /api/clubs/{clubID}/saas-billing/wallet/transactions

Richiesta di esempio

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

Risposta

{}

Ricevuta PDF con il brand per una singola transazione del wallet (ricariche e crediti).

Parametri

clubID `string` (obbligatorio) txId `string` (obbligatorio)

Endpoint

GET /api/clubs/{clubID}/saas-billing/wallet/transactions/{txId}/receipt.pdf

Richiesta di esempio

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"

Risposta

{}

Pacchetto ZIP delle ricevute PDF con il brand per le transazioni di ricarica del wallet selezionate. Ogni ID deve essere una ricarica (con carta o fattura) appartenente al wallet di questa struttura: gli addebiti di utilizzo e le rettifiche non hanno ricevute e vengono rifiutati.

Parametri

clubID `string` (obbligatorio) ids `string` (obbligatorio) ID delle transazioni separati da virgole (massimo 50)

Endpoint

GET /api/clubs/{clubID}/saas-billing/wallet/transactions/receipts.zip

Richiesta di esempio

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

Risposta

{}

Addebita una carta salvata della fatturazione SaaS per aggiungere saldo prepagato. Restituisce requires_action + clientSecret quando è necessaria l'autenticazione 3DS.

Parametri

clubID `string` (obbligatorio) body `object` (facoltativo)

Endpoint

POST /api/clubs/{clubID}/saas-billing/wallet/topup

Richiesta di esempio

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

Risposta

{}

Finalizza una ricarica del wallet dopo che l'applet ha completato l'autenticazione 3DS. Idempotente.

Parametri

clubID `string` (obbligatorio)

Endpoint

POST /api/clubs/{clubID}/saas-billing/wallet/topup/confirm

Richiesta di esempio

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

Risposta

{}

Aggiorna la regola di ricarica automatica della struttura (salvata nella riga di override del profilo di fatturazione).

Parametri

clubID `string` (obbligatorio) body `object` (facoltativo)

Endpoint

PATCH /api/clubs/{clubID}/saas-billing/wallet/auto-topup

Richiesta di esempio

curl -X PATCH https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/auto-topup \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Fatture di ricarica del wallet di questa struttura (metodo di pagamento con fattura), dalla più recente.

Parametri

clubID `string` (obbligatorio)

Endpoint

GET /api/clubs/{clubID}/saas-billing/wallet/invoices

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/invoices \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Richiedi una fattura di ricarica da pagare con riferimento (solo metodo di pagamento con fattura). Al massimo una fattura in sospeso per wallet: una seconda richiesta restituisce quella esistente con alreadyPending=true.

Parametri

clubID `string` (obbligatorio) body `string` (facoltativo) { amountCents: number }

Endpoint

POST /api/clubs/{clubID}/saas-billing/wallet/topup-invoice

Richiesta di esempio

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

Risposta

{}

Restituisce l'elenco degli ordini della struttura.

Parametri

facilityID `string` (facoltativo)

Endpoint

GET /api/store/facilities/:facilityID/orders

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/store/facilities/:facilityID/orders \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'elenco dei prodotti disponibili per la struttura.

Parametri

clubID `string` (obbligatorio) search `string` (facoltativo) limit `string` (facoltativo) page `string` (facoltativo) Il numero di pagina per la paginazione (a partire da 1).

Endpoint

GET /api/store/clubs/{clubID}/products

Richiesta di esempio

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

Risposta

{}

Elenca i record Stripe della struttura.

Parametri

club `string` (obbligatorio) fromDate `string` (facoltativo) Timestamp Unix toDate `string` (facoltativo) Timestamp Unix socketID `string` (obbligatorio) Identificatore univoco della richiesta socket

Endpoint

GET /api/club/{club}/stripe/records

Richiesta di esempio

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

Risposta

{}

Annulla un payment intent

Parametri

club `string` (obbligatorio) paymentIntent `string` (facoltativo)

Endpoint

GET /api/club/{club}/stripe/payment-intent/:paymentIntent/cancel

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/payment-intent/:paymentIntent/cancel \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Crea una Stripe Account Session per i componenti incorporati

Crea una Stripe Account Session per un account connesso. Restituisce un client_secret usato per inizializzare i componenti incorporati di Connect (contestazioni, pagamenti, gestione dell'account, documenti).

Corpo della richiesta

Endpoint

POST /api/stripe/account-session

Richiesta di esempio

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

Risposta

{}

Genera un link monouso alla pagina KYC di Stripe per un account connesso.

Parametri

club `string` (obbligatorio)

Endpoint

GET /api/club/{club}/stripe/generate-kyc-token

Richiesta di esempio

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

Risposta

{}

Ottiene i dettagli di un account connesso Stripe nell'ambito della procedura KYC.

Parametri

club `string` (obbligatorio)

Endpoint

GET /api/club/{club}/stripe/connect-account-details

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/connect-account-details \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Restituisce l'intera cronologia dei ticket in base all'ID della struttura

Parametri

club `string` (obbligatorio) ID interno del club a cui vuoi accedere.

Endpoint

GET /api/ticketing/clubtickets/{club}

Richiesta di esempio

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

Risposta

{}

Ottiene i reparti

Endpoint

GET /api/ticketing/departments

Richiesta di esempio

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

Risposta

{}

Ottiene i dettagli di un singolo ticket

Parametri

user `string` (obbligatorio) email dell'utente. ticketNumber `string` (obbligatorio) ID a 6 cifre del ticket a cui vuoi accedere. club `string` (obbligatorio) l'ID della struttura selezionata.

Endpoint

GET /api/ticketing/ticket-details/:ticketNumber/:club

Richiesta di esempio

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

Risposta

{}

Ottiene gli argomenti

Endpoint

GET /api/ticketing/topics

Richiesta di esempio

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

Risposta

{}

Ottiene tutti i ticket creati dall'utente attualmente connesso. Nota: questo valore è impostato dalle intestazioni fornite dal nostro servizio Google SSO.

Parametri

user `string` (obbligatorio) Email dell'utente attualmente connesso

Endpoint

GET /api/ticketing/usertickets

Richiesta di esempio

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

Risposta

{}

Crea un nuovo ticket

Parametri

club `string` (obbligatorio) l'ID della struttura selezionata.

Endpoint

POST /api/ticketing/clubticket/:club

Richiesta di esempio

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

Risposta

{}

Crea un nuovo ticket

Parametri

subject `string` (obbligatorio) Oggetto del ticket. message `string` (obbligatorio) Messaggio completo del ticket.

Endpoint

POST /api/ticketing/userticket

Richiesta di esempio

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

Risposta

{}

Crea una risposta a un ticket esistente

Parametri

subject `string` (obbligatorio) Oggetto del ticket. message `string` (obbligatorio) Messaggio completo del ticket.

Endpoint

POST /api/ticketing/user-reply

Richiesta di esempio

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

Risposta

{}

Recupera le preferenze di un utente

Endpoint

GET /api/user-preferences

Richiesta di esempio

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

Risposta

{}

Aggiorna le preferenze di un utente

Parametri

body `string` (obbligatorio)

Endpoint

PUT /api/user-preferences

Richiesta di esempio

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

Risposta

{}

Modifica la password dell'utente

Modifica la password dell'utente. Richiede la verifica OTP se l'utente ha un numero di telefono, oppure richiede di aggiungere un numero di telefono se non presente.

Corpo della richiesta

Endpoint

POST /api/user/change-password

Richiesta di esempio

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

Risposta

{}

Verifica lo stato 2FA dell'utente

Restituisce se l'autenticazione a due fattori è abilitata per l'utente e se uno dei suoi ruoli la impone

Endpoint

GET /api/user/check-2fa-status

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/user/check-2fa-status \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca le organizzazioni, le strutture e le regioni a cui l'utente ha accesso per un modulo specifico.

Parametri

moduleId `string` (obbligatorio)

Endpoint

POST /api/user/me/modules/{moduleId}/org-access

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/user/me/modules/{moduleId}/org-access \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Crea una 'richiesta di collegamento' da parte di un utente finale, che chiede di 'unirsi' a una struttura.

Parametri

body `string` (obbligatorio) Oggetto JSON del nuovo club da aggiungere al sistema.

Endpoint

POST /api/user/linkclub

Richiesta di esempio

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

Risposta

{}

Elenca tutte le strutture autorizzate per l'utente.

Endpoint

GET /api/user/listauthorised

Richiesta di esempio

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

Risposta

{}

Invia l'OTP su due canali (email + SMS)

Invia codici OTP sia all'indirizzo email dell'utente sia a un numero di telefono specificato. Usato per operazioni ad alta sicurezza, come la prima verifica di un numero di telefono. Questo endpoint invia solo gli OTP e non modifica alcun dato dell'utente.

Corpo della richiesta

Endpoint

POST /api/user/send-dual-otp

Richiesta di esempio

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

Risposta

{}

Invia l'OTP al numero di telefono o all'email

Invia un codice OTP al numero di telefono (SMS) o all'indirizzo email dell'utente per la verifica

Corpo della richiesta

Endpoint

POST /api/user/send-otp

Richiesta di esempio

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

Risposta

{}

Verifica se l'utente ha un accesso valido alle pagine sensibili

Restituisce se l'utente ha una sessione verificata tramite OTP valida per accedere alle pagine sensibili

Endpoint

GET /api/user/sensitive-page-access

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/user/sensitive-page-access \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Verifica l'OTP e concedi l'accesso alle pagine sensibili

Verifica il codice OTP e, se valido, concede l'accesso alle pagine sensibili per 1 ora

Corpo della richiesta

Endpoint

POST /api/user/sensitive-page-access/verify

Richiesta di esempio

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

Risposta

{}

Revoca l'accesso alle pagine sensibili (disconnessione dalle pagine sensibili)

Revoca la sessione corrente di accesso alle pagine sensibili dell'utente

Endpoint

POST /api/user/sensitive-page-access/revoke

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/user/sensitive-page-access/revoke \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Abilita o disabilita la 2FA

Abilita o disabilita l'autenticazione a due fattori per l'utente. Richiede il numero di telefono e la verifica OTP.

Corpo della richiesta

Endpoint

POST /api/user/toggle-2fa

Richiesta di esempio

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

Risposta

{}

Aggiorna il proprio profilo utente

Consente a un utente di aggiornare le informazioni del proprio profilo (nome, cognome, numero di telefono). Quando si aggiunge un numero di telefono per la prima volta, è richiesta la verifica OTP su due canali (codici sia via email sia via SMS). Quando si modifica un numero di telefono esistente, è richiesto solo l'OTP via email.

Corpo della richiesta

Endpoint

PATCH /api/user/update-profile

Richiesta di esempio

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

Risposta

{}

Recupera un'icona in base all'URL.

Endpoint

GET /api/website-icon

Richiesta di esempio

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

Risposta

{}

Elenca i modelli di voce del password vault

Parametri

organisationId `string` (facoltativo) Contesto dell'organizzazione per i controlli di accesso ai moduli

Endpoint

GET /api/vault/templates

Richiesta di esempio

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

Risposta

{}

Elenca le voci visibili del password vault

Parametri

organisationId `string` (obbligatorio) scope `string` (facoltativo)

Endpoint

GET /api/vault/entries

Richiesta di esempio

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

Risposta

{}

Crea una voce del password vault

Endpoint

POST /api/vault/entries

Richiesta di esempio

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

Ottieni una voce del password vault senza i valori segreti in chiaro

Parametri

entryId `string` (obbligatorio) organisationId `string` (obbligatorio)

Endpoint

GET /api/vault/entries/{entryId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Aggiorna una voce del password vault

Endpoint

PUT /api/vault/entries/{entryId}

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elimina una voce del password vault

Endpoint

DELETE /api/vault/entries/{entryId}

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Mostra i campi nascosti o segreti selezionati

Endpoint

POST /api/vault/entries/{entryId}/reveal

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/vault/entries/{entryId}/reveal \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca i riepiloghi delle cartelle del password vault

Endpoint

GET /api/vault/folders

Richiesta di esempio

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

Risposta

{}

Elenca le voci con codici di autenticazione

Endpoint

GET /api/vault/authenticator

Richiesta di esempio

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

Risposta

{}

Elenca i tipi di nodo dei workflow registrati

Endpoint

GET /api/workflow-engine/node-types

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/node-types \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Ottieni la proiezione degli orari della struttura usata dai blocchi dei workflow

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/workflow-engine/facility-hours/{facilityId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/facility-hours/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Anteprima del mittente delle email dei workflow con il brand della struttura

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/workflow-engine/email-branding/{facilityId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/email-branding/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca le risorse della struttura per la configurazione dei trigger

Parametri

facilityId `string` (obbligatorio) resourceType `string` (obbligatorio)

Endpoint

GET /api/workflow-engine/resources/{facilityId}/{resourceType}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/resources/{facilityId}/{resourceType} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca i workflow di una struttura

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/workflow-engine/workflows/{facilityId}

Richiesta di esempio

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

Risposta

{}

Crea una bozza di workflow da un grafo non vuoto

L'editor mantiene un nuovo workflow in locale finché non contiene almeno un blocco, quindi il primo salvataggio lo crea insieme al grafo in un'unica chiamata. Un corpo senza `nodes` viene rifiutato invece di essere salvato.

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/workflow-engine/workflows/{facilityId}

Richiesta di esempio

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

Risposta

{}

Elenca le credenziali che i workflow di una struttura possono usare

Restituisce le credenziali della struttura più quelle condivise a livello di brand o di organizzazione. I segreti non vengono mai restituiti; `hasValue` indica solo che ne è salvato uno.

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/workflow-engine/credentials/{facilityId}

Richiesta di esempio

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

Risposta

{}

Crea una credenziale per i workflow

Il livello di ambito deriva da `scopeType`; gli ID di brand e organizzazione vengono ricavati dalla struttura anziché accettati dal chiamante.

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/workflow-engine/credentials/{facilityId}

Richiesta di esempio

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

Impostazioni dei workflow a livello di struttura (destinatari delle notifiche di errore)

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/workflow-engine/facility-settings/{facilityId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/facility-settings/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Salva i destinatari delle notifiche di errore a livello di struttura

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

PUT /api/workflow-engine/facility-settings/{facilityId}

Richiesta di esempio

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

Risposta

{}

Sostituisci una credenziale per i workflow

Un `secret` vuoto mantiene quello salvato, così una credenziale può essere rinominata senza reinserirlo. Non è possibile rileggere un segreto.

Parametri

facilityId `string` (obbligatorio) credentialId `string` (obbligatorio)

Endpoint

PUT /api/workflow-engine/credentials/{facilityId}/{credentialId}

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId}/{credentialId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elimina una credenziale per i workflow

I nodi che vi fanno riferimento falliscono in modo sicuro alla chiamata successiva, anche nei workflow già pubblicati, perché uno snapshot salva solo il riferimento.

Parametri

facilityId `string` (obbligatorio) credentialId `string` (obbligatorio)

Endpoint

DELETE /api/workflow-engine/credentials/{facilityId}/{credentialId}

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId}/{credentialId} \
  -H "x-api-key: YOUR_API_KEY"

Ottieni l'URL del webhook di un trigger del workflow

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio) nodeId `string` (obbligatorio)

Endpoint

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Ruota l'URL del webhook di un trigger del workflow

Invalida immediatamente l'URL precedente.

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio) nodeId `string` (obbligatorio)

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook/rotate

Richiesta di esempio

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"

Risposta

{}

Ottieni un workflow tramite ID

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio)

Endpoint

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Crea o aggiorna una bozza di workflow

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio)

Corpo della richiesta

Endpoint

PUT /api/workflow-engine/workflows/{facilityId}/{workflowId}

Richiesta di esempio

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

Risposta

{}

Aggiorna il nome e/o la descrizione del workflow

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio)

Corpo della richiesta

Endpoint

PATCH /api/workflow-engine/workflows/{facilityId}/{workflowId}

Richiesta di esempio

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

Risposta

{}

Elimina un workflow e le sue versioni

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio)

Endpoint

DELETE /api/workflow-engine/workflows/{facilityId}/{workflowId}

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Duplica un workflow in una nuova bozza inattiva

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio)

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/duplicate

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/duplicate \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Pubblica la bozza corrente (snapshot di versione immutabile)

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/publish

Richiesta di esempio

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

Risposta

{}

Ripristina la bozza all'ultima versione pubblicata

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio)

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/discard

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/discard \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Abilita o disabilita un workflow

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio)

Corpo della richiesta

Endpoint

PATCH /api/workflow-engine/workflows/{facilityId}/{workflowId}/active

Richiesta di esempio

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

Risposta

{}

Genera o rivedi il grafo di un workflow con l'AI

Parametri

facilityId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/workflow-engine/generate/{facilityId}

Richiesta di esempio

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

Risposta

{}

Elenca i modelli su cui un nodo Agent può essere eseguito per questa struttura

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/workflow-engine/agent-models/{facilityId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-models/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca gli strumenti MCP che un nodo Agent può collegare per questa struttura

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/workflow-engine/agent-tools/{facilityId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-tools/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Cerca le conversazioni salvate dell'agente di questa struttura (associazioni della chiave di conversazione)

Parametri

facilityId `string` (obbligatorio) deviceId `string` (facoltativo) Limita alle conversazioni di un solo dispositivo Agent (il deviceId configurato nel nodo) q `string` (facoltativo) Corrispondenza di sottostringa, senza distinzione tra maiuscole e minuscole, sulla chiave di conversazione, sull'ID di sessione o sul nome del dispositivo limit `integer` (facoltativo) offset `integer` (facoltativo)

Endpoint

GET /api/workflow-engine/agent-conversations/{facilityId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-conversations/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Cerca le conversazioni conservate sul dispositivo Agent della struttura

Elenca le sessioni del dispositivo (le conversazioni nella barra laterale dell'interfaccia dell'agente), così un workflow può continuare una conversazione esistente con il suo contesto. La cronologia appartiene al dispositivo; quando la struttura ha più dispositivi, `deviceId` indica quale usare (il dispositivo configurato nel nodo). Dispositivo irraggiungibile → 502.

Parametri

facilityId `string` (obbligatorio) deviceId `string` (facoltativo) Il dispositivo Agent configurato nel nodo; omettilo per usare l'unico dispositivo della struttura q `string` (facoltativo) Corrispondenza di sottostringa, senza distinzione tra maiuscole e minuscole, sul titolo o sull'ID della sessione limit `integer` (facoltativo) offset `integer` (facoltativo)

Endpoint

GET /api/workflow-engine/agent-device-sessions/{facilityId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-device-sessions/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Cerca le bacheche nel kanban del dispositivo Agent della struttura

Alimenta il selettore Board ID del blocco Agent: Kanban. Corrispondenza di sottostringa, senza distinzione tra maiuscole e minuscole, sul nome o sullo slug della bacheca; `current` è lo slug della bacheca attiva del dispositivo, così il selettore delle attività può usarlo come ambito predefinito. Quando la struttura ha più dispositivi, `deviceId` indica quale usare. Dispositivo irraggiungibile → 502.

Parametri

facilityId `string` (obbligatorio) deviceId `string` (facoltativo) Il dispositivo Agent configurato nel nodo; omettilo per usare l'unico dispositivo della struttura q `string` (facoltativo) Corrispondenza di sottostringa, senza distinzione tra maiuscole e minuscole, sul nome o sullo slug della bacheca limit `integer` (facoltativo) offset `integer` (facoltativo)

Endpoint

GET /api/workflow-engine/kanban-boards/{facilityId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/kanban-boards/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Cerca le attività di una bacheca nel kanban del dispositivo Agent della struttura

Alimenta il selettore Task ID del blocco Agent: Kanban. Corrispondenza di sottostringa, senza distinzione tra maiuscole e minuscole, sull'ID, sul titolo o sul corpo dell'attività; le attività sono gestite per bacheca (il dispositivo non supporta la ricerca su più bacheche), quindi `board` delimita il recupero: omettilo per usare la bacheca attiva del dispositivo. Dispositivo irraggiungibile → 502.

Parametri

facilityId `string` (obbligatorio) deviceId `string` (facoltativo) Il dispositivo Agent configurato nel nodo; omettilo per usare l'unico dispositivo della struttura board `string` (facoltativo) Lo slug della bacheca da elencare; omettilo per usare la bacheca attiva del dispositivo q `string` (facoltativo) Corrispondenza di sottostringa, senza distinzione tra maiuscole e minuscole, sull'ID, sul titolo o sul corpo dell'attività limit `integer` (facoltativo) offset `integer` (facoltativo)

Endpoint

GET /api/workflow-engine/kanban-tasks/{facilityId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/kanban-tasks/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca i modelli di workflow selezionati, filtrati per questa struttura

Parametri

facilityId `string` (obbligatorio)

Endpoint

GET /api/workflow-engine/templates/{facilityId}

Richiesta di esempio

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

Risposta

{}

Crea un frammento di grafo da un modello per la bozza aperta

Parametri

facilityId `string` (obbligatorio) templateId `string` (obbligatorio)

Endpoint

POST /api/workflow-engine/templates/{facilityId}/{templateId}

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/templates/{facilityId}/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Contesto del selettore di ambito per la pagina di amministrazione dei modelli (livelli amministrativi)

Endpoint

GET /api/workflow-engine/template-admin/context

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/context \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Elenca i modelli che il chiamante può amministrare, con i flag di autorizzazione

Endpoint

GET /api/workflow-engine/template-admin

Richiesta di esempio

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

Risposta

{}

Crea un modello (livelli amministrativi)

Corpo della richiesta

Endpoint

POST /api/workflow-engine/template-admin

Richiesta di esempio

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

Dettagli del modello, grafo incluso, per l'editor amministrativo

Endpoint

GET /api/workflow-engine/template-admin/{templateId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Sostituisci un modello (organizzazione proprietaria)

Endpoint

PUT /api/workflow-engine/template-admin/{templateId}

Richiesta di esempio

curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Eliminazione reversibile di un modello (organizzazione proprietaria)

Endpoint

DELETE /api/workflow-engine/template-admin/{templateId}

Richiesta di esempio

curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Duplica un modello visibile in un ambito di destinazione che il chiamante può usare

Corpo della richiesta

Endpoint

POST /api/workflow-engine/template-admin/{templateId}/duplicate

Richiesta di esempio

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

Esegui il grafo pubblicato di un workflow da un trigger manuale

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/run

Richiesta di esempio

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

Risposta

{}

Testa la bozza salvata senza pubblicarla

Esegue il grafo della bozza corrente e registra il risultato con `mode: test` e senza `versionId`. La pubblicazione, il flag live e `publishedVersionId` non vengono mai modificati. Gli effetti collaterali sono simulati per impostazione predefinita; `sideEffects: live` richiede inoltre `confirmLiveSideEffects: true`.

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/test

Richiesta di esempio

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

Risposta

{}

Testa un nodo del workflow consentito

Esegue un nodo testabile in modo indipendente dalla bozza salvata. I valori delle variabili possono essere forniti dai passaggi di esecuzioni registrate. I metodi HTTP che apportano modifiche richiedono una conferma esplicita.

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/test-node

Richiesta di esempio

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

Risposta

{}

Elenca le esecuzioni recenti di un workflow

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio)

Endpoint

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Leggi un'esecuzione (stato + passaggi in ordine)

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio) executionId `string` (obbligatorio)

Endpoint

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Annulla il Delay in sospeso su cui è ferma un'esecuzione in attesa

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio) executionId `string` (obbligatorio)

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/cancel

Richiesta di esempio

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/cancel \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Riesegui un'esecuzione completata a partire dal payload del trigger registrato

`mode: published` riesegue esattamente la versione a cui era fissata l'esecuzione originale, con effetti collaterali reali. `mode: draft-test` riesegue la bozza corrente come test simulato. Un'esecuzione il cui payload del trigger è stato troncato in scrittura non può essere rieseguita.

Parametri

facilityId `string` (obbligatorio) workflowId `string` (obbligatorio) executionId `string` (obbligatorio)

Corpo della richiesta

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/retry

Richiesta di esempio

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

Risposta

{}

Ricerca indicizzata dei workflow che contengono un tipo di nodo

Parametri

nodeType `string` (obbligatorio) facilityId `string` (facoltativo) organisationId `string` (facoltativo)

Endpoint

GET /api/workflow-engine/master-view/{nodeType}

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/master-view/{nodeType} \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Proxy di reindirizzamento OAuth white-label (Connected Apps)

Reindirizzamento 302 pubblico e non autenticato che inoltra la callback di un provider OAuth alla callback di autenticazione della piattaforma di strumenti a monte, mantenendo la stringa di query. Consente alle app OAuth di proprietà di PH di registrare un URI di reindirizzamento performancehub.co, così il dominio del fornitore a monte non compare mai nella barra degli indirizzi (necessario per il futuro progetto di app OAuth personalizzate; innocuo con l'autenticazione gestita).

Endpoint

GET /guest/connected-apps/oauth-callback

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/oauth-callback \
  -H "x-api-key: YOUR_API_KEY"

Pagina finale della catena di connessione (Connected Apps)

Pagina leggera "puoi chiudere questa finestra" per la scheda OAuth in cui è stata eseguita una catena di connessione. Invia il risultato (suite/toolkit connesso + ID dei nuovi account, oppure il toolkit non riuscito) alla scheda del marketplace tramite window.opener.postMessage sulla stessa origine; se il collegamento con la finestra di origine è stato interrotto, ricorre a un deep link all'applet ph-ai-agent che riproduce la pagina di arrivo nell'app. Solo informativa: non contiene segreti e non esegue scritture.

Parametri

connected `string` (facoltativo) ID della suite o slug del toolkit che ha completato la connessione (caso di successo). accounts `string` (facoltativo) ID degli account connessi creati dalla catena, separati da virgole. connectError `string` (facoltativo) Slug del toolkit il cui passaggio non è riuscito (caso di errore).

Endpoint

GET /guest/connected-apps/finish

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/finish \
  -H "x-api-key: YOUR_API_KEY"

Risposta

{}

Callback di concatenamento della connessione della suite (Connected Apps)

Passaggio di callback OAuth per il flusso di connessione della suite con un clic. Il JWT di stato firmato (HS256, TTL di 30 minuti) codifica { clubID, deviceId, suite, toolkits, step, caids }: gli account si connettono a quel singolo dispositivo agente e caids accumula gli ID degli account creati a ogni passaggio (il reindirizzamento finale all'applet li trasporta, così il marketplace può proporre di etichettare i nuovi account). Contrassegna come connesso il toolkit del passaggio, quindi reindirizza con 302 al Connect Link del toolkit successivo oppure, al termine della suite, alla pagina dell'applet ph-ai-agent (con deep link all'agente). Le connessioni di un singolo toolkit passano dallo stesso gestore con una suite di un solo toolkit.

Parametri

state `string` (obbligatorio) JWT di stato firmato della catena di connessione.

Endpoint

GET /guest/connected-apps/connect-next

Richiesta di esempio

curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/connect-next \
  -H "x-api-key: YOUR_API_KEY"

Attiva l'email di impostazione della password

Convalida il link firmato di un'email di benvenuto, invia un'email di reimpostazione della password e mostra una pagina di conferma. Non richiede autenticazione.

Parametri

email `string` (obbligatorio) Indirizzo email dell'utente sig `string` (obbligatorio) Firma HMAC dell'email

Endpoint

GET /guest/setup-password

Richiesta di esempio

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

Risposta

{}