Introduction

Bienvenue dans l'API Performance Hub. Cette API gère les données des clubs et les systèmes clés qui s'intègrent à votre club et à ses systèmes externes. Il ne s'agit pas d'une API publique. Pour en savoir plus sur l'utilisation des différents systèmes Performance Hub pris en charge par cette API, consultez l'entrée correspondant au système souhaité dans notre [documentation Performance Hub](https://docs.performancehub.co).

URL de base

https://portal.hub.gymsystems.co

Authentification

Les informations d'authentification vous seront communiquées une fois votre intégration approuvée.

Événement « tour de l'agent terminé » signalé par l'appareil (déclencheur de notification web push)

Appelé par le sidecar d'un appareil AI Agent appairé (jamais par un navigateur) lorsqu'une exécution de l'agent lancée depuis l'interface web se termine après avoir duré plus longtemps que le seuil de notification de l'appareil. Authentifié par un JWT HS256 de courte durée propre à l'appareil (aud 'events'). Dédoublonné par appareil+session+début et limité en débit par appareil, puis envoyé aux abonnements push HTML5 de l'utilisateur à l'origine de l'exécution, avec un lien direct vers la conversation.

Corps de la requête

Point de terminaison

POST /ai/events/agent-turn-complete

Exemple de requête

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

Réponse

{}

Notification push initiée par l'agent (skill ph-notify)

Appelé par le sidecar d'un appareil AI Agent appairé pour le compte de l'agent embarqué (la skill ph-notify) afin d'envoyer une notification quelconque vers le navigateur et les appareils mobiles d'un utilisateur. Authentifié par un JWT HS256 de courte durée propre à l'appareil (aud 'events'). L'utilisateur cible doit avoir accès à l'appareil (politique d'accès par agent) ; s'il est omis, la notification est envoyée au propriétaire de l'appareil. Limité en débit par appareil, indépendamment des événements de fin de tour.

Corps de la requête

Point de terminaison

POST /ai/events/agent-notify

Exemple de requête

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

Réponse

{}

Envoyer une image de notification (skill ph-notify)

Accepte un corps d'image brut provenant d'un appareil appairé (JWT aud 'events') et le stocke dans le bucket public notify-media sous une clé UUID impossible à deviner. Les objets sont supprimés automatiquement après 7 jours (cycle de vie S3). Renvoie l'URL https publique à utiliser comme `imageUrl` dans /ai/events/agent-notify. Taille maximale de 5 Mo ; png/jpeg/gif/webp uniquement.

Corps de la requête

Point de terminaison

POST /ai/media/notify-image

Exemple de requête

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

Réponse

{}

Relais MCP d'appareil pour Connected Apps (outils SaaS externes)

Point de terminaison MCP Streamable HTTP pour les appareils Agent IA appairés (serveur MCP "connected_apps" sur l'écouteur :8790 du sidecar de l'appareil). Authentifié par un JWT HS256 de courte durée propre à chaque appareil (aud 'mcp', même identifiant que /mcp) et conditionné par l'indicateur d'activation Connected Apps de l'AGENT (les connexions sont propres à chaque appareil agent, pas à chaque installation). Les requêtes sont transmises en flux au serveur MCP de session de la plateforme d'outils en amont de l'agent, avec les en-têtes de session injectés côté serveur ; les identifiants en amont n'atteignent jamais l'appareil. Les noms d'outils et la marque du fournisseur sont passés en marque blanche dans les deux sens pendant le transit. Une erreur 401/410 en amont (session expirée) déclenche une recréation de session et une nouvelle tentative.

Point de terminaison

POST /mcp/apps

Exemple de requête

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

Réponse

{}

Rechercher dans les journaux d'audit de l'API (accès au module IAM & Admin)

Recherchez et filtrez les journaux d'accès à l'API grâce à des options de filtrage avancées. Les utilisateurs ne voient que les journaux des organisations auxquelles ils ont accès.

Paramètres

organisationId `string` (facultatif) ID de l'organisation pour la vérification des ACL (obligatoire)

Corps de la requête

Point de terminaison

POST /api/admin/audit-logs/search

Exemple de requête

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

Réponse

{}

Obtenir les statistiques des journaux d'audit mises en cache dans Redis (accès au module IAM & Admin)

Récupère les statistiques agrégées depuis le cache Redis pour un chargement instantané du tableau de bord

Paramètres

timeWindow `string` (facultatif) Fenêtre de temps des statistiques (12h par défaut)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Obtenir les statistiques des journaux d'audit (accès au module IAM & Admin)

Récupère les statistiques agrégées pour le tableau de bord. Limité aux organisations de l'utilisateur.

Paramètres

startTime `number` (facultatif) Heure de début (horodatage Unix), par défaut il y a 24 heures endTime `number` (facultatif) Heure de fin (horodatage Unix), par défaut maintenant

Point de terminaison

GET /api/admin/audit-logs/statistics

Exemple de requête

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

Réponse

{}

Obtenir les séries temporelles des journaux d'audit (accès au module IAM & Admin)

Récupère des séries temporelles regroupées par intervalles pour la visualisation chronologique des requêtes

Paramètres

timeWindow `string` (facultatif) Fenêtre de temps des séries temporelles : - 1h : dernière heure (blocs de 10 minutes) - 12h : 12 dernières heures (blocs de 10 minutes) - 24h : 24 dernières heures (blocs de 10 minutes) - 7d : 7 derniers jours (blocs d'une heure) - 14d : 14 derniers jours (blocs d'une heure)

Point de terminaison

GET /api/admin/audit-logs/timeseries

Exemple de requête

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

Réponse

{}

Obtenir les organisations dont l'utilisateur peut consulter les journaux d'audit (accès au module IAM & Admin)

Renvoie la liste des organisations dont l'utilisateur actuel peut consulter les journaux d'audit

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Appel initial pour créer un nouveau club. Notez que seul l'objet club « modèle » est créé : une seconde requête API est ensuite nécessaire pour compléter le club avec ses données, comme les horaires d'ouverture, l'emplacement, les URL des réseaux sociaux, etc.

Paramètres

body `string` (obligatoire) Objet JSON du nouveau club à ajouter au système.

Point de terminaison

POST /api/admin/clubs/addclub

Exemple de requête

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

Réponse

{}

Ajoute un nouvel utilisateur au système

Paramètres

body `string` (obligatoire) Objet JSON des données utilisateur à ajouter ou mettre à jour.

Point de terminaison

POST /api/users

Exemple de requête

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

Réponse

{}

Répertorie tous les utilisateurs (comptes Google Apps) ayant accès au système et à l'API de back-office

Point de terminaison

GET /api/admin/users/listusers

Exemple de requête

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

Réponse

{}

Répertorie les clés MCP d'un utilisateur (masquées). Les utilisateurs peuvent répertorier leurs propres clés.

Paramètres

userId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Crée une nouvelle clé API MCP pour un utilisateur. Les utilisateurs peuvent créer leurs propres clés.

Paramètres

userId `string` (obligatoire) body `object` (facultatif)

Point de terminaison

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

Exemple de requête

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

Révoque ou supprime une clé API MCP. Les utilisateurs peuvent supprimer leurs propres clés.

Paramètres

userId `string` (obligatoire) keyId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Retirer un rôle à un utilisateur

Paramètres

userId `string` (facultatif) Adresse e-mail de l'utilisateur auquel retirer le rôle. roleId `string` (facultatif) ID du rôle à retirer à l'utilisateur.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Met à jour les informations de profil d'un utilisateur existant (firstName, lastName, phoneNumber)

Paramètres

userId `string` (obligatoire) Adresse e-mail de l'utilisateur body `object` (obligatoire) Données du profil utilisateur à mettre à jour

Point de terminaison

PATCH /api/users/{userId}

Exemple de requête

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

Réponse

{}

Créer ou mettre à jour un rôle utilisateur

Paramètres

body `object` (facultatif)

Point de terminaison

PUT /api/users/{userId}/roles

Exemple de requête

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

Réponse

{}

Live Services exécutés sur l'AI Agent d'une installation (sélecteur de publication)

Récupère via le tunnel les Live Services détectés par le bridge de l'appareil, pour le sélecteur « Publish to Performance Hub » de l'applet. Nécessite le module ph-ai-agent ET un accès 'open' à l'appareil (même exigence que pour la publication). Chaque service est annoté avec publishedAppId lorsqu'une Custom App existe déjà pour son port.

Paramètres

club `string` (obligatoire) device `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Index des noms d'icônes MDI intégré à l'AI Agent d'une installation (sélecteur d'icônes)

Relaie via le tunnel l'index d'icônes MDI intégré au bridge de l'appareil (GET /__services/icons/mdi/index.json). Le sélecteur de publication et de modification utilise le catalogue fourni avec l'applet (même version épinglée 7.4.47) ; les SVG des applications publiées sont résolus à partir du paquet @mdi/js local de portal-server. Même exigence d'accès que le sélecteur de services (module ph-ai-agent + accès 'open' à l'appareil).

Paramètres

club `string` (obligatoire) device `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Récupérer un lot de SVG d'icônes MDI depuis l'AI Agent d'une installation (aperçus du sélecteur)

Résout en un seul appel jusqu'à 60 glyphes MDI nommés à partir du jeu d'icônes intégré à l'appareil, nettoyés côté serveur avec la même liste d'autorisation que les icônes d'application enregistrées. Utilisé par le sélecteur d'icônes pour afficher les résultats de recherche ; les noms inconnus renvoient null.

Paramètres

club `string` (obligatoire) device `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Audiences auxquelles le demandeur peut publier depuis cette installation

Périmètre d'audience que l'éditeur peut accorder, pour le sélecteur de publication et de modification : les installations couvertes par ses rôles ph-ai-agent (portée multi-installations), et s'il dispose du niveau organisation requis pour les audiences couvrant toute la marque ou toute l'organisation de cette installation. Les mêmes règles sont de nouveau appliquées côté serveur lors de la publication ou de la mise à jour (validatePublishAudience) : ce point de terminaison ne sert qu'à adapter l'interface.

Paramètres

club `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Suggestions d'utilisateurs pour l'audience nominative d'une application

Recherche UNIQUEMENT parmi les utilisateurs que le demandeur voit déjà : les personnes dont les rôles recoupent au moins une installation, région ou organisation de son propre accès ph-ai-agent. Une requête d'au moins 2 caractères et une limite de 10 résultats rendent ce point de terminaison inutilisable pour l'extraction de données ; le même périmètre est de nouveau appliqué côté serveur lors de l'enregistrement de l'audience.

Paramètres

club `string` (obligatoire) q `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Publier un Live Service AI Agent en tant que Custom App Performance Hub

Enregistre une application web hébergée par l'AI Agent de l'installation (un Live Service détecté par le bridge) comme élément du menu latéral « Custom Apps » pour l'audience choisie. Nécessite le module ph-ai-agent dans cette installation ET un accès 'open' à l'appareil ; l'audience est limitée par les portées de rôle de l'éditeur (vous ne pouvez jamais publier au-delà de ce que vous pouvez atteindre). L'identité du service est résolue EN DIRECT à partir de la liste /__services de l'appareil ; le schéma http/https n'est jamais enregistré.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Custom Apps publiées visibles dans cette installation

Renvoie les applications publiées actives dont l'audience couvre cette installation, sous la forme affichée par le menu latéral (appId, name, icon, description). L'audience est de nouveau résolue en direct à chaque appel, si bien que les changements d'accès prennent effet immédiatement.

Paramètres

club `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Applications publiées gérées depuis cette installation (vue de l'éditeur)

Lignes complètes des applications dont l'installation d'ORIGINE est ce club, pour la liste de gestion « Published Apps » de l'applet. Chaque ligne est annotée avec canManage pour l'utilisateur demandeur (éditeur).

Paramètres

club `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Générer un jeton de consultation limité au service pour une Custom App publiée

Renvoie une URL signée de courte durée et un jeton que le navigateur utilise pour ouvrir UNE application publiée directement sur la passerelle relais régionale de l'appareil. Le jeton contient une revendication svc qui désigne le port du service, si bien que la passerelle limite la session à /__services/proxy// : le chat et le terminal de l'agent ne sont jamais accessibles avec ce jeton. Les utilisateurs qui consultent l'application ont besoin du module custom-apps dans une installation couverte par l'audience de l'application ; ils n'ont PAS besoin du module ph-ai-agent ni d'un accès à l'agent de l'appareil.

Paramètres

club `string` (obligatoire) appId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Contact d'assistance d'une Custom App publiée (propriétaire)

Qui assure l'assistance de cette application publiée par un utilisateur : l'adresse e-mail de l'éditeur (ou, à défaut, du propriétaire de l'agent hôte). Affiché sur les panneaux hors ligne et d'erreur de l'utilisateur afin que les demandes d'assistance soient adressées au propriétaire de l'application plutôt qu'à Performance Hub : les applications publiées ne relèvent pas de l'assistance principale de PH. L'audience de l'application est vérifiée en premier ; les utilisateurs avec lesquels l'application n'a jamais été partagée n'obtiennent aucune information. Les applications en pause sont également résolues (les propriétaires reçoivent aussi les questions « pourquoi est-elle en pause ? »).

Paramètres

club `string` (obligatoire) appId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Envoyer par e-mail une demande d'assistance au propriétaire d'une Custom App publiée

Envoie le message de l'utilisateur au contact d'assistance de l'application (l'éditeur, ou à défaut le propriétaire de l'agent) sous forme d'e-mail personnalisé : destinataire le propriétaire, copie à l'utilisateur (sa trace de la demande), réponse adressée à l'utilisateur afin que le propriétaire lui réponde directement. Les applications publiées sont gérées par les utilisateurs : leur assistance reste donc hors de la file de Performance Hub. L'audience est de nouveau vérifiée ; une demande par utilisateur et par application toutes les 15 minutes (délai d'attente Redis, ouvert en cas d'échec).

Paramètres

club `string` (obligatoire) appId `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Mettre à jour une Custom App publiée (nom, icône, description, statut, audience)

Réservé à l'éditeur. Les modifications d'audience sont revalidées par rapport aux portées de rôle de la personne qui MODIFIE, avec les mêmes règles de limitation que pour la publication. Le statut bascule entre actif et en pause (les applications en pause disparaissent des menus et refusent la génération de jetons).

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Dépublier une Custom App (suppression logique)

Réservé à l'éditeur. Supprime logiquement la ligne du registre : l'application disparaît immédiatement des menus et la génération de jetons de consultation est refusée ; les sessions de passerelle déjà émises prennent fin à l'expiration du jeton.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Transférer la propriété d'une Custom App publiée

Reprend le flux de réattribution du propriétaire de l'AI Agent : l'éditeur actuel ou un propriétaire de compte (module de facturation) peut confier l'application à un autre utilisateur, qui la gère ensuite. Le nouveau propriétaire doit avoir accès à l'installation du club d'origine de l'application.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Exports de skills préparés sur l'AI Agent d'une installation (sélecteur de partage)

Relaie via le tunnel la liste des exports préparés du bridge de l'appareil (GET /__skills/exports) pour le sélecteur « Share a skill » de l'applet. Les exports sont préparés par l'étape de sécurité et de portabilité ph-skill-sharing exécutée sur l'appareil ; chaque entrée contient le résultat de l'analyse côté appareil. Nécessite le module ph-ai-agent ET un accès 'open' à l'appareil (même exigence que pour la publication).

Paramètres

club `string` (obligatoire) device `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Publier un export préparé en tant que NOUVELLE skill partagée (version brouillon)

Récupère via le tunnel l'archive d'export préparée indiquée depuis le bridge de l'appareil, l'extrait en mémoire (traversée de chemin, liens symboliques et tailles excessives refusés), exécute l'analyse de sécurité déterministe côté cloud, construit le manifeste à partir du frontmatter de SKILL.md, stocke l'archive adressée par son contenu dans le bucket privé des skills, puis crée l'en-tête de la skill et une version BROUILLON. Un blocage par l'analyse n'enregistre RIEN et renvoie les résultats. L'audience est limitée par les portées de rôle de l'éditeur. Soumettez le brouillon (POST submit) pour le publier.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Publier un export préparé en tant que NOUVELLE VERSION d'une skill partagée existante

Même traitement que pour la publication, appliqué à une skill existante : le nom indiqué dans le SKILL.md de l'export doit correspondre à la skill, la version doit être nouvelle (les versions sont immuables) et un journal des modifications est obligatoire. Seul l'éditeur peut ajouter des versions. Un blocage par l'analyse enregistre une ligne de version au statut 'rejected' (rapport uniquement, sans artefact) afin que les résultats apparaissent dans l'historique de l'éditeur.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Rapport d'analyse complet (+ revue LLM) d'une version de skill

Liste complète des résultats d'une version, réservée à l'éditeur et aux administrateurs de l'organisation (revues d'approbation) ; les personnes qui installent la skill voient à la place les totaux résumés dans le détail de la skill.

Paramètres

club `string` (obligatoire) skillId `string` (obligatoire) version `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Soumettre une version brouillon de skill (publication ou mise en file d'approbation)

Fait avancer une version brouillon selon la gouvernance de l'organisation. Lorsque l'organisation a activé la revue LLM, la revue des instructions est exécutée d'abord (au mieux ; un verdict 'fail' entraîne le rejet, un verdict 'flag' impose la file d'approbation). Les partages au niveau de l'installation sont publiés immédiatement, sauf si la gouvernance exige une approbation ; les partages dans la bibliothèque de l'organisation (audience marque ou organisation) exigent une approbation par défaut. La publication définit le latestVersion de la skill : les installations en politique 'auto' la récupèrent lors du prochain cycle de réconciliation.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Retirer une skill partagée (la supprime de la bibliothèque)

Réservé à l'éditeur. La skill disparaît immédiatement de la bibliothèque et refuse les nouvelles installations ; les installations EXISTANTES continuent de fonctionner : le retrait concerne uniquement la publication dans la liste, ce n'est pas un arrêt d'urgence.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Modifier la fiche d'une skill partagée (nom d'affichage, description, icône)

Réservé à l'éditeur. Champs de présentation uniquement : le nom canonique de la skill constitue son identité (manifestes, répertoires d'installation, correspondance des versions) et ne change jamais. Une chaîne vide réinitialise un champ à null (retour au nom canonique ou absence d'icône). Les icônes utilisent le catalogue MDI (mdi:icon-name), le même format que les applications d'agent publiées.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Transférer la propriété d'une skill partagée

Reprend le flux de transfert des applications publiées : l'éditeur actuel ou un propriétaire de compte (module de facturation) peut confier la skill à un autre utilisateur, qui gère ensuite ses versions et sa fiche. Le nouveau propriétaire doit avoir accès à l'installation du club d'origine de la skill.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Bibliothèque de skills visible dans cette installation (filtrée par audience)

Skills actives ayant au moins une version publiée dont l'audience couvre cette installation (ou désigne l'utilisateur), annotées avec le résumé de la dernière version publiée et l'adoption dans l'organisation (nombre d'installations distinctes, jamais le nombre brut d'installations de la skill). L'audience est de nouveau résolue en direct à chaque appel.

Paramètres

club `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Détail d'une skill (versions, prérequis, résumé d'analyse, adoption)

Détail complet d'une skill de la bibliothèque : historique des versions avec journaux des modifications et résumés d'analyse (les listes de points de terminaison par version alimentent la comparaison d'analyse lors des mises à jour), prérequis déclarés dans le manifeste, provenance de l'éditeur et indicateur d'adoption par nombre d'installations. L'audience est de nouveau vérifiée : les utilisateurs avec lesquels une skill n'a jamais été partagée n'obtiennent aucune information (l'éditeur et les administrateurs de l'organisation la voient toujours).

Paramètres

club `string` (obligatoire) skillId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Skills publiées depuis cette installation (liste de gestion de l'éditeur)

Lignes complètes des skills dont l'installation d'ORIGINE est ce club, chacune annotée avec canManage pour l'utilisateur demandeur et le résumé de sa dernière version (brouillons et approbations en attente inclus : il s'agit de la vue de travail de l'éditeur).

Paramètres

club `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Installer une skill de la bibliothèque sur l'AI Agent d'une installation

Soumis à la gouvernance : les installSources de l'organisation doivent l'autoriser, l'audience de la skill doit couvrir cette installation (ou désigner le demandeur), la version doit être publiée et le demandeur doit satisfaire le niveau whoCanInstall de l'appareil cible (propriétaire / utilisateur autorisé / administrateur de l'installation / administrateur de l'organisation, voir la gouvernance). Écrit la ligne de cycle de vie de l'installation (la source de vérité) et effectue immédiatement un envoi au mieux ; la tâche cron de réconciliation garantit la livraison dès que l'appareil est joignable.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Approuver une mise à jour de skill en attente pour une installation

Fait passer le desiredVersion de l'installation à la dernière version publiée (l'étape manuelle des politiques 'notify' et 'pinned', et le chemin suivi lorsque la gouvernance définit updatePosture sur 'approvalRequired'). Conserve la version actuelle comme cible de restauration en une étape et supprime tout blocage de mise à jour posé après une restauration (skipVersion). Même niveau d'autorisation whoCanInstall que pour l'installation.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Restaurer la version précédente d'une skill installée

Définit desiredVersion sur la previousVersion de la ligne d'installation (conservée à chaque changement de version) et laisse le chemin de livraison normal la réinstaller. En une étape : les versions sont permutées, donc deux restaurations successives vous ramènent au point de départ. Bloque également les mises à jour (skipVersion = la version abandonnée) afin que les politiques auto/notify conservent la restauration ; le blocage est levé lorsqu'une version strictement plus récente est publiée, lors d'un update-approve ou d'un set-policy.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Désinstaller une skill de l'AI Agent d'une installation

Marque la ligne d'installation comme en attente de désinstallation et envoie l'état souhaité ; la ligne est supprimée une fois que l'appareil confirme la suppression (relecture de réconciliation). Même niveau d'autorisation whoCanInstall que pour l'installation.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Définir la politique de mise à jour d'une skill installée sur un appareil

auto (la réconciliation applique automatiquement les nouvelles versions publiées, sauf si le updatePosture de l'organisation exige une approbation), notify (le propriétaire est averti une fois par nouvelle version et l'applique manuellement) ou pinned (aucun changement sans update-approve explicite). Changer de politique supprime tout blocage de mise à jour posé après une restauration (skipVersion). Même niveau d'autorisation whoCanInstall que pour l'installation.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Skills installées sur l'AI Agent d'une installation (onglet Skills)

Lignes de cycle de vie des installations d'un appareil, chacune annotée avec les champs de la fiche de la skill et l'existence éventuelle d'une version publiée plus récente. Nécessite un accès 'open' à l'appareil (l'onglet Skills se trouve dans le panneau de l'agent).

Paramètres

club `string` (obligatoire) device `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Versions de skills en attente d'approbation dans l'organisation de cette installation

File d'approbation des administrateurs de l'organisation : toutes les versions en attente d'approbation parmi les skills de l'organisation, avec la fiche de la skill et les résumés d'analyse et de revue LLM. Réservé aux administrateurs de l'organisation.

Paramètres

club `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Approuver une version de skill en attente (la publie)

Réservé aux administrateurs de l'organisation. La version est publiée, le latestVersion de la skill est mis à jour et l'éditeur est averti. Les installations en politique 'auto' récupèrent la version lors du prochain cycle de réconciliation.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Refuser une version de skill en attente

Réservé aux administrateurs de l'organisation. La version est refusée avec le motif du réviseur et l'éditeur est averti : il peut corriger les problèmes relevés et soumettre une nouvelle version (les versions sont immuables).

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Gouvernance effective des Agent Skills pour l'organisation de cette installation

Politique enregistrée de l'organisation, fusionnée avec les valeurs par défaut de la plateforme (une organisation sans ligne enregistrée voit uniquement les valeurs par défaut). Réservé aux administrateurs de l'organisation.

Paramètres

club `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Mettre à jour la gouvernance des Agent Skills pour l'organisation de cette installation

Mise à jour partielle : seuls les champs fournis changent ; tout le reste conserve sa valeur enregistrée ou par défaut. Réservé aux administrateurs de l'organisation. Les exceptions par appareil se trouvent sur la ligne d'enregistrement, via les routes existantes de configuration des appareils.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Obtenir les données environnementales d'une installation

Renvoie les conditions météo actuelles, y compris le lever et le coucher du soleil (via Open-Meteo), ainsi que la température intérieure de l'installation (issue des capteurs Duress) pour le club indiqué. Mis en cache dans Redis pendant 30 minutes.

Paramètres

clubId `string` (obligatoire) ID interne du club ou de l'installation

Point de terminaison

GET /api/clubs/{clubId}/environment

Exemple de requête

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

Réponse

{}

Ajoute ou associe un appareil IoT générique à un club.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez ajouter l'appareil. body `string` (obligatoire) Objet JSON du nouvel écran à associer.

Point de terminaison

POST /api/devices/addGenericDevice/{club}

Exemple de requête

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

Réponse

{}

Retirer et réinitialiser un écran d'affichage aux paramètres d'usine

Supprime l'association active de l'écran à l'installation et programme une réinitialisation d'usine persistante. Un écran éteint applique la réinitialisation après sa prochaine mise sous tension et reconnexion, puis revient à sa page d'appairage HDMI. L'historique de facturation est conservé.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Associe un contrôleur de porte à une installation.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Met à jour les paramètres d'un contrôleur de porte pour une installation.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Met hors service un contrôleur de porte d'une installation.

Paramètres

club `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la configuration des relais d'un contrôleur de porte.

Paramètres

uuid `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie les métadonnées de l'appareil

Paramètres

uuid `string` (obligatoire) ID unique de l'appareil

Point de terminaison

GET /api/devices/metadata/{uuid}

Exemple de requête

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

Réponse

{}

Renvoie les métadonnées de l'appareil. La réponse contient la ligne de métadonnées au premier niveau (ancienne forme), ainsi que `detectedType` (camera | ai-edge-processor | door-controller | ph-ai-agent | null) et `online` (true si l'appareil a été mis à jour au cours des 5 dernières minutes).

Paramètres

deviceSerialNumber `string` (obligatoire) Numéro de série de l'appareil

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie les données Smart Club du club.

Paramètres

club_id `string` (obligatoire) ID interne du club auquel vous souhaitez ajouter l'appareil.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie tous les appareils associés à un club.

Paramètres

club `string` (obligatoire) ID interne du club dont vous souhaitez répertorier les appareils.

Point de terminaison

GET /api/devices/list/{club}

Exemple de requête

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

Réponse

{}

Renvoie toutes les versions d'application publiées pour nos appareils balena.

Point de terminaison

GET /api/devices/listReleases

Exemple de requête

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

Réponse

{}

Déplace un appareil vers une nouvelle installation (club) et met à jour les systèmes associés.

Paramètres

club `string` (obligatoire) ID de l'installation source (club dans lequel se trouve actuellement l'appareil) body `object` (obligatoire) Paramètres du déplacement

Point de terminaison

POST /api/devices/move/{club}

Exemple de requête

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

Réponse

{}

Tente d'établir une connexion au routeur d'une installation en sélectionnant le meilleur appareil du club et en envoyant une commande MQTT pour créer un tunnel.

Paramètres

facilityID `string` (obligatoire) ID interne de l'installation pour laquelle la connexion au routeur est tentée.

Point de terminaison

GET /api/devices/openRouterWebpage/{facilityID}

Exemple de requête

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

Réponse

{}

Catalogue Cloud Agent (zones, tailles, prix de vente en direct)

Paramètres

club `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Obtenir un devis pour un Cloud Agent (logiciel + hébergement)

Point de terminaison

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

Exemple de requête

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

Lancer un Cloud Agent (mise en file du provisionnement + association automatique)

Point de terminaison

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

Exemple de requête

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

État de la tâche Cloud Agent

Point de terminaison

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

Exemple de requête

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

Purger un Cloud Agent (VM + balena + enregistrement)

Point de terminaison

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

Exemple de requête

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

Résoudre la suppression en attente d'un Cloud Agent (relancer la sauvegarde, supprimer sans sauvegarde ou annuler)

Point de terminaison

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

Exemple de requête

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

Répertorier les Connected Apps d'un agent (suites + applications avec comptes connectés)

Renvoie l'état des Connected Apps de l'agent : l'indicateur d'activation, les synthèses par suite (Google Workspace, Microsoft 365) et le catalogue d'applications sélectionnées avec les comptes connectés de chaque application (multicompte : un agent peut avoir plusieurs comptes par application, chacun avec un alias facultatif), résolus à partir de la session en amont de l'agent.

Paramètres

facilityId `string` (obligatoire) deviceId `string` (obligatoire) UUID balena de l'appareil de l'agent.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Catalogue complet de la marketplace Connected Apps pour un agent

Renvoie toutes les applications connectables (le catalogue complet des kits d'outils à authentification gérée, mis en cache côté serveur pendant ~12 h) avec leurs niveaux mis en avant ou suite, les comptes connectés de l'agent pour chaque application, ainsi que les synthèses par suite et les demandes de connexion en attente de l'agent : une seule charge utile pour la marketplace d'applications consultable côté client.

Paramètres

facilityId `string` (obligatoire) deviceId `string` (obligatoire) UUID balena de l'appareil de l'agent.

Point de terminaison

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

Exemple de requête

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"

Réponse

{}

Ignorer une demande de connexion en attente d'un agent

Marque comme ignorée la demande de connexion en attente de l'agent pour un kit d'outils (elle disparaît de la section « Requested by your agent » de la marketplace). Idempotent : ignorer une demande qui n'est pas en attente n'a aucun effet.

Paramètres

facilityId `string` (obligatoire) deviceId `string` (obligatoire) UUID balena de l'appareil de l'agent.

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Activer ou désactiver les Connected Apps pour un agent

Enregistre le paramètre Connected Apps de l'agent et envoie la variable d'appareil Balena PH_APPS_MCP_ENABLED à cet appareil uniquement (au mieux : l'indicateur côté PH est le verrou effectif du relais MCP).

Paramètres

facilityId `string` (obligatoire) deviceId `string` (obligatoire) UUID balena de l'appareil de l'agent.

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Données de préparation de la connexion d'une application (mode, champs d'identifiants, guide de configuration)

Tout ce dont la boîte de dialogue de connexion a besoin avant de démarrer une connexion : le mode de connexion de l'application (oauth = flux de consentement hébergé, credentials = formulaire dans le produit), les champs d'identifiants à recueillir en mode credentials et le guide de configuration dans le produit (rédigé pour les applications prioritaires, sinon généré à partir des métadonnées des champs de l'application, jamais un lien vers une documentation externe). Les applications OAuth à fournir soi-même indiquent aussi si l'application OAuth du client est déjà enregistrée pour CET agent (byoConfigured) et l'URL de redirection à enregistrer auprès du fournisseur.

Paramètres

facilityId `string` (obligatoire) deviceId `string` (obligatoire) UUID balena de l'appareil de l'agent. toolkit `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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"

Réponse

{}

Connecter une application avec des identifiants fournis par l'utilisateur (clé API, etc., sans OAuth)

Crée un compte connecté pour une application en mode credentials directement depuis le formulaire du produit, sans flux de consentement hébergé. Les champs d'identifiants proviennent des données connect-info de l'application ; tous les champs obligatoires doivent être fournis. Les identifiants sont validés auprès du fournisseur lorsque c'est possible (au mieux : certaines applications ne refusent une clé erronée qu'au premier appel d'outil de l'agent). Un alias facultatif nomme le nouveau compte (multicompte : connecter une application déjà connectée ajoute UN AUTRE compte).

Paramètres

facilityId `string` (obligatoire) deviceId `string` (obligatoire) UUID balena de l'appareil de l'agent.

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Enregistrer l'application OAuth du client pour une application BYO et lancer son flux de connexion

Pour les applications OAuth à fournir soi-même (Xero, Shopify...) : récupère l'ID client et le secret client de l'application OAuth que le client a créée auprès du fournisseur (en suivant le guide de configuration de l'application), l'enregistre pour CET agent (le secret est stocké uniquement auprès de la plateforme d'intégration en amont, jamais dans Performance Hub) et lance immédiatement le flux de connexion hébergé associé. Renvoie l'URL de consentement vers laquelle rediriger l'utilisateur, avec le même contrat que le point de terminaison de connexion. Une nouvelle soumission remplace l'application enregistrée de l'agent (par exemple après la rotation d'un secret) ; les comptes connectés existants continuent de fonctionner.

Paramètres

facilityId `string` (obligatoire) deviceId `string` (obligatoire) UUID balena de l'appareil de l'agent.

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Déconnecter un compte connecté d'un agent

Supprime un seul compte connecté (multicompte : les autres comptes de la même application restent connectés). Le système vérifie que le compte appartient bien à cet agent avant la suppression ; s'il s'agissait du DERNIER compte de l'application, le kit d'outils est retiré de l'ensemble connecté de l'agent (la session est recréée à la demande afin de mettre à jour la liste d'outils de l'agent).

Paramètres

facilityId `string` (obligatoire) deviceId `string` (obligatoire) UUID balena de l'appareil de l'agent.

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renommer (modifier l'alias de) l'un des comptes connectés d'un agent

Définit l'alias d'affichage d'un compte connecté. Les alias sont normalement définis automatiquement après l'OAuth (à partir de l'identité connectée) ; ce point de terminaison sert au renommage manuel dans la boîte de dialogue de détail de l'application. Un alias vide efface le libellé. Le système vérifie que le compte appartient bien à cet agent avant la mise à jour en amont.

Paramètres

facilityId `string` (obligatoire) deviceId `string` (obligatoire) UUID balena de l'appareil de l'agent.

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Activer ou désactiver un service Performance Hub intégré pour un agent

Active ou désactive pour cet agent un service intégré toujours disponible (Smart Search, Weather...). Les services intégrés ne nécessitent ni connexion ni OAuth : ils sont inclus avec chaque agent et activés par défaut ; ce paramètre enregistre l'exception propre à l'agent et recrée immédiatement sa session en amont afin de mettre à jour l'ensemble d'outils. Notez que le paramètre distinct « External apps » (la route /enable) désactive entièrement le serveur MCP des applications : lorsqu'il est désactivé, les services intégrés sont eux aussi indisponibles, quels que soient leurs paramètres individuels.

Paramètres

facilityId `string` (obligatoire) deviceId `string` (obligatoire) UUID balena de l'appareil de l'agent. slug `string` (obligatoire) Slug du service intégré.

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Associer un appareil AI Agent à une installation

Association fondée d'abord sur les métadonnées. Recherche l'appareil par son numéro de série dans les métadonnées en direct des appareils, exige qu'il soit en ligne, puis crée à la demande la ligne d'enregistrement, attribue une région de relais Chisel, un port de tunnel et un secret, enregistre cet emplacement sur le relais et envoie la configuration de l'installation et du tunnel à l'appareil via Balena. Les nouveaux appareils reçoivent aussi un compte de service MCP par défaut (activé, limité à cette installation, toutes capacités) ; un nouvel appairage conserve toute autorisation MCP existante. Des paramètres avancés facultatifs remplacent les valeurs par défaut lors de l'appairage (configuration de sauvegarde, MCP activé ou non, restriction d'accès), et `restoreFrom` initialise le nouvel appareil à partir de la sauvegarde cloud d'un autre appareil de l'installation (source active ou mise hors service ; met en file une restauration entre dépôts, renvoyée sous `restoreRequest` pour le suivi de la progression).

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Répertorier les appareils AI Agent d'une installation

Renvoie les appareils AI Agent de l'installation avec leur état en ligne et l'état du tunnel en direct (utilisé par le sélecteur d'appareils de l'applet).

Paramètres

club `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Mise à jour et état en ligne de l'AI Agent

Indique si l'appareil est en ligne, si une mise à jour est disponible ou en attente, ainsi que la version proposée (la version épinglée de la flotte si elle est épinglée ; la version la plus récente réussie si la flotte suit la dernière version).

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

État et métriques en direct de l'appareil AI Agent

Renvoie un instantané sélectionné pour la barre de métriques et le panneau de gestion de l'applet : champs d'identité et d'enregistrement, activité et connexion, versions logicielles et dernières métriques du signal de présence (processeur, température, mémoire, stockage par point de montage, durée de fonctionnement, réseau). Aplatit la balise de métadonnées de l'appareil et l'état de mise à jour Balena ; l'une ou l'autre partie peut manquer lors d'une panne passagère.

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Commentaire IA du rapport d'état de l'appareil

Renvoie une courte explication, destinée à l'opérateur, des problèmes d'état actuellement déduits. Les faits et les étapes de la procédure figurent toujours dans device-status ; ce paragraphe supplémentaire est fourni au mieux et peut être null.

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Générer un jeton d'accès direct au relais pour un AI Agent

Renvoie une URL signée de courte durée que le navigateur utilise pour se connecter DIRECTEMENT à la passerelle relais régionale de l'appareil (en évitant le passage par PH/Sydney), ainsi que le jeton HS256. PH reste l'autorité (Google SSO + vérifications de module et d'installation ici) ; la passerelle relais vérifie le jeton. Le proxy /ai-agent-ui reste la solution de repli.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Envoyer un message de chat dans une session AI Agent (réponse directe depuis la notification)

Relais côté serveur utilisé par l'action de réponse directe de la notification web push : le service worker envoie un POST ici (même origine, cookies SSO), si bien qu'une réponse fonctionne sans aucun onglet Performance Hub ouvert. PH résout la cible de relais de l'appareil (même recherche que pour le proxy /ai-agent-ui), ajoute x-ph-user pour l'attribution du tour (la notification de fin qui en résulte est renvoyée à cet utilisateur) et transmet la requête à /api/chat/start de l'appareil avec l'ID de session.

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Lire les paramètres de contrôle d'accès d'un AI Agent (propriétaire)

Renvoie le bloc d'accès de l'appareil (mode, liste d'autorisation, visibilité, option d'assistance PH) ainsi que les demandes d'accès en attente. Accessible au propriétaire de l'appareil ; les autres utilisateurs reçoivent une erreur 403.

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Mettre à jour les paramètres de contrôle d'accès d'un AI Agent (propriétaire)

Écrit le mode (org/restricted), la liste d'autorisation restreinte, la visibilité de la liste (all/admins) et l'option « permit access from Performance Hub Support ». Autorisé pour le propriétaire de l'appareil. Le propriétaire lui-même ne peut être changé que via reallocate-owner. Les demandes d'accès approuvées sont persistantes : les demandeurs toujours approuvés sont réintégrés dans la liste d'autorisation enregistrée ; en retirer un de la liste soumise révoque son approbation (la demande passe à refusée ; il peut en faire une nouvelle).

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Réattribuer le propriétaire d'un AI Agent

Réattribue la propriété de l'appareil à un autre utilisateur Performance Hub. Réservé aux propriétaires de compte (accès au module de facturation SaaS) : c'est la solution de secours lorsque le propriétaire d'un agent restreint s'en va. L'ancien et le nouveau propriétaire sont tous deux avertis (dans l'application, par notification push et par e-mail).

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Liste des utilisateurs de l'installation pour les sélecteurs de liste d'autorisation et de propriétaire de l'AI Agent

Renvoie l'adresse e-mail et le nom (+ indicateurs isOrgAdmin) de chaque utilisateur dont le rôle donne accès à CETTE installation. Réservé au propriétaire de l'appareil et aux personnes habilitées à le réattribuer (propriétaire de compte), afin que les utilisateurs ordinaires ne puissent pas énumérer la base d'utilisateurs.

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Demander l'accès à un AI Agent restreint

Crée (ou rouvre) la demande d'accès du demandeur à un appareil restreint ; idempotent par utilisateur et par appareil. Le propriétaire est averti dans l'application, par notification web push et par e-mail, avec un lien direct vers le module de l'agent.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Approuver ou refuser une demande d'accès à un AI Agent (propriétaire)

Traitement d'une demande en attente par le propriétaire de l'appareil. L'approbation ajoute le demandeur à la liste d'autorisation de l'appareil ; dans les deux cas, le demandeur est averti (dans l'application, par notification push et par e-mail).

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Autoriser et appliquer une mise à jour de l'AI Agent

Épingle l'appareil sur la version proposée (version épinglée de la flotte, ou version la plus récente réussie si la flotte suit la dernière version) et libère le verrou de mise à jour afin que le superviseur balena l'applique. Les données du volume de données de l'appareil sont conservées lors de la mise à jour.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Planifier une mise à jour de l'AI Agent

Enregistre une heure d'installation planifiée dans l'enregistrement de l'appareil. Une tâche récurrente côté serveur (toutes les 5 minutes) applique la mise à jour (épinglage + déverrouillage) une fois l'heure planifiée passée. Toute nouvelle planification remplace la planification existante de l'appareil.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Annuler une mise à jour planifiée de l'AI Agent

Supprime l'installation planifiée en attente de l'appareil (sans effet si rien n'est planifié).

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Exécuter une commande à distance sur un appareil AI Agent

Publie une commande MQTT autorisée (redémarrage, redémarrage d'un conteneur, verrouillage ou déverrouillage des mises à jour, gestion du Wi-Fi) vers le device-controller exécuté sur l'AI Agent. L'appareil doit être associé à l'installation.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Mettre à jour la configuration d'un AI Agent visible par l'installation

Enregistre les paramètres modifiables par l'opérateur pour un Agent IA associé : le nom de l'appareil, son emplacement physique et la fréquence des redémarrages planifiés. Le calendrier de redémarrage est aussi transmis à l'appareil sous forme de variable d'environnement Balena REBOOT_DEVICE (2 h, heure locale), comme pour les Display Screens.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Installations vers lesquelles un Agent IA de cette installation peut être déplacé

Renvoie les installations de la même organisation auxquelles l'utilisateur connecté a accès (hors installation actuelle), pour le sélecteur « Déplacer vers une autre installation ». Le déplacement lui-même est effectué par POST /api/devices/move/:club, qui applique côté serveur les mêmes règles de même organisation et d'accès à la cible.

Paramètres

club `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

L'enveloppe d'accès MCP que le demandeur peut accorder aux Agents IA d'une installation

Renvoie ce que l'utilisateur connecté est autorisé à accorder au compte de service MCP d'un Agent IA dans l'organisation de cette installation : les installations et régions comprises dans son propre accès, la possibilité ou non d'accorder une portée à l'échelle de l'organisation, l'ensemble des modules dont il dispose et le catalogue complet des outils MCP (pour le masque avancé par outil). L'interface s'en sert pour que les utilisateurs ne voient jamais que des options comprises dans leur propre périmètre d'autorisations ; le point de terminaison POST mcp-access applique la même atténuation côté serveur.

Paramètres

club `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Obtenir la configuration du compte de service MCP d'un Agent IA

Renvoie la configuration d'accès MCP de l'appareil (portée, modules, masque d'outils, champs d'audit).

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Configurer le compte de service MCP d'un Agent IA

Enregistre la configuration d'accès MCP de l'appareil avec atténuation au moment de l'octroi. Les demandeurs ne peuvent accorder que des installations et régions comprises dans leur propre accès, une portée à l'échelle de l'organisation uniquement s'ils détiennent un rôle à l'échelle de l'organisation, et les modules dont ils disposent eux-mêmes dans l'organisation de l'installation. L'indicateur enabled est aussi transmis à l'appareil sous forme de variable d'environnement Balena PH_MCP_ENABLED.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Obtenir la configuration VPN d'un Agent IA (masquée)

Renvoie l'indicateur de prise en charge VPN de l'appareil et la liste de ses connexions. Le contenu des profils et les valeurs des identifiants ne sont jamais renvoyés : uniquement les métadonnées enregistrées à l'importation (serveurs distants, routes, DNS) et des indicateurs de présence d'identifiants. L'état en direct de chaque connexion provient du point de terminaison device-status (beacon metadata.vpn).

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Activer ou désactiver la prise en charge VPN d'un Agent IA

Active ou désactive la fonction VPN de l'appareil. Transmet la variable d'appareil balena PH_VPN_ENABLED et notifie l'appareil (MQTT vpnConfigChanged) ; les connexions sont conservées lors de la désactivation (les tunnels s'arrêtent, la configuration reste pour une réactivation).

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Importer un ou plusieurs profils OpenVPN sur un Agent IA

Accepte des fichiers encodés en base64 : un seul fichier .ovpn/.conf, des lots de fichiers séparés (configuration + certificats/clés) et des archives (.zip, exports Pritunl .tar/.tgz, .tblk Tunnelblick, .visc/.visz Viscosity). Les profils sont normalisés sous une forme intégrée canonique ; chaque profil devient une connexion (importée à l'état déconnecté : saisissez les identifiants, puis connectez-vous). Des erreurs 400 exploitables sont renvoyées pour les fichiers inutilisables.

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Mettre à jour une connexion VPN d'un Agent IA (nom / identifiants / DNS fractionné)

Met à jour la connexion enregistrée. Les champs d'identifiants sont en écriture seule (omis = conserver la valeur enregistrée ; chaîne vide = effacer). Les modifications d'identifiants ou de DNS fractionné incrémentent la révision de la connexion, de sorte qu'un tunnel actif redémarre avec les nouvelles valeurs.

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Supprimer une connexion VPN d'un Agent IA

Retire la connexion de l'enregistrement et notifie l'appareil, qui ferme le tunnel et purge le profil et les identifiants en cache.

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire) connectionId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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"

Réponse

{}

Connecter / déconnecter une connexion VPN d'un Agent IA

Modèle d'état souhaité : définit l'indicateur enabled de la connexion dans l'enregistrement et notifie l'appareil (MQTT vpnConfigChanged sans contenu) ; l'appareil récupère l'état de référence par son appel universal-api authentifié par JWT et rapproche ses tunnels. Une notification manquée est rattrapée lors de la synchronisation périodique.

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Obtenir la configuration et l'état de la sauvegarde cloud d'un Agent IA

Renvoie les paramètres de sauvegarde de l'appareil (activation, rétention, région de stockage), l'état courant des sauvegardes (dernière sauvegarde, taille, erreurs), la région automatique résolue et les régions de stockage disponibles pour le sélecteur. Le mot de passe du dépôt restic n'est jamais renvoyé.

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Mettre à jour la configuration de sauvegarde cloud d'un Agent IA

Enregistre l'activation, la rétention et la région. Prend effet lors de la prochaine sauvegarde horaire de l'appareil (l'appareil demande son contexte d'exécution à PH avant chaque exécution) : aucun redémarrage de l'appareil n'est nécessaire.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Lister les sources de restauration de sauvegarde pour l'appairage d'un nouvel Agent IA

Vue à l'échelle de l'installation pour l'option « restaurer à partir d'une sauvegarde » de la boîte de dialogue d'ajout d'agent : chaque enregistrement de l'installation (actif ET mis hors service/remplacé) qui dispose encore d'un dépôt de sauvegarde déchiffrable et d'au moins un point de restauration utilisable, avec ses instantanés les plus récents. Renvoie aussi les listes d'options de configuration de sauvegarde (allowedRetentionDays, availableRegions), de sorte que la boîte de dialogue n'a besoin d'aucun UUID d'appareil pour remplir ses listes.

Paramètres

club `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Lister les points de restauration d'un Agent IA

Renvoie l'index des instantanés de l'appareil (du plus récent au plus ancien) depuis DynamoDB, sans aller-retour vers l'appareil ou le dépôt, ainsi que l'état actuel des demandes de sauvegarde manuelle ou de restauration pour l'interrogation du panneau. Les demandes obsolètes (jamais prises en charge, ou sans signal de progression) sont présentées comme ayant échoué, afin que l'interface puisse toujours en soumettre une nouvelle.

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Demander immédiatement une sauvegarde manuelle d'un Agent IA

Écrit une demande d'exécution manuelle (avec la note de l'utilisateur) dans la ligne d'enregistrement et notifie l'appareil via MQTT. L'appareil récupère la demande vérifiée par son appel run-context universal-api authentifié par JWT ; même sans MQTT, elle est prise en charge au prochain cycle du planificateur. Refusée tant qu'une autre sauvegarde ou restauration est en cours.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Épingler ou désépingler un point de restauration d'un Agent IA

Les points de restauration épinglés sont protégés de l'élagage lié à la rétention : la maintenance nocturne de l'appareil reçoit les identifiants des instantanés épinglés par son appel run-context et les exclut de restic forget, et leurs lignes d'index n'expirent jamais par TTL. Le désépinglage rétablit le comportement de rétention normal.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Restaurer un Agent IA à partir d'un point de restauration

Écrit une demande de restauration dans la ligne d'enregistrement et notifie l'appareil. Les restaurations complètes écrasent /data et /home/hermeswebui (l'appareil prend d'abord un instantané de sécurité automatique avant restauration et arrête l'agent pendant la restauration) et exigent la saisie du nom de l'appareil en guise de confirmation. Transmettre `paths` effectue à la place une restauration non perturbatrice de ces seuls chemins, au niveau des fichiers. Peut aussi, en option, épingler l'appareil sur la version logicielle de l'instantané une fois la restauration des données terminée (voir backup-restore-release).

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Appliquer la version logicielle enregistrée lors d'une restauration terminée

Dernière étape d'une restauration qui a demandé la version logicielle de l'instantané : une fois que l'appareil signale la fin de la restauration des données, ce point de terminaison épingle l'appareil sur la version enregistrée et déverrouille les mises à jour (même mécanisme que le point de terminaison de mise à jour). Déclenché par l'interrogation du panneau ; idempotent : l'épinglage enregistré est effacé une fois appliqué.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Parcourir les fichiers d'un point de restauration

Liste un niveau de répertoire d'un instantané restic, servi entièrement côté serveur depuis le dépôt Wasabi (fonctionne même si l'appareil est hors ligne). Seules les métadonnées de l'arborescence sont lues : aucune donnée de fichier n'est téléchargée pour les listes.

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire) takenAt `number` (obligatoire) path `string` (facultatif)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Rechercher des noms de fichiers dans un point de restauration

Recherche de noms de fichiers insensible à la casse à partir d'un répertoire et en descendant, servie côté serveur depuis les métadonnées de l'arborescence restic (aucune donnée de fichier n'est lue ; fonctionne même si l'appareil est hors ligne). Diffuse la liste et s'arrête aux 200 premiers résultats.

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire) takenAt `number` (obligatoire) q `string` (obligatoire) path `string` (facultatif)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Différences entre deux points de restauration

Exécute côté serveur un restic diff entre deux instantanés de l'appareil (métadonnées de l'arborescence uniquement) et renvoie la liste des fichiers ajoutés, supprimés ou modifiés (limitée à 500 modifications) ainsi que des statistiques récapitulatives. Les résultats sont mis en cache, car les instantanés sont immuables.

Paramètres

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

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Historique des versions d'un fichier sur tous les points de restauration

Un seul restic find côté serveur sur tous les instantanés du dépôt de l'appareil, réduit aux versions DISTINCTES (les résultats consécutifs de taille et mtime identiques sont fusionnés) et joint aux lignes de l'index des instantanés pour les dates, types et notes.

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire) path `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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"

Réponse

{}

Rechercher un nom de fichier dans tous les points de restauration des sauvegardes d'un appareil

Le chemin de récupération des fichiers supprimés : un seul restic find côté serveur sur TOUS les instantanés du dépôt (insensible à la casse, sous-chaîne ou glob), regroupé par chemin avec les points de restauration dans lesquels chaque fichier apparaît. Un fichier supprimé de l'appareil reste trouvable ici tant qu'un point de restauration le contient.

Paramètres

club `string` (obligatoire) uuid `string` (obligatoire) q `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Télécharger un fichier depuis un point de restauration

Diffuse un fichier directement du dépôt restic vers le navigateur (en pièce jointe). Les répertoires sont diffusés sous forme d'archive tar. Taille plafonnée ; servi côté serveur, donc fonctionne même si l'appareil est hors ligne.

Paramètres

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

Point de terminaison

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

Exemple de requête

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"

Réponse

{}

Mettre hors service un Agent IA d'une installation

Paramètres

club `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Retirer un Agent IA d'une installation et réinitialiser le matériel aux paramètres d'usine

Dissocie complètement l'appareil pour qu'il puisse être appairé dans N'IMPORTE QUELLE installation, et efface toutes les données du NUC. L'effacement est armé via la variable d'appareil balena PH_FACTORY_RESET (un nonce à usage unique) AVANT le démantèlement cloud, de sorte qu'il s'applique même si l'appareil est hors ligne au moment du retrait : l'effacement s'exécute à sa prochaine connexion. Une notification MQTT factoryReset rend le cas en ligne immédiat. Le démantèlement cloud révoque ensuite tous les identifiants et autorisations, supprime le rattachement de l'installation dans Balena (variables d'appareil + étiquette club) et le clubID des métadonnées, et supprime les demandes d'accès et l'enregistrement DNS LAN. Les sauvegardes cloud sont CONSERVÉES : l'index des instantanés et le mot de passe du dépôt restent sur l'enregistrement supprimé de manière logique, utilisables comme source de restauration lors de l'ajout d'un appareil de remplacement. Exige la saisie du nom de l'appareil en guise de confirmation.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Remplacer un Agent IA défaillant par un nouveau NUC (reprise après sinistre)

Remplacement d'appareil en une seule opération : associe le NUC de remplacement (emplacement de tunnel, secrets, variables balena, amorçage de la sauvegarde), reprend le nom, l'emplacement, le calendrier de redémarrage, les paramètres de sauvegarde, le blocage d'accès et l'autorisation MCP de l'ancien appareil, réindexe l'ancien index d'instantanés sur le nouvel appareil (pour que tout l'historique de sauvegarde reste consultable), met hors service l'ancien enregistrement (marqué replacedBy / replacedFrom) et, sauf si `restore` vaut false, met en file d'attente une restauration complète du point de restauration choisi depuis le dépôt de sauvegarde de l'ANCIEN appareil vers le nouveau matériel. Fonctionne même si l'ancien appareil est défaillant ou hors ligne ; exige la saisie du nom de l'ancien appareil en guise de confirmation. Uniquement au sein de la même installation.

Paramètres

club `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Résout un lien court de QR code d'appareil Performance Hub vers le lien profond vers lequel il pointe, afin que le scanner Ajouter un appareil puisse détecter le type d'appareil. Seuls les hôtes performancehub.co sont suivis.

Paramètres

url `string` (obligatoire) Le lien court scanné

Point de terminaison

GET /api/devices/resolve-qr

Exemple de requête

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

Réponse

{}

Teste la connectivité au contrôleur Unifi d'une installation et la validité des identifiants.

Paramètres

facilityID `string` (obligatoire) ID interne de l'installation avec laquelle vous souhaitez tester la connectivité Unifi

Point de terminaison

GET /api/devices/testUnifiController/{facilityID}

Exemple de requête

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

Réponse

{}

Met à jour un appareil IoT générique associé à une installation.

Paramètres

club `string` (obligatoire) ID interne de l'installation dont vous souhaitez mettre à jour l'appareil. body `string` (obligatoire) Objet JSON des paramètres de mise à jour.

Point de terminaison

PUT /api/devices/updateGenericDevice/{club}

Exemple de requête

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

Réponse

{}

Indique le nombre d'accords en suspens nécessitant une action, selon l'utilisateur et les clubs qui lui sont associés

Point de terminaison

GET /api/agreements/agreements-outstanding

Exemple de requête

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

Réponse

{}

Répertorie tous les accords disponibles pour un club

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. contracts-sort `string` (facultatif) Trie les accords par date d'effet ou par ordre alphabétique. Par défaut : date d'effet. contracts-acknowledgement `string` (facultatif) Filtre les accords : tous, acceptés ou non acceptés. Par défaut : tous. contracts-requirement `string` (facultatif) Filtre les accords : tous, signature, case à cocher, fenêtre contextuelle ou aucun. Par défaut : tous. contracts-status `string` (facultatif) Filtre les accords : tous, actifs ou archivés. Par défaut : tous.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Signe un accord à partir de son ID.

Paramètres

club `string` (obligatoire) ID interne du club qui signe l'accord. agreementid `string` (obligatoire) ID de l'accord à signer. body `string` (obligatoire) Objet JSON contenant l'accord et les paramètres à ajouter ou envoyer au système...

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Résumé Model Router de l'installation (configuration, solde, dépenses).

Paramètres

clubID `string` (obligatoire) tz `string` (facultatif) Fuseau horaire IANA de l'utilisateur : solution de repli pour les fenêtres de dépenses journalières et mensuelles lorsque l'installation n'a pas de fuseau horaire.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Catalogue des modèles disponibles avec leur état d'activation par installation (tous activés par défaut).

Paramètres

clubID `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Garde-fous disponibles et modèles prédéfinis PH.

Paramètres

clubID `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Services Model Router connectés. Comprend les appareils AI Agent appairés, les agents externes explicitement typés et le service Workflow de l'installation. La configuration se modifie via PATCH /keys/{keyHash}.

Paramètres

clubID `string` (obligatoire) tz `string` (facultatif) Fuseau horaire IANA de l'utilisateur : solution de repli pour les fenêtres de dépenses journalières et mensuelles lorsque l'installation n'a pas de fuseau horaire.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Active Model Router pour une installation et provisionne son accès à l'inférence.

Paramètres

clubID `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Met à jour le forfait, la liste des modèles autorisés, les garde-fous, les filtres de contenu (masquage ou blocage par regex côté PH), la limite de dépenses et la configuration de rechargement automatique.

Paramètres

clubID `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Remet à 0 le compteur du plafond absolu sur toute la durée (nouvelle référence égale aux dépenses actuelles) et consigne la période clôturée dans l'historique.

Paramètres

clubID `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Historique des réinitialisations du plafond absolu (les plus récentes d'abord) : plafond, montant dépensé et horodatages pour chaque période clôturée.

Paramètres

clubID `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Crée une nouvelle clé API phk_ pour l'installation (texte en clair renvoyé une seule fois). Accepte en option des plafonds de dépenses, une liste de modèles autorisés, des garde-fous, des filtres de contenu et des limites de débit rpmLimit/tpmLimit.

Paramètres

clubID `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Met à jour les champs modifiables de la clé : libellé, plafonds de dépenses par clé, liste de modèles autorisés, garde-fous, filtres de contenu et limites de débit rpmLimit/tpmLimit (synchronisés avec la clé).

Paramètres

clubID `string` (obligatoire) keyHash `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Journaux d'inférence par requête pour l'installation (en direct, métadonnées uniquement).

Paramètres

clubID `string` (obligatoire) page `string` (facultatif) pageSize `string` (facultatif) status `string` (facultatif) model `string` (facultatif) provider `string` (facultatif) source `string` (facultatif) `key` ou `agent` keyHash `string` (facultatif) Filtre sur une seule clé ou un seul agent à partir de son keyHash PH. q `string` (facultatif) Recherche en texte libre sur l'ID de requête, le libellé de la clé ou de l'agent, le modèle, le fournisseur et l'utilisateur final. minutes `string` (facultatif) Fenêtre inférieure à une journée (par exemple Live=1440) ; remplace startDate/endDate. startTs `string` (facultatif) Début de la fenêtre en secondes epoch (clic pour zoomer) ; remplace les minutes et les dates. endTs `string` (facultatif) Fin de la fenêtre en secondes epoch (clic pour zoomer) ; remplace les minutes et les dates.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Histogramme des requêtes dans le temps pour la vue Logs. Mêmes filtres que la route de liste, mais agrégés côté serveur par intervalles de temps (nombre de succès et d'échecs), de sorte que la réponse reste très légère quel que soit le volume de journaux. La taille des intervalles est choisie automatiquement en fonction de la période.

Paramètres

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

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Intervalles d'analyse de l'utilisation et totaux par modèle pour une période (en direct).

Paramètres

clubID `string` (obligatoire) range `string` (facultatif) 24h | 7 | 30 | 90 | year | all (ignoré si startDate/endDate sont fournis) startDate `string` (facultatif) endDate `string` (facultatif) groupBy `string` (facultatif) model (par défaut) | key | source | provider | status : dimension des intervalles et des groupes subgroupBy `string` (facultatif) seconde dimension facultative imbriquée dans chaque groupe (Explore) keyHash `string` (facultatif) filtre d'analyse détaillée : limite à une seule clé ou un seul agent model `string` (facultatif) filtre d'analyse détaillée : limite à un seul modèle provider `string` (facultatif) source `string` (facultatif) compare `string` (facultatif) définir sur "prev" pour renvoyer également groupsPrev (période de même durée immédiatement précédente)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Calendrier d'activité quotidienne sur l'année glissante écoulée (environ 53 semaines, à la manière de GitHub).

Paramètres

clubID `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Débite la carte de facturation SaaS enregistrée pour ajouter du crédit Model Router prépayé.

Paramètres

clubID `string` (obligatoire) body `object` (facultatif)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Finalise une recharge une fois que l'applet a terminé l'authentification 3DS.

Paramètres

clubID `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Résumé de la carte de facturation SaaS enregistrée qui sera débitée lors des recharges et des recharges automatiques.

Paramètres

clubID `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Transactions du registre de l'installation, les plus récentes d'abord. Filtrage facultatif par type (par exemple `types=topup,adjustment` pour l'historique des mouvements d'argent, ou `types=charge-reconcile` avec `from`/`to` pour les déductions d'utilisation d'un mois).

Paramètres

clubID `string` (obligatoire) limit `integer` (facultatif) Nombre maximal de lignes (50 par défaut, 200 au maximum) types `string` (facultatif) Types de transactions séparés par des virgules (topup, charge-reconcile, refund, adjustment, trueup-shortfall) from `integer` (facultatif) Uniquement les transactions avec createdAt >= from (secondes Unix) to `integer` (facultatif) Uniquement les transactions avec createdAt <= to (secondes Unix)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Mois `YYYY-MM` distincts (UTC, les plus récents d'abord) contenant au moins une transaction des types demandés. Alimente les listes déroulantes de filtre par année et par mois afin que l'interface ne propose que les périodes qui contiennent réellement des données.

Paramètres

clubID `string` (obligatoire) types `string` (facultatif) Types de transactions séparés par des virgules (topup, charge-reconcile, refund, adjustment, trueup-shortfall)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Reçu de paiement PDF personnalisé pour une transaction Model Router.

Paramètres

clubID `string` (obligatoire) txId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Ensemble de reçus de paiement PDF personnalisés pour les transactions de recharge sélectionnées, au format ZIP. Chaque ID doit correspondre à une recharge de l'installation : les déductions d'utilisation et les ajustements administratifs n'ont pas de reçu et sont refusés.

Paramètres

clubID `string` (obligatoire) ids `string` (obligatoire) ID de transactions séparés par des virgules (50 au maximum)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Cumuls par mois civil (UTC) des déductions d'utilisation de l'installation, les plus récents d'abord. Le mois en cours est toujours inclus et signalé par `isCurrentMonth` (depuis le début du mois).

Paramètres

clubID `string` (obligatoire) months `integer` (facultatif) Période d'historique en mois (12 par défaut, 24 au maximum ; ignorée lorsque `year` est défini) year `integer` (facultatif) Limite les cumuls à une année civile UTC (par exemple 2026)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Relevé d'utilisation mensuel en PDF personnalisé : synthèse des déductions d'utilisation du mois (sous-totaux journaliers + total). Il ne s'agit explicitement ni d'une facture ni d'un reçu ; les déductions d'utilisation n'entraînent aucun encaissement.

Paramètres

clubID `string` (obligatoire) month `string` (obligatoire) Mois civil UTC, `YYYY-MM`

Point de terminaison

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

Exemple de requête

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"

Réponse

{}

Lignes brutes de déduction d'utilisation d'un mois au format CSV (ID de transaction, horodatage UTC, montant, solde après opération, instantané des dépenses cumulées) : l'export détaillé qui se rapproche du total du relevé du mois.

Paramètres

clubID `string` (obligatoire) month `string` (obligatoire) Mois civil UTC, `YYYY-MM`

Point de terminaison

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

Exemple de requête

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"

Réponse

{}

Synthèse de l'utilisation et des dépenses de l'installation (en direct et registre rapproché).

Paramètres

clubID `string` (obligatoire) tz `string` (facultatif) Fuseau horaire IANA de l'utilisateur : solution de repli pour les fenêtres de dépenses journalières et mensuelles lorsque l'installation n'a pas de fuseau horaire.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Associe ou met à jour un appareil AI Edge Processor pour un club

Paramètres

body `string` (obligatoire) Objet JSON de mise à jour de l'enregistrement de l'appareil AI Edge Processor.

Point de terminaison

POST /api/ai-edge-processor/devices

Exemple de requête

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

Réponse

{}

Associe un appareil AI Edge Processor à un club. Résout l'appareil en privilégiant les métadonnées (le signal de présence en direct l'emporte), complète la ligne d'enregistrement si l'appareil ne s'est jamais enregistré lui-même et nettoie les lignes d'enregistrement obsolètes laissées par du matériel reprovisionné.

Paramètres

body `string` (obligatoire) Objet JSON de mise à jour de l'enregistrement de l'appareil AI Edge Processor.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la liste des enregistrements d'envoi bbox d'un club

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Index de recherche de la base de données de caméras

Relaie l'index de recherche public camera-db de la documentation (fabricants, gammes, modèles, alias) utilisé par la boîte de dialogue Find my camera lors de l'ajout de caméras réseau. Mis en cache côté serveur pendant 12 heures.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Modèles de fabricant de la base de données de caméras

Relaie les modèles d'URL RTSP et les valeurs par défaut d'un fabricant depuis la base de données publique de caméras de la documentation. Le slug est validé pour empêcher toute traversée de chemin. Mis en cache côté serveur pendant 12 heures.

Paramètres

slug `string` (obligatoire) Slug du fabricant (par exemple hikvision)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la liste des données d'enregistrement des arrivées d'une installation

Paramètres

club `string` (obligatoire) ID interne du club ou de l'installation auquel vous souhaitez accéder. startDate `string` (facultatif) Date de début au format YYYY-MM-DD endDate `string` (facultatif) Date de fin au format YYYY-MM-DD timezone `string` (facultatif) Fuseau horaire utilisé pour interpréter les dates (Australia/Brisbane par défaut) nextToken `string` (facultatif) Jeton de pagination pour récupérer la page suivante

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Récupérer la configuration du front-end ou de l'interface CCTV

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/cctv/config/:club

Exemple de requête

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

Réponse

{}

Obtenir la configuration de diffusion de contenu CCTV

Renvoie le domaine de contenu utilisé par les clients CCTV pour résoudre les fichiers multimédias. Le domaine est défini par la variable d'environnement CONTENT_DOMAIN, avec à défaut une valeur par défaut qui dépend de l'environnement (la production sert /cctv, les autres environnements servent /cctv-stg).

Point de terminaison

GET /api/cctv/content-config

Exemple de requête

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

Réponse

{}

Modifier la configuration du front-end ou de l'interface CCTV

Paramètres

body `object` (obligatoire) Objet JSON du nouveau bloc de configuration à ajouter au système.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la liste des régions de bucket disponibles pour la configuration du fournisseur de stockage CCTV

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Réinitialiser la collection de visages non identifiés

Réinitialise la collection CompreFace des personnes non identifiées de l'installation en supprimant tous les sujets. Les fiches de personnes DynamoDB, les détections de visages et les blocs de chronologie OpenSearch ne sont PAS affectés. Seules les données sous-jacentes de reconnaissance faciale sont effacées. De nouveaux profils fantômes sont créés automatiquement à mesure que le système traite de nouvelles détections des caméras.

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Obtenir les informations de la collection des personnes non identifiées

Renvoie le nombre actuel de sujets de la collection CompreFace des personnes non identifiées de l'installation.

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Ajoute une caméra réseau (caméra OEM/IP) via une URL de flux (RTSP, HTTP, HTTPS)

Paramètres

body `string` (obligatoire) Objet JSON pour l'ajout d'une caméra réseau.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Ajouter en masse des caméras réseau à un Edge Processor

Enregistre plusieurs caméras réseau RTSP/HTTP sur un même Edge Processor, puis envoie FEED_CONFIG une seule fois afin que l'appareil ne recharge sa configuration qu'une fois.

Paramètres

body `object` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Associe ou met à jour un appareil pour un club

Paramètres

body `string` (obligatoire) Objet JSON de mise à jour de l'enregistrement de l'appareil CCTV.

Point de terminaison

POST /api/cctv/devices

Exemple de requête

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

Réponse

{}

Associe un appareil à un club

Paramètres

body `string` (obligatoire) Objet JSON de mise à jour de l'enregistrement de l'appareil CCTV.

Point de terminaison

POST /api/cctv/devices/associate

Exemple de requête

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

Réponse

{}

Envoie une requête MQTT à l'UUID d'un appareil donné et attend en réponse (via websocket) les capacités disponibles de la caméra.

Paramètres

club `string` (obligatoire) ID interne du club propriétaire de l'appareil interrogé. body `string` (obligatoire) Objet JSON des paramètres de mise à jour.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Répertorier les enregistrements d'appareils

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/cctv/devices/:club

Exemple de requête

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

Réponse

{}

Supprime une caméra réseau en la marquant comme supprimée et en la retirant du FEED_CONFIG de l'Edge Processor

Paramètres

club `string` (obligatoire) ID interne du club propriétaire de l'appareil. balenaUUID `string` (obligatoire) UUID de la caméra réseau à supprimer.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Enregistre tout ou partie des capacités configurées de la caméra et les applique à l'appareil sous forme de variable d'environnement (via balena)

Paramètres

club `string` (obligatoire) ID interne du club propriétaire de l'appareil interrogé. body `string` (obligatoire) Objet JSON des paramètres de mise à jour.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Enregistre un masque de mouvement (s'il est configuré) pour la caméra et l'applique à l'appareil sous forme de variable d'environnement (via balena)

Paramètres

club `string` (obligatoire) ID interne du club propriétaire de l'appareil interrogé. body `string` (obligatoire) Objet JSON du masque de la caméra.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Envoie une commande v4l2 précise (luminosité ou contraste, par exemple) à l'appareil physique

Paramètres

club `string` (obligatoire) ID interne du club propriétaire de l'appareil interrogé. body `string` (obligatoire) Objet JSON des paramètres de mise à jour.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Tester l'URL de flux d'une caméra réseau

Envoie une commande de test à un Edge Processor pour valider l'URL de flux d'une caméra avec ffprobe

Corps de la requête

Point de terminaison

POST /api/cctv/devices/test-stream

Exemple de requête

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

Réponse

{}

Supprime définitivement une détection de visage de la base de données. Sert à retirer les entrées de suivi erronées ou mal associées du journal d'activité d'une personne.

Paramètres

club `string` (obligatoire) fdID `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la liste des données de détection de visages d'une personne

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. personID `string` (obligatoire) ID de la personne dans le système d'identification faciale

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie les détections de visages qui font référence à une image recadrée de personne donnée, interrogées via le GSI personCropImage.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. personCropImage `string` (obligatoire) URL de l'image recadrée de la personne enregistrée dans la détection de visage. limit `string` (facultatif) Nombre maximal de détections à renvoyer. nextToken `string` (facultatif) Jeton de pagination issu d'une réponse précédente.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la liste des données de détection de visages d'un club, regroupées sur une plage relative à l'heure actuelle

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la liste des données de détection de visages d'un club

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Rechercher des blocs de chronologie de détection de visages dans une installation avec OpenSearch

Paramètres

facilityId `string` (obligatoire) ID interne de l'installation dans laquelle effectuer la recherche timezone `string` (obligatoire) Fuseau horaire IANA pour la conversion des dates (par exemple Pacific/Auckland) startDate `string` (facultatif) Filtre de date de début (YYYY-MM-DD), converti en startUnix selon le fuseau horaire endDate `string` (facultatif) Filtre de date de fin (YYYY-MM-DD), converti en endUnix selon le fuseau horaire personId `string` (facultatif) Filtrer sur un ID de personne précis query `string` (facultatif) Recherche en texte libre (par exemple le nom d'une personne) limit `string` (facultatif) Résultats par page (20 par défaut, 100 au maximum) filters `string` (facultatif) Objet de filtres encodé en JSON (par exemple {"matchType":"identified"}) sortBy `string` (facultatif) Champ de tri (startUnix, endUnix, created). Par défaut : endUnix. page `string` (facultatif) Numéro de page pour la pagination (1 par défaut) sortOrder `string` (facultatif) Sens du tri (asc ou desc). Par défaut : desc.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la liste des rapports concernant l'installation du club

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Déclenche à la demande la génération de cartes de chaleur. Appelle la même logique Starter que la tâche cron planifiée, mais permet de cibler une installation, une date/heure et un ensemble de périodes précis. Sans corps de requête, se comporte exactement comme la tâche cron : analyse toutes les installations éligibles et met en file chaque appareil.

Corps de la requête

Point de terminaison

POST /api/cctv/heatmaps/generate

Exemple de requête

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

Réponse

{}

Résout l'emplacement d'un PNG de carte de chaleur composé sur fenêtre glissante pour un appareil. Renvoie uniquement des métadonnées JSON : les octets du PNG se trouvent sur le domaine de contenu, et le front-end construit l'URL ainsi : `${contentDomain}/cctv/${storageService}/${region}/${filePath}?s=${token}` Ordre de résolution : 1. Correspondance dans l'index DynamoDB `composed#…` → renvoi immédiat (~10 ms). 2. HEAD Wasabi sur la clé de cache déterministe. En cas de correspondance, écrit une ligne d'index de complément et renvoie le résultat. 3. Repli sur une version obsolète : il existe un enregistrement composé pour ce tuple (appareil, plage, heure), même à une autre date. Renvoyé immédiatement avec `cache: 'HIT-STALE'` afin que le front-end puisse afficher *quelque chose*. Une nouvelle composition est lancée en asynchrone. 4. Chemin à froid : aucun enregistrement n'existe. La Lambda de composition est mise en file via `InvocationType: 'Event'` et le point de terminaison renvoie `202 { cache: 'PENDING' }`. Le front-end interroge jusqu'à l'arrivée d'un enregistrement (généralement 3 à 5 secondes). Gestion du jour courant : lorsque `endDate` correspond à « aujourd'hui » à l'heure locale de l'installation, le point de terminaison sert le PNG de la veille : les tranches du jour sont encore en cours d'écriture par la tâche cron Starter et une nouvelle composition serait incomplète. La réponse reprend la `endDate` demandée et inclut `endDateUsed` (= la veille). Énumération `cache` : - `HIT` : servi depuis l'index DDB pour la date demandée. - `HIT-FALLBACK` : jour courant demandé ; ligne d'index de la veille servie. - `HIT-BACKFILL` : absent de DDB mais Wasabi avait le PNG ; la ligne vient d'être écrite. - `HIT-FALLBACK-BACKFILL` : complément sur le repli à la veille. - `HIT-STALE` : aucun enregistrement pour la date demandée, mais il en existe un à une autre date pour ce tuple ; servi immédiatement et une nouvelle composition est mise en file en arrière-plan. - `PENDING` : aucun enregistrement ; la composition a été mise en file. Le front-end doit interroger de nouveau. La réponse est `202 Accepted`, sans `filePath`.

Paramètres

facilityId `string` (obligatoire) deviceUUID `string` (obligatoire) Appareil pour lequel composer. Les compositions sont propres à chaque appareil. hour `integer` (obligatoire) Heure de la journée (0 à 23) à composer sur la fenêtre d'historique. endDate `string` (facultatif) Dernière date de la fenêtre (YYYY-MM-DD). Par défaut, aujourd'hui (fuseau horaire de l'installation). range `string` (facultatif) Fenêtre d'historique. Doit faire partie des plages autorisées. nocache `integer` (facultatif) Définir sur `1` pour contourner les couches de cache DDB + HEAD et forcer une nouvelle composition.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Indique quelles heures de la journée disposent de tranches `1h` pour un appareil sur une fenêtre d'historique glissante. Le front-end s'en sert pour alimenter le sélecteur d'heure, à côté d'un sélecteur de date et de plage, avant d'appeler le point de terminaison de composition (`/api/cctv/heatmaps/hourly/...`). Exemple : `GET /api/cctv/heatmaps/query-hourly/Birkdale?deviceUUID=abc123&endDate=2026-04-16&range=30d` En interne : une requête de plage DynamoDB sur `cctvheatmaps` (`sk BETWEEN 1h#{start}-00 AND 1h#{end}-23`), regroupée par heure. Renvoie une entrée par heure comportant au moins une tranche, avec une image JPEG de référence représentative (issue du jour le plus récent de la fenêtre : la référence est commune à chaque appareil pour une même journée).

Paramètres

facilityId `string` (obligatoire) deviceUUID `string` (obligatoire) Appareil à interroger. Les tranches horaires sont propres à chaque appareil. endDate `string` (facultatif) Dernière date de la fenêtre (YYYY-MM-DD). Par défaut, aujourd'hui (fuseau horaire de l'installation). range `string` (facultatif) Fenêtre d'historique. Doit faire partie des plages autorisées.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Interroge les enregistrements de cartes de chaleur pré-générés d'une installation. **Tous les enregistrements d'un type de période :** - `/api/cctv/heatmaps/Birkdale?periodType=1y` - `/api/cctv/heatmaps/Birkdale?deviceUUID=abc123&periodType=1d` **Plage de dates, un seul type de période :** - `/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` **Plage de dates, tous les types de période applicables (omettre periodType) :** - `/api/cctv/heatmaps/Birkdale?from=2026-03-01&to=2026-03-31` Renvoie les enregistrements annuels, semestriels, trimestriels, etc., jusqu'aux enregistrements 6h, qui chevauchent la plage indiquée. **Instant précis, les 9 types de période pour un appareil :** - `/api/cctv/heatmaps/Birkdale?deviceUUID=abc123&date=2026-03-15T14:30` Renvoie jusqu'à 9 enregistrements (1y, 6m, 3m, 2m, 1m, 1w, 1d, 12h, 6h).

Paramètres

facilityId `string` (obligatoire) Identifiant de l'installation. deviceUUID `string` (facultatif) Interroge un appareil précis. S'il est omis, la requête porte sur tous les appareils (GSI). periodType `string` (facultatif) Filtre sur un seul type de période. S'il est omis avec from/to, tous les types sont interrogés. from `string` (facultatif) Date de début (yyyy-mm-dd). Doit être utilisée avec `to`. to `string` (facultatif) Date de fin (yyyy-mm-dd). Doit être utilisée avec `from`. date `string` (facultatif) Recherche à un instant précis (yyyy-mm-dd ou yyyy-mm-ddTHH:mm). Nécessite deviceUUID. Renvoie un enregistrement par type de période.

Point de terminaison

GET /api/cctv/heatmaps/{facilityId}

Exemple de requête

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

Réponse

{}

Obtenir la miniature du flux en direct de l'appareil

Paramètres

club `string` (obligatoire) ID interne du club. deviceId `string` (obligatoire) ID interne de l'appareil CCTV.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Indiquer au système CCTV que vous allez regarder un flux en direct

Paramètres

club `string` (obligatoire) ID interne du club. deviceId `string` (obligatoire) ID interne de l'appareil CCTV.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Approuver une correspondance d'intersection

Définit le statut de la correspondance sur confirmé et enregistre le réviseur.

Paramètres

club `string` (obligatoire) matchId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Obtenir une correspondance d'intersection avec le détail des visites

Renvoie l'enregistrement de la correspondance et la répartition des horaires par visite.

Paramètres

club `string` (obligatoire) matchId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Répertorier les correspondances d'intersection d'une installation

Renvoie les correspondances paginées, filtrées par statut.

Paramètres

club `string` (obligatoire) status `string` (facultatif) limit `integer` (facultatif) nextToken `string` (facultatif)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Refuser une correspondance d'intersection

Définit le statut de la correspondance sur refusé et enregistre le réviseur.

Paramètres

club `string` (obligatoire) matchId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Obtenir les totaux récapitulatifs des correspondances d'intersection

Renvoie le nombre de correspondances de l'installation, regroupées par statut.

Paramètres

club `string` (obligatoire) ID de l'installation

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Lit l'état d'une opération « upsert identified person » en cours (création et modification). Lit la ligne directement dans la table `people-ops` gérée par cctv-rekognition-api, sans passer par une Lambda. Utilisé par le front-end CCTV pour suivre la progression après POST /api/cctv/people/{facility}/identified. Le chemin est voisin de `/cctv/people/...` (et non imbriqué dessous) afin que le routeur express ne puisse pas confondre `operationId` avec `:personID` sur `/cctv/people/:club/:personID`. Voir l'ordre des globs de createAPIRouter. Renvoie un espace réservé `pending` tant que la Lambda upsertIdentifiedPerson n'a pas encore écrit sa première étape (période de démarrage à froid). Le hook d'interrogation du front-end traite de la même façon l'espace réservé et l'état pending, ce qui garantit un contrat stable pour les appelants.

Paramètres

operationId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Ajoute une image de visage (issue d'une détection de suivi existante) au sujet de reconnaissance CompreFace de la personne et enregistre une référence dans la table des photos fantômes. N'envoie PAS l'image vers Wasabi : elle s'y trouve déjà en tant que capture de détection de visage.

Paramètres

club `string` (obligatoire) personID `string` (obligatoire) body `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Ajouter des photos fantômes à la fiche d'une personne

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. personID `string` (obligatoire) ID d'enregistrement de la personne body `string` (obligatoire) Objet JSON du nouveau bloc de configuration à ajouter au système.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Interroger les photos fantômes d'une personne

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. personID `string` (obligatoire) ID d'enregistrement de la personne

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Supprime définitivement un enregistrement de photo fantôme de CCTVShadowPhotosTable et retire le visage correspondant de CompreFace (si faceId est enregistré).

Paramètres

club `string` (obligatoire) personID `string` (obligatoire) id `string` (obligatoire) ID de l'enregistrement de photo fantôme (clé primaire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Supprime les références et les enregistrements Rekognition associés à partir d'un personID

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. personID `string` (obligatoire) ID unique de la personne CCTV.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la fiche d'une personne d'un club

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. personID `string` (obligatoire) ID de la personne dans la base de données.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Obtenir les zones d'accès correspondant au profil d'abonnement d'une personne

Résout le type de membre, les étiquettes et les formules d'abonnement de la personne, puis renvoie les zones d'accès réelles (origin=membership-plan, non absorbées) qui correspondent aux règles d'inclusion et d'exclusion. Le champ accessRestriction de chaque zone est réduit aux seules règles qui s'appliquent à la personne. Les caméras des zones enfants sont fusionnées dans les zones parentes.

Paramètres

club `string` (obligatoire) ID interne de l'installation personID `string` (obligatoire) ID de la personne dans la table des personnes CCTV

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie l'état actuel d'une tâche de fusion, avec les résultats pour chaque source. Interrogez ce point de terminaison toutes les 3 à 5 secondes tant que le statut est IN_PROGRESS.

Paramètres

club `string` (obligatoire) mergeJobID `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Lance en arrière-plan la fusion de plusieurs profils de personnes non identifiées en un seul profil conservé. Répond immédiatement 202 avec un mergeJobID. Interrogez /merge-status/:mergeJobID pour suivre la progression.

Paramètres

club `string` (obligatoire) body `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Ajouter un visage à la collection de la liste noire d'une installation

Paramètres

facilityId `string` (obligatoire) ID interne de l'installation

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Crée ou met à jour une personne identifiée dans une installation : crée une nouvelle fiche ou met à jour une fiche existante. Relaie la requête à la Lambda upsertIdentifiedPerson, qui écrit la fiche de la personne, envoie la photo éventuellement fournie vers Wasabi et réindexe le visage dans CompreFace. Lorsque `isNewRecord` vaut true (par défaut), la Lambda exécute la branche de création (cctvPeople.save) et un `personID` est généré s'il n'est pas fourni. Lorsque `isNewRecord` vaut false, la Lambda exécute la branche de mise à jour (cctvPeople.update) : `personID` est alors obligatoire et doit identifier une fiche existante.

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Met à jour l'ensemble des champs partenaires facultatifs synchronisés dans la table des personnes CCTV d'une installation.

Paramètres

facilityId `string` (obligatoire) ID interne de l'installation

Corps de la requête

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la liste des données des personnes d'un club

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/cctv/people/:club

Exemple de requête

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

Réponse

{}

Recherche des personnes dans une installation à partir d'une image de visage. Appelle la Lambda imageFaceSearch de cctv-rekognition-api avec l'image base64 envoyée et l'ID de l'installation indiqué dans le chemin. Renvoie les correspondances classées ainsi qu'une synthèse des attributs DeepFace.

Paramètres

club `string` (obligatoire) ID de l'installation ou du club body `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Rechercher des personnes dans une installation avec OpenSearch

Paramètres

facilityId `string` (obligatoire) ID interne de l'installation dans laquelle effectuer la recherche query `string` (facultatif) Terme de recherche (par exemple un nom) page `string` (facultatif) Numéro de page (1 par défaut) limit `string` (facultatif) Résultats par page (20 par défaut, 100 au maximum) filters `string` (facultatif) Objet de filtres encodé en JSON (par exemple {"membershipStatus":"active"}) sortBy `string` (facultatif) Champ de tri (created, lastName, firstName, membershipUpdatedOn). Par défaut : created. sortOrder `string` (facultatif) Sens du tri (asc ou desc). Par défaut : desc.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Met à jour les détections de visages avec un nouveau personID et associe les enregistrements Rekognition

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. body `string` (obligatoire) Objet JSON du nouveau bloc de configuration à ajouter au système.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie un objet contenant tous les filtres disponibles pour les données d'enregistrements CCTV d'un club

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Diffuser l'enregistrement.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Mettre à jour les informations de l'enregistrement.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie une synthèse des données d'enregistrements CCTV d'un club

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la liste des données d'enregistrements CCTV d'un club sur une plage relative à l'heure actuelle

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la liste des données d'enregistrements CCTV d'un club

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/cctv/recordings/:club

Exemple de requête

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

Réponse

{}

Les enregistrements sont supprimés automatiquement après une période définie : utilisez cette fonction pour les conserver

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Rechercher les instantanés de rapport d'une installation sur une plage de dates

Paramètres

facilityId `string` (obligatoire) ID interne de l'installation startDate `string` (obligatoire) Filtre de date de début (YYYY-MM-DD) endDate `string` (obligatoire) Filtre de date de fin (YYYY-MM-DD) deviceIds `string` (facultatif) Liste d'ID de caméras ou d'appareils, séparés par des virgules, sur lesquels filtrer view `string` (facultatif) Autre vue de rapport à calculer (transmise à la Lambda de rapport)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Recherche vectorielle dans les médias CCTV indexés d'une installation. Répond par un flux text/event-stream relayé depuis la Lambda searchAnything, afin que le client puisse afficher la progression pendant qu'un conteneur à froid charge l'encodeur. Les événements sont `status`, puis `result` ou `error`. Il existe trois façons d'interroger, dont deux avec ce verbe. Envoyez `query` pour une recherche en texte libre. Envoyez `seedIndex` + `seedKey` pour une recherche par l'exemple (« plus de résultats similaires ») à partir du vecteur d'une ligne déjà présente dans l'index : c'est ainsi que vous trouvez d'autres résultats semblables à celui que l'utilisateur consulte. Pour rechercher à partir d'une image dont dispose l'utilisateur, envoyez plutôt les octets en `POST` sur ce même chemin. Envoyez des mots avec une image pour affiner l'un par l'autre : **le texte filtre, l'image classe**. Les candidats proviennent de l'exemple, les mots déterminent lesquels sont conservés et la similarité visuelle détermine l'ordre : les résultats ressemblent donc toujours à l'image, et les mots écartent ceux qui ne correspondent pas. Les deux ne sont jamais fusionnés en un seul vecteur, c'est pourquoi `queryKind` reste `similar` pour une recherche combinée ; c'est la présence de `query` dans le résultat qui indique qu'un filtre textuel a été appliqué. Les recherches combinées ne renvoient assez souvent aucun résultat ; traitez ce cas comme un résultat à part entière : `perIndex..textGated` compte les candidats qui correspondaient à l'image mais pas aux mots, de sorte qu'une page vide peut s'expliquer par « retirez les mots » plutôt que « essayez une autre image ». Une recherche par l'exemple sans mots ne charge aucun encodeur et ne subit donc jamais de démarrage à froid ; ajouter des mots fait perdre cet avantage. Dans tous les cas, la recherche porte par défaut sur tous les index : les vecteurs des images recadrées, des enregistrements et des timelapses partagent un même espace, si bien qu'une image recadrée de personne peut retrouver des séquences correspondantes. Les scores des recherches par l'exemple sont bien plus élevés que ceux des recherches textuelles (d'image à image, il n'y a pas d'écart de modalité) et sont filtrés par un seuil distinct, pas encore calibré : `result.queryKind` indique l'échelle utilisée, et un score de l'une ne doit jamais être comparé à un score de l'autre. Par défaut, la recherche porte sur tous les index et renvoie une seule liste fusionnée triée par score ; chaque résultat contient `index` et `kind` afin que l'appelant puisse distinguer un résultat image d'un résultat vidéo (ce dernier ajoute `offsetMs`). Les index sans table pour l'installation sont signalés dans `skipped` au lieu de provoquer un échec. Les résultats sous le seuil de pertinence calibré de chaque index sont écartés : une requête sans véritable correspondance renvoie donc une liste vide plutôt que des résultats absurdes présentés avec assurance ; `perIndex` indique ce que chaque index a apporté et pourquoi. Les résultats peuvent être restreints par heure de capture et par caméra. Préférez `cameraId` à `camera` : il s'agit du balenaUUID de la caméra, la seule valeur stockée de manière identique dans tous les index, si bien qu'un seul filtre les restreint tous. Un filtre qu'un index ne peut pas appliquer est signalé sous `perIndex..filtersIgnored`, et cet index est interrogé sans restriction plutôt qu'exclu de la recherche. Les résultats d'enregistrements sont **un par clip, et non un par image correspondante** : les images sont échantillonnées toutes les 2 s, si bien qu'un sujet qui s'attarde correspond à dix images quasi identiques du même enregistrement. Chaque clip renvoie sa meilleure image, ainsi que `matchCount` et `offsetsMs`, qui listent tous les moments correspondants du clip et peuvent servir directement de points de lecture. Les images recadrées de personnes ne sont jamais regroupées, car deux images recadrées d'une même personne correspondent à deux observations distinctes.

Paramètres

facilityId `string` (obligatoire) ID interne de l'installation dans laquelle effectuer la recherche query `string` (facultatif) Description en texte libre de ce qu'il faut rechercher. Obligatoire sauf si warm=1 ou si un exemple est envoyé. Combinée à un exemple, elle ne sert plus au classement mais devient un filtre sur les candidats de l'exemple, en écartant ceux dont le score textuel est inférieur au seuil de pertinence de l'index. seedIndex `string` (facultatif) Recherche par l'exemple plutôt que par texte : l'index dans lequel se trouve la ligne d'exemple (person-crops, recording-frames, timelapse-frames). Il s'agit de l'`index` du résultat sur lequel l'utilisateur a cliqué. Doit être envoyé avec seedKey. seedKey `string` (facultatif) La `key` de la ligne d'exemple, reprise telle quelle du résultat. L'exemple est exclu de ses propres résultats : pour un enregistrement, cela concerne tout le clip, puisque ses autres images sont espacées de 2 s et quasi identiques. seedFrameId `string` (facultatif) Obligatoire lorsque seedIndex vaut recording-frames : cet index stocke une ligne par image échantillonnée et toutes partagent la clé du clip, si bien que la clé seule désigne un clip et non un moment. Envoyez le `frameId` du résultat. Les lignes plus anciennes n'en ont pas : envoyez alors seedOffsetMs. seedOffsetMs `string` (facultatif) Identifiant d'image de repli pour les exemples recording-frames dont la ligne est antérieure à `frame_id`. Envoyez l'`offsetMs` du résultat. Ignoré lorsque seedFrameId est fourni. warm `string` (facultatif) Préchauffe un conteneur Lambda sans exécuter de recherche. À déclencher au chargement de la page. warmTarget `string` (facultatif) Encodeur chargé par `warm` : `text` (par défaut), `image` ou `both`. Le modèle de vision pèse 355 Mo contre 283 Mo pour le modèle textuel ; son préchauffage est donc facultatif : ne demandez `image` qu'une fois que l'utilisateur a réellement préparé une image, pas au chargement de la page. index `string` (facultatif) Jeux de données à interroger, séparés par des virgules : person-crops, recording-frames, timelapse-frames. Les résultats sont fusionnés en une seule liste triée par score. Les trois sont interrogés par défaut ; passez une liste explicite pour restreindre la recherche. timelapse-frames couvre les caméras qui n'enregistrent rien et ne produisent qu'une image par minute, et son seuil de pertinence n'est pas encore calibré. model `string` (facultatif) Encodeur à utiliser pour la requête. Doit correspondre à l'encodeur utilisé pour indexer le jeu de données. limit `string` (facultatif) Nombre de résultats à renvoyer par index (50 par défaut, 100 au maximum) : il ne s'agit pas d'un total, une recherche sur les trois index peut donc renvoyer jusqu'à trois fois ce nombre. Pour les enregistrements, ce sont les clips qui sont comptés, et non les images correspondantes. from `string` (facultatif) Ne retient que les médias capturés à partir de cette heure, en millisecondes depuis l'epoch. Il s'agit de l'heure de capture, et non de l'heure d'envoi. to `string` (facultatif) Ne retient que les médias capturés avant cette heure (exclue), en millisecondes depuis l'epoch. cameraId `string` (facultatif) balenaUUID des caméras sur lesquelles restreindre la recherche, séparés par des virgules : le champ `balenaUUID` de chaque entrée renvoyée par /api/cctv/recordings/filters/:club. C'est le filtre de caméra à privilégier : tous les index stockent cette même valeur, si bien qu'un seul filtre les restreint tous. Notez que seules les images recadrées dont la jointure avec la détection de visage a abouti la contiennent (~1 % aujourd'hui) : restreindre les images recadrées par caméra renverra donc peu ou pas de résultats tant que le complément des images recadrées n'aura pas été exécuté ; les enregistrements sont entièrement renseignés et filtrés avec précision. camera `string` (facultatif) Noms des caméras sur lesquelles restreindre la recherche, séparés par des virgules. Ne concerne en pratique que les enregistrements : person-crops stocke un nom de caméra vide sur chaque ligne, si bien que toute valeur exclut toutes les images recadrées. Préférez cameraId. cameraGroup `string` (facultatif) Groupes de caméras sur lesquels restreindre la recherche, séparés par des virgules. Renseigné pour tous les enregistrements mais seulement pour ~1 % des images recadrées, pour la même raison que cameraId. minScore `string` (facultatif) Remplace le seuil cosinus par index qui filtre le bruit. À omettre en production ; chaque index dispose d'une valeur par défaut calibrée (et d'une autre, distincte et non calibrée, pour les recherches par l'exemple). Passez 0 pour voir les plus proches voisins sans filtre lors du débogage de la pertinence.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Recherche à partir d'une image dont dispose l'utilisateur, plutôt que par des mots ou par un résultat déjà affiché. Identique au GET à tous les autres égards (mêmes paramètres de requête, même flux d'événements, même forme de résultat) : seule la différence est donc documentée ici. Envoyez les **octets du fichier d'origine** comme corps de requête avec un Content-Type `image/*`. Ne redimensionnez pas, ne recadrez pas et ne réencodez pas l'image dans le navigateur au préalable : le serveur reproduit un redimensionnement très précis (compression en 256x256 avec un noyau bilinéaire anticrénelé) utilisé pour construire les vecteurs indexés, alors que la mise à l'échelle par canvas en utilise un autre. Mesurée, cette substitution aboutit à une distance cosinus d'environ 0,93 par rapport à la bonne réponse, soit davantage qu'entre deux images réellement différentes : les résultats sont alors classés de façon plausible mais erronée, sans aucune erreur. Limite de 4 Mo, qui tient au transport et non à la qualité : les octets transitent dans la charge utile d'appel de la Lambda, plafonnée à 6 Mo, et le base64 en augmente la taille d'un tiers. Les résultats sont évalués d'image à image : `queryKind` vaut donc `image` et les scores sont sur la même échelle, bien plus élevée, qu'une recherche par l'exemple ; ils ne sont jamais comparables aux scores textuels. Attendez-vous à des scores légèrement *inférieurs* à ceux d'une recherche par l'exemple équivalente : le vecteur d'un exemple a été écrit par l'appareil lui-même, alors qu'une image envoyée est réencodée ici par un autre moteur, ce qui la place à quelques centièmes de l'endroit où l'appareil l'aurait placée. Mesurés, les résultats sont malgré tout de qualité égale ; ce n'est simplement pas exactement le même ensemble. Ajouter `query` filtre les résultats selon ces mots, exactement comme pour un exemple. L'envoi d'un exemple *et* d'une image est refusé : les deux constituent l'élément à classer, la combinaison n'a donc pas de sens. Il s'agit de la requête la plus coûteuse traitée par ce point de terminaison. Une image envoyée charge le modèle de vision, et l'ajout de mots charge aussi le modèle textuel, les deux sur un conteneur à froid. Appeler `warm=1&warmTarget=image` dès que l'utilisateur prépare une image retire ce coût du chemin critique.

Paramètres

facilityId `string` (obligatoire) ID interne de l'installation dans laquelle effectuer la recherche body `string` (obligatoire) Octets bruts de l'image, non modifiés, 4 Mo au maximum query `string` (facultatif) Mots facultatifs pour affiner les résultats de l'image, en écartant les correspondances dont le score textuel est inférieur au seuil de pertinence de l'index.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie les informations de stockage et d'autres métriques de la vidéosurveillance du club

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la liste des enregistrements d'envoi de timelapses d'un club

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/cctv/timelapse/:club

Exemple de requête

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

Réponse

{}

Répertorier les actions effectuées par les utilisateurs sur les enregistrements dans le front-end ou l'interface CCTV

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Consigner une action effectuée par un utilisateur sur les enregistrements dans le front-end ou l'interface CCTV

Paramètres

body `string` (obligatoire) Objet JSON du nouveau bloc de configuration à ajouter au système.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Obtenir le jeton utilisateur pour le front-end ou l'interface CCTV

Paramètres

club `string` (obligatoire) ID du club

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Générer un jeton d'accès temporaire ou invité

Paramètres

club `string` (obligatoire) Identifiant unique du club. body `string` (obligatoire) Objet JSON des détails du jeton à émettre.

Point de terminaison

POST /api/cctv/token/{club}

Exemple de requête

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

Réponse

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

Renvoie la liste des enregistrements de jetons d'accès temporaire ou invité

Paramètres

club `string` (obligatoire) Identifiant unique du club.

Point de terminaison

GET /api/cctv/token/{club}

Exemple de requête

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

Réponse

{}

Obtenir un jeton d'accès à partir d'un ID d'accès

Paramètres

accessID `string` (obligatoire) ID de l'enregistrement du jeton dans la base de données.

Point de terminaison

POST /guest/cctv/token/:accessID

Exemple de requête

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

Réponse

{}

Supprimer des horaires d'accès de l'installation

Paramètres

facilityId `string` (obligatoire) body `object` (obligatoire) Objet JSON des nouveaux horaires d'accès.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la liste des horaires d'accès de l'installation

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Met à jour ou crée des horaires d'accès de l'installation

Paramètres

facilityId `string` (obligatoire) body `object` (obligatoire) Objet JSON des nouveaux horaires d'accès.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Supprimer une zone d'accès de l'installation

Paramètres

facilityId `string` (obligatoire) body `object` (obligatoire) Objet JSON de la nouvelle zone d'accès.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la liste des zones d'accès de l'installation

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Met à jour ou crée une zone d'accès de l'installation

Paramètres

facilityId `string` (obligatoire) body `object` (obligatoire) Objet JSON de la nouvelle zone d'accès.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie l'union de tous les ID de modules d'administration des marques et installations d'une organisation, sous forme d'objets module.

Paramètres

organisationId `string` (obligatoire) ID de l'organisation

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Renvoie la liste de toutes les organisations

Paramètres

includeBrands `string` (facultatif) Inclure les marques associées à l'organisation includeFacilities `string` (facultatif) Inclure les installations associées à l'organisation includeRegions `string` (facultatif) Inclure les régions associées à l'organisation

Point de terminaison

GET /api/organisations

Exemple de requête

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

Réponse

{}

Outil d'IA simple qui analyse le contenu d'un ticket d'assistance et propose des suggestions à partir des sujets disponibles, ainsi que des sujets de recherche Algolia suggérés...

Paramètres

messageBody `string` (obligatoire) Corps du message à envoyer topicData `string` (obligatoire) Objet ou tableau JSON des topicData renvoyées par osTicket (système de tickets et d'assistance) facilityId `string` (facultatif) ID interne du club, nécessaire pour déterminer l'index Algolia dans lequel effectuer la recherche.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

API simple de génération d'images

Paramètres

type `string` (obligatoire) Type d'image à générer name `string` (obligatoire) Nom de l'image maxSize `string` (facultatif) Taille maximale facultative de la réponse, par exemple 200KB, 1MB ou un nombre d'octets. L'image est redimensionnée ou compressée pour respecter cette taille.

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Requête LLM simple

Point de terminaison léger pour des requêtes LLM simples et sans état. Utilise un modèle économique sans raisonnement (gpt-4o-mini) avec des limites de jetons strictes. Pas d'historique de conversation, pas d'outils, pas de streaming : un prompt en entrée, du texte en sortie.

Corps de la requête

Point de terminaison

POST /api/ai/llm/query

Exemple de requête

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

Réponse

{}

Renvoie la configuration Algolia, notamment le nom de l'index, l'ID de l'application et la clé API.

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

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

Exemple de requête

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

Réponse

{}

Initialise l'index Algolia des supports marketing imprimés

Paramètres

organisationId `string` (obligatoire)

Point de terminaison

PUT /api/algolia/index

Exemple de requête

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

Réponse

{}

Rechercher des supports marketing imprimés

Corps de la requête

Point de terminaison

POST /algolia/search-marketing-print

Exemple de requête

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

Réponse

{}

Rechercher des supports marketing imprimés

Paramètres

club `string` (facultatif) ID du club searchTerms `string` (facultatif) Termes de recherche algoliaArgs `object` (facultatif) Arguments de recherche Algolia supplémentaires

Point de terminaison

GET /algolia/search-marketing-print

Exemple de requête

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

Réponse

{}

Met à jour en masse les objets marketing imprimés d'un club donné

Point de terminaison

POST /algolia/bulk-update-marketing-print

Exemple de requête

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

Réponse

{}

Récupère les supports marketing imprimés depuis Algolia.

Paramètres

organisationId `string` (obligatoire) search `string` (facultatif) limit `string` (facultatif) brand `string` (facultatif) tag `string` (facultatif)

Point de terminaison

GET /api/algolia/marketing/assets

Exemple de requête

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

Réponse

{}

Initialise l'index Algolia des supports marketing imprimés avec la configuration de l'installation.

Paramètres

organisationId `string` (obligatoire)

Point de terminaison

POST /api/algolia/marketing/assets

Exemple de requête

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

Réponse

{}

Effectue une recherche dans un index Algolia donné à partir de termes de recherche, d'un club et/ou d'une langue. La recherche peut être affinée avec des arguments Algolia supplémentaires.

Paramètres

searchTerms `string` (obligatoire) Termes à rechercher dans l'index Algolia. club `string` (facultatif) ID interne du club qui effectue la requête. S'il est indiqué, la recherche est filtrée selon la région associée au club. locale `string` (facultatif) Langue utilisée pour déterminer la région si aucun club n'est indiqué. Déduite de navigator.languages. algoliaArgs `string` (facultatif) Arguments supplémentaires ou personnalisés à transmettre à la requête de recherche Algolia.

Point de terminaison

POST /api/algolia/search-wiki

Exemple de requête

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

Réponse

{}

Répertorie toutes les annonces

Point de terminaison

GET /api/announcements/list

Exemple de requête

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

Réponse

{}

Envoie un fichier vers un BUCKET S3 PUBLIC (via l'API d'envoi de fichiers), qui le post-traite et l'optimise, génère des miniatures, etc. *Remarque : les fichiers seront accessibles publiquement*

Paramètres

file `string` (facultatif) Nom du fichier à envoyer.

Point de terminaison

POST /api/asset-upload

Exemple de requête

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

Réponse

{}

Renvoie l'état de l'envoi à partir de l'UUID de l'enregistrement d'envoi

Paramètres

uuid `string` (obligatoire) UUID de l'enregistrement d'envoi

Point de terminaison

GET /api/asset-upload/:uuid

Exemple de requête

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

Réponse

{}

Envoyer une commande au système Sonos du club

Paramètres

body `object` (obligatoire) Objet JSON de la commande et des données à envoyer à Sonos.

Point de terminaison

PUT /api/audio-control/command/:club

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/audio-control/command/:club \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Récupérer la configuration du front-end Contrôle audio

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/audio-control/config/:club

Exemple de requête

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

Réponse

{}

Modifier la configuration du front-end Contrôle audio

Paramètres

body `object` (obligatoire) Objet JSON du nouveau bloc de configuration à ajouter au système.

Point de terminaison

PUT /api/audio-control/config/:club/:section

Exemple de requête

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

Réponse

{}

Récupère les paramètres d'une marque pour une région donnée

Paramètres

brandId `string` (facultatif) ID de la marque regionCode `string` (facultatif) Code ISO de la région dont récupérer les paramètres

Point de terminaison

GET /api/brands/{brandId}/regions/{regionCode}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/regions/{regionCode} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Met à jour plusieurs paramètres d'une marque pour une région donnée

Paramètres

brandId `string` (facultatif) ID de la marque à mettre à jour regionCode `string` (facultatif) Code ISO de la région dont mettre à jour les paramètres acceptFreeTrialBookingsVisibility `string` (facultatif) customTrackingCodeVisibility `string` (facultatif) displayDataSources `string` (facultatif) displayDefaultDataSource `string` (facultatif) displayDefaultUI `string` (facultatif) displayUIOptions `string` (facultatif) defaultAboutBusiness `string` (facultatif) defaultAboutBusinessFacebook `string` (facultatif) facilityCoverImage `string` (facultatif) digitalProfileSettingsVisibility `string` (facultatif) facilityHoursVisibility `string` (facultatif) facilityLocationVisibility `string` (facultatif) facilityPaymentMethods `string` (facultatif) facilityPrimaryLogo `string` (facultatif) facilityStatusVisibility `string` (facultatif) landingPagesVisibility `string` (facultatif) lineChatIntegrationVisibility `string` (facultatif) whatsAppIntegrationVisibility `string` (facultatif) defaultWhatsAppMessage `string` (facultatif) socialUrlsVisibility `string` (facultatif) yextApiKey `string` (facultatif) Clé API utilisée par l'intégration Yext pour cette marque et cette région. Consultée uniquement lorsque `directorySyncMode` vaut `yext`. directorySyncMode `string` (facultatif) Système de synchronisation à exécuter pour les installations de cette marque et de cette région. Vaut `yext` par défaut lorsqu'il est absent, pour la rétrocompatibilité avec les marques antérieures au déploiement de Directory Publishers. websiteUrl `string` (facultatif) androidAppUrl `string` (facultatif) iosAppUrl `string` (facultatif) featuredMessageDescription `string` (facultatif) yextCategoryIds `string` (facultatif) Ancienne clé de stockage : il s'agit en réalité d'ID de catégories Google Business Profile (par exemple gcid:gym). Le préfixe "yext" est antérieur à l'abandon de Yext ; il est conservé pour la rétrocompatibilité avec les lignes existantes de la base de données. customInputFields `string` (facultatif) customInputFieldsToRemove `string` (facultatif)

Point de terminaison

PUT /api/brands/{brandId}/regions/{regionCode}

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/brands/{brandId}/regions/{regionCode} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Récupère les paramètres de marque d'une installation donnée

Paramètres

facilityId `string` (facultatif) ID de l'installation dont récupérer les paramètres de marque

Point de terminaison

GET /api/facilities/{facilityId}/brand-settings

Exemple de requête

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

Réponse

{}

Crée une nouvelle marque

Paramètres

name `string` (obligatoire) Nom de la marque organisationId `string` (obligatoire) ID de l'organisation à laquelle appartient la marque redirectDashboard `string` (facultatif) URL de redirection après la connexion, à la place du tableau de bord par défaut

Point de terminaison

POST /api/brands

Exemple de requête

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

Réponse

{}

Renvoie la liste de toutes les marques

Point de terminaison

GET /api/brands

Exemple de requête

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

Réponse

{}

Renvoie l'objet marque

Paramètres

brandId `string` (obligatoire) ID de la marque à récupérer includeOrganisation `boolean` (facultatif) Indique s'il faut inclure les données de l'organisation dans la réponse

Point de terminaison

GET /api/brands/{brandId}

Exemple de requête

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

Réponse

{}

Met à jour une marque à partir de son ID

Paramètres

brandId `string` (facultatif) ID de la marque à mettre à jour name `string` (obligatoire) Nom de la marque brandOrganisationId `string` (facultatif) ID de l'organisation à laquelle appartient la marque redirectDashboard `string` (facultatif) URL de redirection après la connexion, à la place du tableau de bord par défaut yextApiKey `string` (facultatif) Clé API utilisée pour accéder à l'API Yext pour cette marque customMenuLayout `object` (facultatif) Arborescence du menu latéral propre à la marque (sections / groupes / éléments faisant référence à des modules du système ou à des URL personnalisées). Ne peut être définie que par un administrateur de l'organisation de cette marque.

Point de terminaison

PUT /api/brands/{brandId}

Exemple de requête

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

Réponse

{}

Répertorier les installations d'une marque

Renvoie une liste allégée des installations (ID, nom, code ISO de la région) appartenant à la marque. Sert à alimenter les sélecteurs de ciblage d'installations dans la configuration de la marque.

Paramètres

brandId `string` (obligatoire) ID de la marque dont répertorier les installations

Point de terminaison

GET /api/brands/{brandId}/facilities

Exemple de requête

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

Réponse

{}

Renvoie la liste de toutes les marques associées à l'organisation du club.

Point de terminaison

GET /api/clubs/{club}/brands

Exemple de requête

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

Réponse

{}

Renvoie la liste de tous les types de calendrier

Point de terminaison

GET /api/programs/calendars/calendar-types

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/programs/calendars/calendar-types \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Supprimer une bannière du tableau de bord

Supprime logiquement une bannière du tableau de bord appartenant à la marque.

Paramètres

brandId `string` (obligatoire) ID de la marque à laquelle appartient la bannière bannerId `string` (obligatoire) ID de la bannière à supprimer

Point de terminaison

DELETE /api/brands/{brandId}/dashboard-banners/{bannerId}

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/brands/{brandId}/dashboard-banners/{bannerId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Répertorier les bannières du tableau de bord d'une marque

Renvoie toutes les bannières du tableau de bord (non supprimées) configurées pour la marque, à des fins de gestion.

Paramètres

brandId `string` (obligatoire) ID de la marque dont répertorier les bannières

Point de terminaison

GET /api/brands/{brandId}/dashboard-banners

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/dashboard-banners \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Créer ou mettre à jour une bannière du tableau de bord

Crée une nouvelle bannière du tableau de bord pour la marque, ou met à jour une bannière existante lorsque `bannerId` est fourni dans le corps. Les bannières peuvent être planifiées (début/fin en secondes Unix, null = sans limite) et ciblées sur toute la marque, sur des régions précises (codes ISO) ou sur des installations précises.

Paramètres

brandId `string` (obligatoire) ID de la marque à laquelle appartient la bannière

Corps de la requête

Point de terminaison

PUT /api/brands/{brandId}/dashboard-banners

Exemple de requête

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

Réponse

{}

Obtenir les bannières actives du tableau de bord d'une installation

Détermine les bannières du tableau de bord à afficher actuellement pour une installation, selon la marque et la région (code pays ISO) de l'installation, ainsi que l'indicateur d'activation, la période de diffusion et le ciblage de chaque bannière. Utilisé par les interfaces du tableau de bord.

Paramètres

facilityId `string` (obligatoire) L'ID de l'installation pour laquelle déterminer les bannières

Point de terminaison

GET /api/facilities/{facilityId}/dashboard-banners

Exemple de requête

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

Réponse

{}

Renvoie le fichier KYC d'un club.

Paramètres

clubId `string` (obligatoire) ID du club. key `string` (obligatoire) Clé du fichier KYC.

Point de terminaison

GET /api/clubs/{clubId}/kyc-assets/{key}

Exemple de requête

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

Réponse

{}

Renvoie les informations KYC du club.

Point de terminaison

GET /api/clubs/{clubId}/kyc

Exemple de requête

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

Réponse

{}

Met à jour les informations KYC du club.

Paramètres

clubId `string` (obligatoire) ID du club à mettre à jour. body `object` (obligatoire)

Point de terminaison

PUT /api/clubs/{clubId}/kyc

Exemple de requête

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

Réponse

{}

Envoie un fichier KYC pour un club.

Paramètres

clubId `string` (obligatoire) ID du club. file `string` (obligatoire) Fichier à envoyer.

Point de terminaison

POST /api/clubs/{clubId}/kyc-assets

Exemple de requête

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

Réponse

{}

Renvoie les paramètres de préférences du club.

Point de terminaison

GET /api/club/preferences/:club

Exemple de requête

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

Réponse

{}

Crée ou met à jour une entrée de préférences du club.

Corps de la requête

Point de terminaison

POST /api/club/preferences/:club

Exemple de requête

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

Réponse

{}

Renvoie la liste des membres ayant un accord.

Point de terminaison

GET /api/clubpass/user/email/exist/:club

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/clubpass/user/email/exist/:club \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste des membres ayant un accord.

Point de terminaison

GET /api/clubpass/user/phone/exist/:club

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/clubpass/user/phone/exist/:club \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste des utilisateurs du club indiqué

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder

Point de terminaison

GET /api/clubs/{club}/members

Exemple de requête

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

Réponse

{}

Indique si le club est ouvert à la date donnée.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. date `string` (obligatoire) Date à vérifier, au format Unix

Point de terminaison

GET /api/club-busy-hours/:club

Exemple de requête

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

Réponse

{}

Renvoie toutes les métadonnées du club affichées sur les sites web Example Club.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/clubs/clubpage/clubdata/{club}

Exemple de requête

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

Réponse

{}

Met à jour les métadonnées d'un club avec les nouvelles données fournies par le front-end. Les champs absents du corps de la requête sont conservés (ni SET ni REMOVE). Les champs envoyés avec `null` ou une chaîne vide sont effacés. Passez `updateAll: false` pour utiliser le chemin dédié de fusion partielle ; dans les deux cas, les appelants n'ont jamais besoin d'envoyer des champs qui ne leur appartiennent pas.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. body `string` (obligatoire) Objet JSON des données du club à mettre à jour.

Point de terminaison

POST /api/clubs/clubpage/updateclub/{club}

Exemple de requête

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

Réponse

{}

ajouter un nouvel enregistrement de suivi personnalisé

Paramètres

club `string` (obligatoire) ID du club body `string` (obligatoire) Tableau des éléments de suivi personnalisé.

Point de terminaison

POST /api/clubs/{club}/customtracking

Exemple de requête

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

Réponse

{}

Renvoie le suivi personnalisé d'un club donné

Point de terminaison

GET /api/clubs/customtracking/:clubID

Exemple de requête

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

Réponse

{}

Mettre à jour les entrées de suivi personnalisé

Paramètres

club `string` (obligatoire) ID du club body `string` (obligatoire) Objet JSON des données du club à mettre à jour.

Point de terminaison

POST /api/clubs/{club}/customtracking/update

Exemple de requête

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

Réponse

{}

Renvoie l'image de devanture par défaut d'un club.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/clubs/{club}/default-shop-front

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/default-shop-front \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Répertorier les portes disponibles dans l'installation

Paramètres

body `object` (obligatoire) Objet JSON des données du club à mettre à jour.

Point de terminaison

POST /api/clubs/integrations/doors/:facilityId

Exemple de requête

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

Réponse

{}

Déverrouiller une porte donnée de l'installation

Paramètres

body `object` (obligatoire) Objet JSON des données du club à mettre à jour.

Point de terminaison

POST /api/clubs/integrations/doors/unlock

Exemple de requête

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

Réponse

{}

Renvoie toutes les intégrations et leurs détails de configuration pour le club indiqué.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/clubs/integrations/list/{club}

Exemple de requête

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

Réponse

{}

Met à jour les métadonnées d'un club avec les nouvelles données fournies par le front-end.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. body `object` (obligatoire) Objet JSON des données du club à mettre à jour.

Point de terminaison

POST /api/clubs/integrations/update/{club}

Exemple de requête

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

Réponse

{}

Renvoie un booléen indiquant si le club se trouve dans un pays européen

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. date `string` (obligatoire) Date à vérifier, au format Unix

Point de terminaison

GET /api/clubs/is-eu/{club}

Exemple de requête

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

Réponse

{}

Renvoie une liste générale de tous les clubs de notre base de données.

Point de terminaison

GET /api/clubs/listclubs

Exemple de requête

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

Réponse

{}

Indique si le club est ouvert à la date donnée.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. date `string` (obligatoire) Date à vérifier, au format Unix

Point de terminaison

GET /api/clubs/{club}/open-on/{date}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/open-on/{date} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Récupère les avis du club depuis DynamoDB.

Paramètres

club `string` (obligatoire) ID du club

Point de terminaison

GET /api/clubs/{club}/reviews

Exemple de requête

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

Réponse

{}

Récupère les paramètres des avis du club depuis DynamoDB.

Paramètres

facilityId `string` (obligatoire) ID de l'installation

Point de terminaison

GET /api/clubs/{club}/reviews-settings

Exemple de requête

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

Réponse

{}

Met à jour les paramètres des avis du club dans DynamoDB.

Paramètres

club `string` (obligatoire) ID du club

Point de terminaison

PUT /api/clubs/{club}/reviews-settings

Exemple de requête

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

Réponse

{}

Réactive la publication automatique dans les paramètres des avis.

Paramètres

club `string` (obligatoire) ID du club

Point de terminaison

PUT /api/clubs/{club}/reviews/publish-recent-reviews

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/publish-recent-reviews \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Publie un avis

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. review `string` (obligatoire) ID interne de l'avis à publier.

Point de terminaison

PUT /api/clubs/{club}/reviews/{review}/publish

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{review}/publish \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Réactive la publication automatique dans les paramètres des avis.

Paramètres

club `string` (obligatoire) ID du club

Point de terminaison

PUT /api/clubs/{club}/reviews-settings/re-enable-auto-publish

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings/re-enable-auto-publish \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Publie une réponse à un avis via la plateforme d'origine de l'avis (Google, etc.).

Paramètres

club `string` (obligatoire) ID de l'installation reviewId `string` (obligatoire) ID de l'avis PH (recherché dans la table club-social-reviews) body `string` (obligatoire)

Point de terminaison

POST /api/clubs/{club}/reviews/{reviewId}/respond

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{reviewId}/respond \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Dépublie un avis

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. review `string` (obligatoire) ID interne de l'avis à dépublier.

Point de terminaison

PUT /api/clubs/{club}/reviews/{review}/un-publish

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{review}/un-publish \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste des propriétaires du club indiqué depuis la base de données PH

Paramètres

clubID `string` (obligatoire) ID interne du club auquel vous souhaitez accéder

Point de terminaison

GET /api/clubs/{clubID}/owners

Exemple de requête

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

Réponse

{}

Renvoie toutes les formules d'abonnement de l'installation.

Paramètres

facilityId `string` (obligatoire) ID interne de l'installation

Point de terminaison

GET /api/facilities/membership-plans/:facilityId

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/facilities/membership-plans/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Met à jour une formule d'abonnement.

Paramètres

facilityId `string` (obligatoire) ID interne de l'installation body `object` (obligatoire) Objet JSON des données de la formule d'abonnement à mettre à jour.

Point de terminaison

PUT /api/facilities/membership-plans/:facilityId

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/facilities/membership-plans/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Réactive la publication automatique dans les paramètres des avis.

Paramètres

club `string` (obligatoire) ID du club

Point de terminaison

PUT /api/clubs/{club}/reviews/publish-recent-reviews

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/publish-recent-reviews \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Réactive la publication automatique dans les paramètres des avis.

Paramètres

club `string` (obligatoire) ID du club

Point de terminaison

PUT /api/clubs/{club}/reviews-settings/re-enable-auto-publish

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings/re-enable-auto-publish \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste de toutes les devises disponibles

Point de terminaison

GET /api/currencies

Exemple de requête

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

Réponse

{}

Renvoie la position géographique à partir d'une adresse IP.

Paramètres

ip `string` (obligatoire) Adresse IP à rechercher

Point de terminaison

GET /api/geo/ip-location/:club

Exemple de requête

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

Réponse

{}

Renvoie la position géographique de l'utilisateur actuel d'après son adresse IP.

Point de terminaison

GET /api/geo/ip-current

Exemple de requête

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

Réponse

{}

Renvoie uniquement l'adresse IP publique du client demandeur (aucune géolocalisation, aucun appel à une API tierce). Utilisé par l'applet Agent IA pour comparer l'adresse IP publique du navigateur à l'adresse IP WAN signalée par un appareil, afin de détecter s'ils sont sur le même réseau.

Point de terminaison

GET /api/geo/client-ip

Exemple de requête

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

Réponse

{}

Analyseur de numéros de téléphone.

Paramètres

body `string` (obligatoire) Objet JSON du numéro à analyser.

Point de terminaison

POST /api/phone/parser

Exemple de requête

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

Réponse

{}

Renvoie l'appareil horloge maître

Paramètres

club_id `string` (obligatoire) ID interne du club auquel vous souhaitez ajouter l'appareil.

Point de terminaison

GET /api/clubs/{club_id}/smart-club/health-check/master-clock

Exemple de requête

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"

Réponse

{}

Renvoie l'appareil Sonos maître

Paramètres

club_id `string` (obligatoire) ID interne du club auquel vous souhaitez ajouter l'appareil.

Point de terminaison

GET /api/clubs/{club_id}/smart-club/health-check/sonos-mqtt

Exemple de requête

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"

Réponse

{}

obtenir les notifications de batterie faible Duress pour un club donné.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/clubs/{club}/smart-club/health-check/low-battery-duress

Exemple de requête

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"

Réponse

{}

Renvoie les données d'analyse du réseau

Paramètres

club_id `string` (obligatoire) ID interne du club auquel vous souhaitez ajouter l'appareil.

Point de terminaison

GET /api/clubs/{club_id}/smart-club/health-check/network-analysis

Exemple de requête

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"

Réponse

{}

envoyer les notifications de batterie faible Duress pour un club donné.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/clubs/{club}/smart-club/health-check/send-low-battery-duress-notifs

Exemple de requête

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"

Réponse

{}

Renvoie les données de test de débit des appareils pour chaque type d'appareil

Paramètres

club_id `string` (obligatoire) ID interne du club auquel vous souhaitez ajouter l'appareil.

Point de terminaison

GET /api/clubs/{club_id}/smart-club/health-check/speed-test

Exemple de requête

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"

Réponse

{}

Obtenir les statistiques de fiche d'une installation. Renvoie par défaut les totaux quotidiens agrégés de tous les éditeurs, ou ceux d'un seul éditeur lorsque `publisherId` est fourni.

Paramètres

facilityId `string` (obligatoire) publisherId `string` (facultatif) startDate `string` (obligatoire) endDate `string` (obligatoire)

Point de terminaison

GET /api/facilities/{facilityId}/directory-insights

Exemple de requête

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

Réponse

{}

Obtenir les statistiques de fiche agrégées d'une marque pour tous les éditeurs.

Paramètres

brandId `string` (obligatoire) startDate `string` (obligatoire) endDate `string` (obligatoire)

Point de terminaison

GET /api/brands/{brandId}/directory-insights

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/directory-insights \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Principaux mots-clés de recherche (avec répartition marque / hors marque) pour une installation, provenant actuellement de Google Business Profile.

Paramètres

facilityId `string` (obligatoire) publisherId `string` (facultatif) Valeur par défaut : "google" ; seul Google est pris en charge actuellement. startDate `string` (obligatoire) endDate `string` (obligatoire) limit `string` (facultatif)

Point de terminaison

GET /api/facilities/{facilityId}/directory-search-keywords

Exemple de requête

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

Réponse

{}

Principaux mots-clés de recherche d'une marque, agrégés sur toutes les installations.

Paramètres

brandId `string` (obligatoire) startDate `string` (obligatoire) endDate `string` (obligatoire) limit `string` (facultatif)

Point de terminaison

GET /api/brands/{brandId}/directory-search-keywords

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/directory-search-keywords \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lister les questions-réponses d'une installation.

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/facilities/{facilityId}/qna

Exemple de requête

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

Réponse

{}

Répondre à une question.

Point de terminaison

POST /api/facilities/{facilityId}/qna/{questionId}/answer

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna/{questionId}/answer \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Supprimer une réponse.

Point de terminaison

DELETE /api/facilities/{facilityId}/qna/{questionId}/answer/{answerId}

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna/{questionId}/answer/{answerId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie les éditeurs activés pour l'organisation de l'installation, avec leur état de connexion.

Paramètres

facilityId `string` (obligatoire) organisationId `string` (obligatoire)

Point de terminaison

GET /api/facilities/{facilityId}/directory-publishers/resolved

Exemple de requête

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

Réponse

{}

Obtenir les paramètres partagés de Door/Gate Access d'une installation

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/door-access/rules/{facilityId}

Exemple de requête

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

Réponse

{}

Mettre à jour les paramètres partagés de Door/Gate Access d'une installation

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

PUT /api/door-access/rules/{facilityId}

Exemple de requête

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

Réponse

{}

Obtenir les Access Policies d'une installation

La configuration d'accès existante est automatiquement convertie en stratégies appliquées équivalentes lors de la première lecture.

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/door-access/policies/{facilityId}

Exemple de requête

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

Réponse

{}

Remplacer les Access Policies avec contrôle de révision optimiste

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

PUT /api/door-access/policies/{facilityId}

Exemple de requête

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

Réponse

{}

Créer une Access Policy

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

POST /api/door-access/policies/{facilityId}

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Mettre à jour une Access Policy

Paramètres

facilityId `string` (obligatoire) policyId `string` (obligatoire)

Point de terminaison

PATCH /api/door-access/policies/{facilityId}/{policyId}

Exemple de requête

curl -X PATCH https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Supprimer une Access Policy

Paramètres

facilityId `string` (obligatoire) policyId `string` (obligatoire) revision `integer` (obligatoire)

Point de terminaison

DELETE /api/door-access/policies/{facilityId}/{policyId}

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Dupliquer une Access Policy avec un nouvel ID stable

Paramètres

facilityId `string` (obligatoire) policyId `string` (obligatoire)

Point de terminaison

POST /api/door-access/policies/{facilityId}/{policyId}/duplicate

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId}/duplicate \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Compter les utilisateurs et les portes concernés par toutes les Access Policies

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/door-access/policies/{facilityId}/impacts

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/impacts \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Compter les utilisateurs et les portes concernés par une Access Policy

Paramètres

facilityId `string` (obligatoire) policyId `string` (obligatoire)

Point de terminaison

GET /api/door-access/policies/{facilityId}/{policyId}/impact

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId}/impact \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lister les types de personnes, statuts et étiquettes de l'installation

Renvoie les valeurs distinctes de type de personne, de statut d'adhésion et d'étiquette présentes dans les lignes User Access de l'installation (ph-door-access-users), issues de la synchronisation partenaire et de la saisie manuelle. L'applet door-gate-access s'en sert pour remplir les listes déroulantes des règles d'accès. Les étiquettes sont l'union des `tags` synchronisés et des `customTags` d'administration, comme dans l'évaluateur de règles.

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/door-access/people-config/{facilityId}

Exemple de requête

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

Réponse

{}

Lister les contrôleurs de porte d'une installation avec leurs règles Door/Gate Access effectives

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/door-access/doors/{facilityId}

Exemple de requête

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

Réponse

{}

Enregistrer les remplacements par porte, l'icône et la configuration côté appareil

Point d'écriture unique pour tout ce que l'applet d'administration DGA modifie sur une porte : - `accessRulesOverride` / `geofenceOverride` : transmettez `null` pour effacer la valeur et revenir à la valeur par défaut de l'installation. - `icon` : clé de transmission stable (voir services/door-access/door-icons.js) ; les valeurs inconnues renvoient 400. - `holdTimeSeconds` (1 à 30), `maintenanceMode` (`off` / `force-open` / `force-closed`), `doorLocation` (texte libre, 64 caractères maximum), `playNotificationSoundOnRelayToggle` (booléen), `autoUnlockSchedule` (grille de créneaux hebdomadaires). Ces champs n'étaient auparavant modifiables que dans Gestion d'appareils, mais l'applet les écrit désormais sur place, pour que les administrateurs n'aient pas à quitter le panneau de la porte pour les modifications de configuration courantes. Lorsque l'un des champs côté appareil est modifié, la route transmet aussi les variables d'environnement Balena correspondantes (`RELAY_NOTIFICATION_SOUND`, `DOOR_MAINTENANCE_MODE`, `DOOR_AUTO_UNLOCK_SCHEDULE`) et envoie une commande MQTT `unlockUpdates`, afin que l'appareil applique la nouvelle configuration sans attendre la prochaine actualisation des variables Balena. Au mieux : la réponse est 200 même si Balena est temporairement injoignable.

Paramètres

facilityId `string` (obligatoire) doorId `string` (obligatoire)

Corps de la requête

Point de terminaison

PUT /api/door-access/doors/{facilityId}/{doorId}/override

Exemple de requête

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

Réponse

{}

Sonde légère de l'état Balena pour l'avis de rechargement du panneau de la porte

Le panneau de l'applet DGA récupère ces données à la demande lorsqu'un administrateur ouvre une porte, afin d'afficher le bon texte « l'enregistrement va recharger le contrôleur » : la variante par défaut « quelques secondes », ou la variante plus forte « plusieurs minutes » lorsqu'une mise à jour de version est aussi en attente. Renvoie un instantané à plat dérivé de `balena.models.device.get()`. En cas d'échec, renvoie `data: null` (plutôt qu'une erreur 5xx), de sorte qu'une panne de Balena dégrade le texte de l'avis au lieu d'empêcher l'ouverture du panneau.

Paramètres

facilityId `string` (obligatoire) doorId `string` (obligatoire)

Point de terminaison

GET /api/door-access/doors/{facilityId}/{doorId}/device-status

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/device-status \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Forçage administrateur : déverrouiller une porte depuis l'applet

Active brièvement le relais selon le `holdTimeSeconds` actuel de la porte, et écrit une ligne d'audit `admin-override` dans ph-door-app-access-events afin que l'action soit attribuable dans les Journaux d'accès. Réussit toujours, même si `maintenanceMode === 'force-closed'` : c'est l'issue de secours de l'administrateur. Renvoie 200 dès que la publication MQTT est envoyée ; les états confirmé / échoué / expiré ne sont pas attendus ici (l'ancien flux /api/devices/door-controllers + /api/ics/devices/command fonctionne lui aussi sans attente de confirmation).

Paramètres

facilityId `string` (obligatoire) doorId `string` (obligatoire)

Point de terminaison

POST /api/door-access/doors/{facilityId}/{doorId}/unlock

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/unlock \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Émettre une séquence de bips de localisation sur le contrôleur de porte

Publie une commande MQTT `beep` pour que le contrôleur émette trois bips de durée moyenne (environ 500 ms chacun, environ 350 ms d'intervalle, environ 2 s au total). Utilisé par les administrateurs pour localiser physiquement un contrôleur de porte sur site. L'ancien bouton de Gestion d'appareils utilise une salve d'environ 30 s de bips courts, mais le pilote du buzzer du firmware n'émet de façon fiable que le premier ; l'applet envoie donc une séquence plus courte et plus fiable. Aucune ligne d'audit : action de diagnostic sans effet sur le contrôle d'accès.

Paramètres

facilityId `string` (obligatoire) doorId `string` (obligatoire)

Point de terminaison

POST /api/door-access/doors/{facilityId}/{doorId}/identify

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/identify \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Redémarrer à distance un contrôleur de porte

Publie la même commande MQTT `rebootDevice`, sans attente de confirmation, que le bouton « Remotely Reboot Device » de l'ancienne Gestion d'appareils, mais conditionnée par le module `door-gate-access`, pour que les administrateurs DGA puissent redémarrer un contrôleur depuis la section Advanced du panneau de la porte sans autorisation `device-management` distincte. Renvoie 200 dès que la publication est envoyée ; l'appareil passe hors ligne pendant le redémarrage.

Paramètres

facilityId `string` (obligatoire) doorId `string` (obligatoire)

Point de terminaison

POST /api/door-access/doors/{facilityId}/{doorId}/reboot

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/reboot \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lister les lignes User Access d'une installation

Renvoie toutes les lignes user-access non supprimées de l'installation. Prend en charge des filtres côté client (source, search, accessEnabled, hasGrants). Le calcul côté serveur `hideExcluded` de la phase 4 sera ajouté lorsque l'évaluateur d'autorisations hybrides sera disponible ; pour l'instant, le paramètre est accepté mais l'ensemble complet est renvoyé.

Paramètres

facilityId `string` (obligatoire) search `string` (facultatif) source `string` (facultatif) accessEnabled `string` (facultatif) hasGrants `string` (facultatif) hideExcluded `boolean` (facultatif) Si true, les utilisateurs synchronisés (source != manual) qui ne peuvent franchir aucune porte de cette installation à aucun moment sont masqués. La réponse inclut une enveloppe `hidden: { count, sample }`.

Point de terminaison

GET /api/door-access/users/{facilityId}

Exemple de requête

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

Réponse

{}

Créer manuellement une ligne User Access dans une installation

Crée une nouvelle ligne avec `source: 'manual'`. Renvoie 409 avec `existingUserId` si le téléphone ou l'e-mail fourni correspond déjà à une ligne de cette installation.

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/door-access/users/{facilityId}

Exemple de requête

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

Obtenir une ligne User Access

Paramètres

facilityId `string` (obligatoire) userId `string` (obligatoire)

Point de terminaison

GET /api/door-access/users/{facilityId}/{userId}

Exemple de requête

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

Réponse

{}

Mise à jour partielle d'une ligne User Access

Modifie n'importe quel sous-ensemble des champs d'identité et d'autorisation. Transmettez `null` pour effacer un champ facultatif. Renvoie 409 si le nouveau téléphone ou e-mail entre en conflit avec une autre ligne de la même installation. `appMessage` accepte la même structure que le message à l'échelle de l'installation de PUT /api/door-access/rules/{facilityId} : corps du texte, gravité, lien facultatif, calendrier de début et de fin facultatif. L'application mobile l'affiche sur le tableau de bord uniquement pour l'utilisateur ciblé.

Paramètres

facilityId `string` (obligatoire) userId `string` (obligatoire)

Corps de la requête

Point de terminaison

PATCH /api/door-access/users/{facilityId}/{userId}

Exemple de requête

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

Réponse

{}

Supprimer de manière logique une ligne User Access

Marque la ligne `deleted: true` et désactive l'accès. Le lien du journal d'audit avec le userId est conservé ; les administrateurs peuvent réactiver l'accès manuellement.

Paramètres

facilityId `string` (obligatoire) userId `string` (obligatoire)

Point de terminaison

DELETE /api/door-access/users/{facilityId}/{userId}

Exemple de requête

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

Réponse

{}

Attribution des accès par porte pour un utilisateur

Pour chaque porte, renvoie l'autorisation déterministe actuelle (`allowedNow`, `allowedVia`, `deniedReason`) et les chemins configurés pour les Access Policies, les autorisations permanentes, les calendriers de stratégie, les autorisations par créneau horaire accordées par un administrateur et les créneaux récents mappés depuis la source partenaire. Renvoie aussi la disponibilité active ou suivante et la fraîcheur de la source. Le blockAllAccess de la porte et la maintenance sont évalués avant tous les chemins d'autorisation.

Paramètres

facilityId `string` (obligatoire) userId `string` (obligatoire)

Point de terminaison

GET /api/door-access/users/{facilityId}/{userId}/effective-access

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/effective-access \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Créer en masse des lignes User Access à partir d'une importation CSV

Crée plusieurs lignes `source: 'manual'` en une seule requête, en réutilisant la même validation, la même normalisation du téléphone et de l'e-mail, le même contrôle de conflit par installation, la même messagerie automatique et la même logique d'invitation (facultative) que la création unitaire. Les lignes sont traitées dans l'ordre : une ligne ultérieure en conflit avec une ligne créée plus tôt est signalée comme doublon. Les autorisations sont fournies sous forme d'ID de porte ou de groupe déjà résolus (le client convertit les noms en ID). Les autorisations par créneau horaire sont volontairement refusées en masse et doivent être ajoutées via le point de terminaison de remplacement par utilisateur après l'importation. Ne lève jamais d'erreur par ligne ; le résultat de chaque ligne est signalé individuellement.

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/door-access/users/{facilityId}/bulk

Exemple de requête

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

Réponse

{}

Remplacer les autorisations hybrides d'une ligne User Access

Interface de l'évaluateur hybride de la phase 3. Les autorisations coexistent avec les règles d'étiquettes de l'installation : un utilisateur est autorisé si l'une ou l'autre correspond au moment du déverrouillage.

Paramètres

facilityId `string` (obligatoire) userId `string` (obligatoire)

Corps de la requête

Point de terminaison

PUT /api/door-access/users/{facilityId}/{userId}/grants

Exemple de requête

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

Réponse

{}

Remplacer les autorisations additives Access Time Window d'une ligne User Access

Remplace uniquement `timeWindowGrants` ; les `grants` permanents et les `sourceTimeWindows` d'intégration ne sont pas modifiés. Chaque élément exige une portée (`facilityWide`, `doors` ou `groups`) et un `window` absolu ou hebdomadaire. L'envoi d'un tableau vide efface explicitement tous les créneaux d'administration.

Paramètres

facilityId `string` (obligatoire) userId `string` (obligatoire)

Corps de la requête

Point de terminaison

PUT /api/door-access/users/{facilityId}/{userId}/time-window-grants

Exemple de requête

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

Réponse

{}

Figer une ligne User Access face aux mises à jour de synchronisation provenant de la source

Définit `decoupledFromSource: true`, efface tous les `sourceTimeWindows` gérés par l'intégration, et fait en sorte que la synchronisation (cron + flux) journalise et ignore cette ligne jusqu'à ce qu'un administrateur efface l'indicateur via /recouple.

Paramètres

facilityId `string` (obligatoire) userId `string` (obligatoire)

Point de terminaison

POST /api/door-access/users/{facilityId}/{userId}/decouple

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/decouple \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Rattacher une ligne User Access aux mises à jour de synchronisation provenant de la source

Paramètres

facilityId `string` (obligatoire) userId `string` (obligatoire)

Point de terminaison

POST /api/door-access/users/{facilityId}/{userId}/recouple

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/recouple \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Révoquer tous les jetons d'actualisation de l'application Door/Gate Access d'un utilisateur

Révoque selon le téléphone ou l'e-mail enregistré de l'utilisateur (la table des jetons d'actualisation est indexée par `sha256(plaintext)` ; les GSI byMobilePhone / byEmail permettent une suppression en éventail à partir d'un seul utilisateur). Les autres utilisateurs partageant le même téléphone ou e-mail dans une autre installation seraient aussi déconnectés.

Paramètres

facilityId `string` (obligatoire) userId `string` (obligatoire)

Point de terminaison

POST /api/door-access/users/{facilityId}/{userId}/logout

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/logout \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

(Ré)envoyer l'e-mail d'invitation à l'application Door/Gate Access à un utilisateur

Force l'envoi de l'e-mail d'invitation au téléchargement de l'application à l'adresse e-mail enregistrée de l'utilisateur (e-mail uniquement, pas de SMS). Ignore les contrôles d'éligibilité et de déjà-envoyé utilisés par la synchronisation automatique : il s'agit d'une action explicite d'un administrateur. Renvoie 400 si aucun e-mail n'est enregistré pour l'utilisateur.

Paramètres

facilityId `string` (obligatoire) userId `string` (obligatoire)

Point de terminaison

POST /api/door-access/users/{facilityId}/{userId}/resend-invite

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/resend-invite \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Prévisualiser les destinataires d'un envoi groupé d'invitations à l'application

Calcule l'ensemble des utilisateurs qui recevraient un e-mail d'invitation à l'application. Le groupe de base comprend tous les utilisateurs non supprimés disposant d'un e-mail et n'ayant jamais utilisé l'application (`appLastSeenAt` vide). Par défaut, le groupe est restreint aux utilisateurs qui ont actuellement accès (correspondance de règle ou autorisation) et n'ont jamais été invités ; `includeAlreadyInvited` et `includeNoAccess` l'élargissent. Aucun e-mail n'est envoyé : renvoie des totaux, un petit échantillon et les userIds candidats pour le point de terminaison d'exécution.

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/door-access/users/{facilityId}/bulk-invite/preview

Exemple de requête

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

Réponse

{}

Envoyer des e-mails d'invitation à l'application à un lot d'utilisateurs

Envoie l'e-mail d'invitation au téléchargement de l'application à chacun des userIds fournis (50 maximum par requête ; le client découpe en lots la liste complète des candidats issue de la prévisualisation). Chaque utilisateur est revalidé au moment de l'envoi : les lignes qui n'existent plus, sans e-mail ou dont l'utilisateur a utilisé l'application depuis la prévisualisation sont ignorées, jamais en échec. Le résultat de chaque utilisateur est signalé individuellement pour que le client puisse récapituler les envois réussis, échoués et ignorés.

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/door-access/users/{facilityId}/bulk-invite

Exemple de requête

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

Réponse

{}

Lister les groupes de portes d'une installation

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/door-access/door-groups/{facilityId}

Exemple de requête

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

Réponse

{}

Créer un groupe de portes

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/door-access/door-groups/{facilityId}

Exemple de requête

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

Obtenir un groupe de portes

Paramètres

facilityId `string` (obligatoire) groupId `string` (obligatoire)

Point de terminaison

GET /api/door-access/door-groups/{facilityId}/{groupId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Mettre à jour un groupe de portes

Paramètres

facilityId `string` (obligatoire) groupId `string` (obligatoire)

Corps de la requête

Point de terminaison

PATCH /api/door-access/door-groups/{facilityId}/{groupId}

Exemple de requête

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

Réponse

{}

Supprimer de manière logique un groupe de portes

Paramètres

facilityId `string` (obligatoire) groupId `string` (obligatoire)

Point de terminaison

DELETE /api/door-access/door-groups/{facilityId}/{groupId}

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lister les intégrations partenaires configurées dans une installation

Renvoie les intégrations partenaires de l'installation (id, name, logo, enabled) en joignant ph-facility-partner-config au catalogue ph-partners. Limité à door-gate-access (pour que les administrateurs sans accès external-integrations puissent quand même afficher les badges partenaires et la liste de synchronisation par partenaire).

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/door-access/partners/{facilityId}

Exemple de requête

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

Réponse

{}

Lire la configuration de synchronisation User Access d'une installation

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/door-access/sync-config/{facilityId}

Exemple de requête

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

Réponse

{}

Mettre à jour la configuration de synchronisation User Access d'une installation

Seuls les champs contrôlés par l'administrateur (`enabled`, `requireIdentifier` et la table `partners` des partenaires) sont acceptés ; `lastRunAt` et `lastRunCounts` sont écrits par le moteur de synchronisation lui-même. `partner.partners` est une table d'activation par partenaire indexée par partnerId (désactivation explicite) : lorsque le `partner.enabled` principal est activé, un partenaire est synchronisé sauf s'il a ici une entrée explicite `{ enabled: false }`.

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

PUT /api/door-access/sync-config/{facilityId}

Exemple de requête

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

Réponse

{}

Lire la configuration de messagerie automatique par utilisateur d'une installation

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/door-access/auto-messages/{facilityId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Mettre à jour la configuration de messagerie automatique par utilisateur d'une installation

Enregistre les règles, puis réévalue immédiatement chaque ligne User Access de l'installation, afin que les utilisateurs existants reçoivent ou perdent tout de suite leur message automatique. Les messages manuels et les lignes découplées ne sont pas modifiés.

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

PUT /api/door-access/auto-messages/{facilityId}

Exemple de requête

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

Réponse

{}

État de la réévaluation en arrière-plan des messages automatiques

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/door-access/auto-messages/{facilityId}/sweep-status

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId}/sweep-status \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lancer à la demande une synchronisation User Access pour une installation

Parcourt de façon synchrone chaque source activée (partenaire / vidéosurveillance) de l'installation et fait converger les lignes ph-door-access-users via la cascade de dédoublonnage. Renvoie des totaux par source. Les sources désactivées apparaissent sous la forme `skippedSyncDisabled: 1` plutôt que d'être absentes, afin que l'interface puisse afficher les deux lignes de façon cohérente.

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

POST /api/door-access/sync/{facilityId}/run

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/run \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Prévisualisation à blanc d'une suppression groupée des utilisateurs synchronisés par un partenaire

Renvoie le nombre et un échantillon des lignes user-access qui seraient supprimées de manière logique, ainsi qu'un confirmToken à renvoyer au point de terminaison d'exécution. Aucune donnée n'est modifiée. Les journaux d'accès ne sont jamais affectés.

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/door-access/sync/{facilityId}/bulk-delete/preview

Exemple de requête

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

Réponse

{}

Exécuter une suppression groupée des utilisateurs synchronisés par un partenaire (suppression logique)

Supprime de manière logique toutes les lignes user-access synchronisées par un partenaire comprises dans la portée. Exige le confirmToken renvoyé par la prévisualisation ; si l'ensemble réel a changé depuis la prévisualisation, le jeton ne correspond pas et la requête est refusée (409) pour que l'administrateur vérifie à nouveau. Les journaux d'accès sont conservés.

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/door-access/sync/{facilityId}/bulk-delete

Exemple de requête

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

Réponse

{}

Activité récente de synchronisation User Access (journal de dépannage)

Renvoie les résultats de synchronisation les plus récents d'une installation (créé / ignoré / désactivé) avec leur motif, pour que les administrateurs puissent voir pourquoi un membre a été synchronisé ou non. Du plus récent au plus ancien.

Paramètres

facilityId `string` (obligatoire) limit `integer` (facultatif)

Point de terminaison

GET /api/door-access/sync/{facilityId}/log

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/log \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lister les événements Door/Gate Access d'une installation

Renvoie les événements de déverrouillage mobiles, de forçage administrateur et de l'API Partner externe dans un seul flux antichronologique.

Paramètres

facilityId `string` (obligatoire) from `integer` (facultatif) to `integer` (facultatif) limit `integer` (facultatif)

Point de terminaison

GET /api/door-access/events/{facilityId}

Exemple de requête

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

Réponse

{}

Simuler une évaluation de géorepérage pour l'épingle du mode test administrateur

Corps de la requête

Point de terminaison

POST /api/door-access/geofence/test

Exemple de requête

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

Réponse

{}

Obtenir l'état d'intégration et d'activation d'une installation

Alimente la page d'accueil « Get Started » de l'applet et la bannière de progression de la configuration. Renvoie le nombre actuel de portes et d'utilisateurs, les deux étapes principales dérivées (un utilisateur existe, une porte existe), les indicateurs facultatifs « reviewed » enregistrés, et si l'installation est activée (les deux étapes principales effectuées). La première fois qu'une installation est activée, l'horodatage activatedAt est enregistré.

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/door-access/onboarding/{facilityId}

Exemple de requête

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

Réponse

{}

Mettre à jour les indicateurs facultatifs d'intégration « reviewed » d'une installation

Enregistre les indicateurs facultatifs de la liste de configuration cochés par un administrateur (règles d'accès, paramètres de synchronisation, géorepérage). Les étapes principales et l'activation sont dérivées en direct du nombre de données et ne peuvent pas être définies ici. Renvoie l'état d'intégration complet actualisé.

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

PUT /api/door-access/onboarding/{facilityId}

Exemple de requête

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

Réponse

{}

Renvoie une réponse JSON contenant les données d'analyse de l'installation.

Paramètres

clubId `string` (facultatif) L'ID de l'installation dont récupérer les données d'analyse. fromDate `string` (facultatif) La date de début des données d'analyse à récupérer. toDate `string` (facultatif) La date de fin des données d'analyse à récupérer.

Point de terminaison

GET /clubs/{clubId}/lead-events

Exemple de requête

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

Réponse

{}

Renvoie une réponse JSON contenant les données d'analyse de l'installation.

Paramètres

clubId `string` (facultatif) L'ID de l'installation dont récupérer les données d'analyse. fromDate `string` (facultatif) La date de début des données d'analyse à récupérer. toDate `string` (facultatif) La date de fin des données d'analyse à récupérer.

Point de terminaison

GET /clubs/{clubId}/analytics/page-views

Exemple de requête

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

Réponse

{}

Renvoie une réponse JSON contenant les données d'analyse de l'installation.

Paramètres

clubId `string` (facultatif) L'ID de l'installation dont récupérer les données d'analyse. fromDate `string` (facultatif) La date de début des données d'analyse à récupérer. toDate `string` (facultatif) La date de fin des données d'analyse à récupérer.

Point de terminaison

GET /clubs/{clubId}/analytics/referrers

Exemple de requête

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

Réponse

{}

Renvoie une réponse JSON contenant les données d'analyse de l'installation.

Paramètres

clubId `string` (facultatif) L'ID de l'installation dont récupérer les données d'analyse. fromDate `string` (facultatif) La date de début des données d'analyse à récupérer. toDate `string` (facultatif) La date de fin des données d'analyse à récupérer.

Point de terminaison

GET /clubs/{clubId}/analytics/socials

Exemple de requête

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

Réponse

{}

Renvoie une réponse JSON contenant les données d'analyse de l'installation.

Paramètres

clubId `string` (facultatif) L'ID de l'installation dont récupérer les données d'analyse. fromDate `string` (facultatif) La date de début des données d'analyse à récupérer. toDate `string` (facultatif) La date de fin des données d'analyse à récupérer.

Point de terminaison

GET /clubs/{clubId}/analytics/top-cities

Exemple de requête

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

Réponse

{}

Renvoie une réponse JSON contenant les données d'analyse de l'installation.

Paramètres

clubId `string` (facultatif) L'ID de l'installation dont récupérer les données d'analyse. fromDate `string` (facultatif) La date de début des données d'analyse à récupérer. toDate `string` (facultatif) La date de fin des données d'analyse à récupérer.

Point de terminaison

GET /clubs/{clubId}/analytics/total-page-views

Exemple de requête

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

Réponse

{}

Renvoie une réponse JSON contenant les données d'analyse de l'installation.

Paramètres

clubId `string` (facultatif) L'ID de l'installation dont récupérer les données d'analyse. fromDate `string` (facultatif) La date de début des données d'analyse à récupérer. toDate `string` (facultatif) La date de fin des données d'analyse à récupérer.

Point de terminaison

GET /clubs/{clubId}/analytics/traffic

Exemple de requête

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

Réponse

{}

Génère un JWT (JSON Web Token) front-end temporaire pour les graphiques intégrables Google Analytics de la page front-end 'analytics'.

Point de terminaison

GET /api/ga/onetimetoken

Exemple de requête

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

Réponse

{}

Renvoie les widgets de tableau de bord de 'The Training Camp' si l'installation compte des membres actifs.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/reporting/apps/widgets/{club}

Exemple de requête

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

Réponse

{}

Renvoie tous les jours fériés de l'installation non encore vérifiés.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/reporting/club/{club}/unreviewed-holidays

Exemple de requête

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

Réponse

{}

Marquer comme vérifiés tous les jours fériés de l'installation non encore vérifiés.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

PUT /api/reporting/club/{club}/review-holidays

Exemple de requête

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

Réponse

{}

Renvoie le rapport KPI au format CSV, ventilé mois par mois sur les 12 derniers mois. *NOTE* Cela crée un seul rapport pour TOUTES les installations du système. Ne l'exécutez pas plusieurs fois en parallèle, sous peine de surcharger GymMaster !

Paramètres

months `string` (facultatif) Nombre de mois (à partir de la date actuelle) à récupérer (12 par défaut)

Point de terminaison

GET /api/reporting/gymmaster/all-clubs-kpi-report

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/reporting/gymmaster/all-clubs-kpi-report \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie le ou les graphiques de chiffre d'affaires du MMS pour une installation donnée.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. range `string` (facultatif) Plage en jours (en remontant à partir de la date actuelle) à récupérer

Point de terminaison

GET /api/reporting/gymmaster/revenuegraph/{club}

Exemple de requête

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

Réponse

{}

Renvoie les données et analyses MMS (Member Management System) du tableau de bord pour une installation donnée. Les données incluent les statistiques GymMaster/Perfect Gym ainsi que d'autres indicateurs internes collectés par notre système.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. range `string` (facultatif) Plage en jours (en remontant à partir de la date actuelle) à récupérer

Point de terminaison

GET /api/reporting/gymmaster/widgets/{club}

Exemple de requête

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

Réponse

{}

Renvoie les données du widget Myzone du tableau de bord pour une installation donnée.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/reporting/myzone/widgets/{club}

Exemple de requête

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

Réponse

{}

Renvoie un objet des services considérés comme hors ligne par un ou plusieurs de nos points de terminaison de page d'état ou de surveillance, configurés via l'outil interne 'Uptime Kuma'.

Point de terminaison

GET /api/reporting/statuspage/events

Exemple de requête

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

Réponse

{}

Renvoie les réservations d'entraînement à venir pour les 7 prochains jours.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/reporting/clubs/{club}/workout-bookings

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/reporting/clubs/{club}/workout-bookings \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste historique des jours fériés d'une installation.

Paramètres

clubId `string` (facultatif) ID du club fromDate `string` (facultatif) Horodatage Unix de la date de début de la plage de jours fériés à renvoyer. toDate `string` (facultatif) Horodatage Unix de la date de fin de la plage de jours fériés à renvoyer.

Point de terminaison

GET /api/clubs/{clubId}/historical-holidays

Exemple de requête

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

Réponse

{}

Renvoie les automatisations d'appareils associées à l'installation.

Paramètres

club `string` (obligatoire) ID interne du club dont vous souhaitez répertorier les appareils.

Point de terminaison

GET /api/ics/automations/list/{club}

Exemple de requête

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

Réponse

{}

Met à jour la configuration d'un écran ou appareil existant.

Paramètres

club `string` (obligatoire) ID interne de l'installation dont vous souhaitez mettre à jour l'appareil. body `string` (obligatoire) Objet JSON des paramètres de mise à jour.

Point de terminaison

POST /api/ics/automations/update/{club}

Exemple de requête

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

Réponse

{}

Ajoute ou associe un écran ou ordinateur physique à votre installation.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez ajouter l'appareil. body `string` (obligatoire) Objet JSON du nouvel écran à associer.

Point de terminaison

POST /api/ics/devices/add/{club}

Exemple de requête

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

Réponse

{}

Demande à l'appareil de se connecter à un nouveau SSID selon les paramètres.

Paramètres

club `string` (obligatoire) ID interne de l'installation dont vous souhaitez mettre à jour l'appareil. body `string` (obligatoire) Objet JSON des paramètres de mise à jour.

Point de terminaison

POST /api/ics/devices/changewifi/{club}

Exemple de requête

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

Réponse

{}

Met à jour la configuration d'un écran ou appareil existant.

Paramètres

club `string` (obligatoire) ID interne de l'installation dont vous souhaitez mettre à jour l'appareil. body `string` (obligatoire) Objet JSON des paramètres de mise à jour.

Point de terminaison

POST /api/ics/devices/command/{club}

Exemple de requête

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

Réponse

{}

Charge une URL ou page web sur l'écran d'un appareil donné.

Paramètres

club `string` (obligatoire) ID interne de l'installation dont vous souhaitez mettre à jour l'appareil. body `string` (obligatoire) Objet JSON des paramètres de mise à jour.

Point de terminaison

POST /api/ics/devices/loadurl/{club}

Exemple de requête

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

Réponse

{}

Met à jour la configuration d'un écran ou appareil existant.

Paramètres

club `string` (obligatoire) ID interne de l'installation dont vous souhaitez mettre à jour l'appareil. body `string` (obligatoire) Objet JSON des paramètres de mise à jour.

Point de terminaison

PUT /api/ics/devices/update/{club}

Exemple de requête

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

Réponse

{}

Renomme un écran ou appareil. Enregistrement uniquement : contrairement au point de terminaison de mise à jour, rien n'est transmis à l'appareil ; il est donc aussi disponible pour les écrans exécutant une version logicielle en fin de vie.

Paramètres

club `string` (obligatoire) ID interne de l'installation à laquelle appartient l'appareil. body `string` (obligatoire) Objet JSON des paramètres de renommage.

Point de terminaison

PUT /api/ics/devices/rename/{club}

Exemple de requête

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

Réponse

{}

Obtient les widgets et les liens vers les médias hors ligne d'une installation, selon la date fournie.

Paramètres

club `string` (obligatoire) ID interne de l'installation dont vous souhaitez changer le programme d'entraînement. date `string` (obligatoire) Date pour laquelle renvoyer les URL des widgets. Utilisez le format `YYYY-MM-DD`.

Point de terminaison

GET /api/ics/external-resources/{club}

Exemple de requête

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

Réponse

{}

Obtient les widgets et les liens vers les médias hors ligne d'une installation, selon la date fournie.

Paramètres

club `string` (obligatoire) ID interne de l'installation dont vous souhaitez changer le programme d'entraînement.

Point de terminaison

GET /api/ics/list-scheduled-workouts/{club}

Exemple de requête

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

Réponse

{}

Change le programme d'entraînement d'une installation donnée.

Paramètres

club `string` (obligatoire) ID interne de l'installation dont vous souhaitez changer le programme d'entraînement. body `string` (obligatoire) Objet JSON du nouvel entraînement à appliquer.

Point de terminaison

POST /api/ics/loadprogram/{club}

Exemple de requête

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

Réponse

{}

Récupère la configuration du programme d'un écran ou appareil existant.

Paramètres

club `string` (obligatoire) ID interne de l'installation dont vous souhaitez récupérer les données de programme.

Point de terminaison

GET /api/ics/programs/{club}

Exemple de requête

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

Réponse

{}

Met à jour la configuration du programme d'un écran ou appareil existant.

Paramètres

club `string` (obligatoire) ID interne de l'installation dont vous souhaitez mettre à jour l'appareil. body `string` (obligatoire) Objet JSON des paramètres de mise à jour.

Point de terminaison

PUT /api/ics/programs/{club}

Exemple de requête

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

Réponse

{}

Récupère les options de configuration du programme.

Point de terminaison

GET /api/ics/programs/options/{facilityID}

Exemple de requête

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

Réponse

{}

Chat avec contexte RAG. N'a pas accès aux outils : uniquement un outil simple de requête/réponse API qui permet d'extraire directement des connaissances de la base de connaissances.

Paramètres

organisationId `string` (facultatif) L'ID de l'organisation (détecté automatiquement s'il n'est pas fourni)

Corps de la requête

Point de terminaison

POST /api/llm/chat

Exemple de requête

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

Réponse

{}

Supprimer les embeddings d'un article du magasin vectoriel et mettre à jour l'état de suivi des embeddings

Corps de la requête

Point de terminaison

DELETE /api/llm/delete-article

Exemple de requête

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

Réponse

{}

Lister les enregistrements du suivi des embeddings par organisation et par statut

Paramètres

organisationId `string` (facultatif) ID de l'organisation (résolu automatiquement s'il est omis) status `string` (obligatoire) Statut à filtrer (l'une des valeurs in_queue, done, anomaly, fail, deleted) Limit `string` (facultatif) Nombre maximal d'éléments par page LastEvaluatedKey `string` (facultatif) JSON du LastEvaluatedKey DynamoDB pour la pagination

Point de terminaison

GET /api/llm/embedding-track/by-org-and-status

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/llm/embedding-track/by-org-and-status \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lister les enregistrements du suivi des embeddings par organisation (filtre facultatif par type de ressource)

Paramètres

organisationId `string` (facultatif) ID de l'organisation (résolu automatiquement s'il est omis) resourceType `string` (facultatif) Type de ressource facultatif (par exemple "article"). S'il est fourni, filtre les enregistrements dont resourceTypeId commence par "{type}#". Limit `string` (facultatif) Nombre maximal d'éléments par page LastEvaluatedKey `string` (facultatif) JSON du LastEvaluatedKey DynamoDB pour la pagination

Point de terminaison

GET /api/llm/embedding-track/by-org

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/llm/embedding-track/by-org \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Initialiser la collection de base de données vectorielle de l'organisation

Paramètres

organisationId `string` (facultatif) L'ID de l'organisation (détecté automatiquement s'il n'est pas fourni)

Point de terminaison

POST /api/llm/init-org

Exemple de requête

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

Réponse

{}

Recherche sémantique dans la base de connaissances

Paramètres

organisationId `string` (facultatif) L'ID de l'organisation (détecté automatiquement s'il n'est pas fourni)

Corps de la requête

Point de terminaison

POST /api/llm/semantic-search

Exemple de requête

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

Réponse

{}

Lancer le traitement en flux des articles en file d'attente pour l'embedding, avec suivi de la progression en temps réel

Paramètres

organisationId `string` (facultatif) L'ID de l'organisation (détecté automatiquement s'il n'est pas fourni)

Point de terminaison

POST /api/llm/start-embedding-stream

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/llm/start-embedding-stream \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Insérer ou mettre à jour les embeddings d'un article dans la base de données vectorielle

Gère l'embedding d'un article selon son état actuel : - Si l'article n'est pas publié OU est privé : supprime les embeddings - Si l'article est publié ET public : recalcule les embeddings avec le contenu complet Exige toujours le corps complet de l'article.

Paramètres

organisationId `string` (facultatif) L'ID de l'organisation (détecté automatiquement s'il n'est pas fourni)

Corps de la requête

Point de terminaison

POST /api/llm/upsert-embeddings

Exemple de requête

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

Réponse

{}

Point de terminaison de test pour supprimer par lot les embeddings d'articles par organisation et statut facultatif

Paramètres

organisationId `string` (facultatif) ID de l'organisation (résolu automatiquement à partir du contexte utilisateur s'il est omis) status `string` (facultatif) Statut à filtrer (facultatif ; s'il est omis, supprime TOUS les articles de l'organisation quel que soit leur statut) hardDelete `string` (facultatif) Indique s'il faut supprimer définitivement les enregistrements de suivi des embeddings (true) ou les supprimer de manière logique en mettant à jour le statut (false)

Point de terminaison

DELETE /api/llm/test/batch-delete-by-status

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/llm/test/batch-delete-by-status \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Transformer et découper du texte avec des statistiques détaillées

Point de terminaison de test qui transforme du texte et le découpe en segments, puis fournit des statistiques détaillées sur la répartition des segments (nombre de caractères, pourcentages et indicateurs de qualité) pour aider à évaluer l'efficacité du découpage.

Corps de la requête

Point de terminaison

POST /api/llm/test/transform-chunk

Exemple de requête

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

Réponse

{}

Obtenir le nombre total de vecteurs dans l'index vectoriel de l'organisation

Point de terminaison de test pour compter tous les vecteurs de l'index vectoriel de l'organisation de l'utilisateur actuel

Paramètres

organisationId `string` (facultatif) L'ID de l'organisation (détecté automatiquement s'il n'est pas fourni)

Point de terminaison

GET /api/llm/test/vector-count

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-count \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Supprimer de l'index vectoriel tous les vecteurs d'un articleId donné

Point de terminaison de test pour supprimer de l'index vectoriel de l'organisation de l'utilisateur actuel tous les vecteurs associés à un articleId donné.

Paramètres

organisationId `string` (facultatif) L'ID de l'organisation (détecté automatiquement s'il n'est pas fourni) articleId `string` (obligatoire) L'articleId dont supprimer les vecteurs dryRun `string` (facultatif) Si true, affiche uniquement ce qui serait supprimé, sans rien supprimer

Point de terminaison

DELETE /api/llm/test/vector-delete-article

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/llm/test/vector-delete-article \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Tester le SDK Vector en listant tous les index

Point de terminaison de test pour vérifier la connectivité du SDK Vector et lister tous les index du bucket vectoriel

Point de terminaison

GET /api/llm/test/vector-indices

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-indices \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Initialiser l'index vectoriel d'une organisation

Crée le bucket et l'index vectoriels de l'organisation de l'utilisateur actuel

Paramètres

organisationId `string` (facultatif) L'ID de l'organisation (détecté automatiquement s'il n'est pas fourni)

Point de terminaison

POST /api/llm/test/vector-init-index

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/llm/test/vector-init-index \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Obtenir toutes les métadonnées vectorielles d'un articleId donné

Point de terminaison de test pour récupérer dans l'index vectoriel tous les segments vectoriels et leurs métadonnées pour un articleId donné. Utile pour examiner comment un article est découpé et stocké. Le filtrage est géré par le service de magasin vectoriel.

Paramètres

organisationId `string` (facultatif) L'ID de l'organisation (détecté automatiquement s'il n'est pas fourni) articleId `string` (obligatoire) L'ID de l'article dont récupérer les métadonnées vectorielles

Point de terminaison

GET /api/llm/test/vector-metadata-by-article

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-metadata-by-article \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Obtenir les vecteurs récents et leurs métadonnées depuis l'index vectoriel

Point de terminaison de test pour récupérer les 10 vecteurs les plus récents avec leurs métadonnées (mais sans les données vectorielles) depuis l'index vectoriel de l'organisation de l'utilisateur actuel. Utile pour examiner la structure des métadonnées.

Paramètres

organisationId `string` (facultatif) L'ID de l'organisation (détecté automatiquement s'il n'est pas fourni) limit `string` (facultatif) Nombre de vecteurs récents à renvoyer (100 maximum)

Point de terminaison

GET /api/llm/test/vector-recent

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-recent \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Téléverse une ressource pour le Marketing Manager/Designer vers le stockage S3.

Paramètres

file `string` (facultatif) Nom du fichier à envoyer.

Point de terminaison

POST /api/marketing/design/static/download

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/marketing/design/static/download \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la ressource au format JSON, à charger dans le gestionnaire de ressources.

Paramètres

id `string` (obligatoire) ID de la ressource à obtenir. organisationId `string` (obligatoire) L'ID de l'organisation de l'installation à laquelle appartient la ressource.

Point de terminaison

GET /api/marketing/assets/get/{id}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets/get/{id} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie toutes les ressources de conception.

Paramètres

body `string` (obligatoire) Objet JSON des données de l'installation à enregistrer. organisationId `string` (obligatoire) L'ID de l'organisation de l'installation à laquelle appartient la ressource. useCache `string` (facultatif) search `string` (facultatif) La requête de recherche pour filtrer les ressources par nom ou étiquette. brand `string` (facultatif) La marque selon laquelle filtrer les ressources. tag `string` (facultatif) L'étiquette selon laquelle filtrer les ressources.

Point de terminaison

GET /api/marketing/assets/get

Exemple de requête

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

Réponse

{}

Renvoie une page de ressources marketing imprimables d'une organisation. Utilise Algolia pour la recherche par pertinence et la pagination par page (avec totaux), et se rabat sur DynamoDB lorsqu'Algolia est indisponible.

Paramètres

organisationId `string` (obligatoire) L'ID de l'organisation de l'installation à laquelle appartiennent les ressources. search `string` (facultatif) La requête de recherche pour filtrer les ressources par nom ou étiquette. brand `string` (facultatif) La marque selon laquelle filtrer les ressources. tag `string` (facultatif) L'étiquette selon laquelle filtrer les ressources. page `string` (facultatif) Numéro de la page à récupérer (indexé à partir de zéro). limit `string` (facultatif) Nombre de ressources par page (300 maximum). useCache `string` (facultatif) Si false, contourne Algolia et interroge directement DynamoDB.

Point de terminaison

GET /api/marketing/assets

Exemple de requête

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

Réponse

{}

Renvoie la liste des ressources disponibles téléversées via le gestionnaire de ressources.

Paramètres

organisationId `string` (obligatoire)

Point de terminaison

GET /api/marketing/assets/list

Exemple de requête

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

Réponse

{}

Ajoute ou enregistre une ressource.

Paramètres

body `string` (obligatoire) Objet JSON des données de l'installation à enregistrer. organisationId `string` (obligatoire) L'ID de l'organisation de l'installation à laquelle appartient la ressource.

Point de terminaison

PUT /api/marketing/assets/save

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/assets/save \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Téléverse une ressource pour le Marketing Manager/Designer vers le stockage S3.

Paramètres

file `string` (facultatif) Nom du fichier à envoyer. organisationId `string` (facultatif) L'ID de l'organisation à laquelle appartient la ressource.

Point de terminaison

POST /api/marketing/assets/upload

Exemple de requête

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

Réponse

{}

Renvoie la liste de toutes les pages personnalisées d'une organisation.

Paramètres

organisationId `string` (obligatoire) ID interne de l'organisation dont renvoyer les pages personnalisées.

Point de terminaison

GET /api/marketing/custom-pages

Exemple de requête

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

Réponse

{}

Crée ou met à jour une page personnalisée pour une organisation.

Paramètres

organisationId `string` (obligatoire) ID interne de l'organisation dont renvoyer les pages personnalisées. body `object` (obligatoire) Données de la page personnalisée à créer ou mettre à jour.

Point de terminaison

PUT /api/marketing/custom-pages

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/custom-pages \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste de toutes les pages personnalisées d'une installation.

Paramètres

facilityId `string` (obligatoire) ID interne de l'installation dont renvoyer les pages personnalisées.

Point de terminaison

GET /api/facilities/{facilityId}/marketing/custom-pages

Exemple de requête

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

Réponse

{}

Renvoie toutes les créations exportées ou rendues pour un ID d'installation donné.

Paramètres

club `string` (obligatoire) ID interne de l'installation qui effectue la requête. sort `string` (facultatif) Critère de tri des créations : 'oldest', 'newest' ou 'design'.

Point de terminaison

GET /api/marketing/designs/{club}/exports

Exemple de requête

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

Réponse

{}

Renvoie le contenu HTML d'une création au format JSON, à charger dans l'éditeur.

Paramètres

id `string` (obligatoire) ID de la création à obtenir.

Point de terminaison

GET /api/marketing/designs/get/{id}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/get/{id} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste des correspondances de saisie des créations marketing et imprimées et des modèles de création

Paramètres

clubId `string` (obligatoire) ID interne de l'installation qui effectue la requête. availableFeatures `string` (facultatif) Renvoyer tous les éléments ayant des fonctionnalités données brand `string` (facultatif) Filtre les créations par marque features `string` (facultatif) Filtrer les résultats selon les fonctionnalités

Point de terminaison

GET /api/marketing/designs/input-mapping/{clubId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/input-mapping/{clubId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste des créations disponibles pour une installation donnée, utilisables dans les créations (Print Designs) réalisées dans l'éditeur marketing/impression du hub.

Paramètres

club `string` (obligatoire) ID interne de l'installation qui effectue la requête. designAdmin `string` (facultatif) Renvoyer toutes les données de création (vue administrateur ; l'utilisateur doit être administrateur). brand `string` (facultatif) Filtre les créations par marque

Point de terminaison

GET /api/marketing/designs/{club}/list

Exemple de requête

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

Réponse

{}

Force le système à générer ou régénérer toutes les miniatures et prévisualisations des créations (utilisé principalement si des ressources « en amont » changent dans S3, etc.). **NOTE** Vous ne pouvez appeler cette fonction qu'une fois toutes les X minutes (et pas du tout si un rendu est déjà en cours). Cela évite de surcharger nos serveurs avec le rendu de toutes les créations.

Point de terminaison

GET /api/marketing/designs/render-all-thumbnails

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/render-all-thumbnails \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lance le rendu d'une création dynamique

Paramètres

body `string` (obligatoire) Objet JSON des données de l'installation à envoyer au processeur de rendu des créations.

Point de terminaison

POST /api/marketing/designs/dynamic/render-design

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/marketing/designs/dynamic/render-design \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Ajoute, enregistre ou met à jour une création.

Paramètres

body `string` (obligatoire) Objet JSON des données de l'installation à enregistrer.

Point de terminaison

PUT /api/marketing/designs/{club}/save

Exemple de requête

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

Réponse

{}

Renvoie la création statique au format JSON, à charger

Paramètres

id `string` (obligatoire) ID de la création statique à obtenir.

Point de terminaison

GET /api/marketing/designs/static/get/{id}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/static/get/{id} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Ajoute, enregistre ou met à jour un modèle de création statique.

Paramètres

body `string` (obligatoire) Objet JSON des données de l'installation à enregistrer.

Point de terminaison

PUT /api/marketing/designs/static/{club}/save

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/designs/static/{club}/save \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Supprime du système une variable définie par l'utilisateur.

Paramètres

club `string` (obligatoire) ID interne de l'installation qui effectue la requête. body `string` (obligatoire) JSON contenant l'ID de la variable à supprimer.

Point de terminaison

DELETE /api/marketing/variables/{club}/delete

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/marketing/variables/{club}/delete \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste des variables disponibles pour une installation donnée, utilisables dans les créations (Print Designs) réalisées dans l'éditeur marketing/impression du hub.

Paramètres

club `string` (obligatoire) ID interne de l'installation qui effectue la requête.

Point de terminaison

GET /api/marketing/variables/{club}/list

Exemple de requête

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

Réponse

{}

Crée une nouvelle « variable » utilisateur pour l'installation donnée.

Paramètres

club `string` (obligatoire) ID interne de l'installation qui effectue la requête. body `string` (obligatoire) Objet JSON de la nouvelle variable.

Point de terminaison

POST /api/marketing/variables/{club}/new

Exemple de requête

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

Réponse

{}

Ajoute, enregistre ou met à jour une ou plusieurs variables de création dans le système via un tableau d'objets.

Paramètres

club `string` (obligatoire) ID interne de l'installation qui effectue la requête. body `string` (obligatoire) Tableau d'un ou plusieurs objets JSON à ajouter ou mettre à jour (permet d'enregistrer plusieurs éléments ou objets en une seule requête API).

Point de terminaison

PUT /api/marketing/variables/{club}/save

Exemple de requête

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

Réponse

{}

Renvoie le manifeste de documentation MCP de l'utilisateur connecté

Alimente la page `/mcp-docs` de l'application. Renvoie l'URL du serveur MCP, les en-têtes d'authentification pris en charge, l'identité et l'indicateur administrateur de l'appelant, ainsi que la liste filtrée des outils (filtrée exactement comme `/mcp/tools/list`, afin que la page de documentation n'affiche jamais un outil que l'appelant ne peut pas réellement utiliser).

Point de terminaison

GET /api/mcp/docs-manifest

Exemple de requête

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

Réponse

{}

Créer un contrat utilisateur.

Paramètres

body `object` (obligatoire) Objet JSON des données de l'installation à enregistrer.

Point de terminaison

POST /api/member-agreements/contracts-tna/:club

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste des contrats.

Point de terminaison

GET /api/member-agreements/contracts-tna/:club

Exemple de requête

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

Réponse

{}

Supprimer un contrat utilisateur.

Point de terminaison

DELETE /api/member-agreements/contracts-tna/:club/:id

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie le détail d'un contrat.

Point de terminaison

GET /api/member-agreements/contracts-tna/:club/:id

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Mettre à jour un contrat utilisateur.

Paramètres

body `object` (obligatoire) Objet JSON des données de l'installation à enregistrer.

Point de terminaison

PATCH /api/member-agreements/contracts-tna/:club/:id

Exemple de requête

curl -X PATCH https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Obtenir les contrats par défaut de l'installation.

Paramètres

body `object` (obligatoire) Objet JSON des données de l'installation à enregistrer.

Point de terminaison

GET /api/member-agreements/default-tna/:club

Exemple de requête

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

Réponse

{}

Définir le contrat par défaut de l'installation.

Paramètres

body `object` (obligatoire) Objet JSON des données de l'installation à enregistrer.

Point de terminaison

POST /api/member-agreements/default-tna/:club

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/member-agreements/default-tna/:club \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste des contrats globaux ou régionaux.

Point de terminaison

GET /api/member-agreements/global-tna/:club

Exemple de requête

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

Réponse

{}

Renvoie la liste des membres ayant un accord.

Point de terminaison

GET /api/member-agreements/:club

Exemple de requête

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

Réponse

{}

Renvoie la liste des membres de l'installation par saison pour l'application du camp d'entraînement.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. season `string` (facultatif) Saison du camp d'entraînement selon laquelle filtrer. userIds `string` (facultatif) Tableau d'ID utilisateur à filtrer. useCache `string` (facultatif) Indique s'il faut utiliser le cache. isUserMemberInfo `string` (facultatif) Si activé, filtre les données selon userIds (il est recommandé de n'utiliser qu'un seul ID utilisateur) et inclut les données nécessaires, comme le classement et les préférences de l'utilisateur.

Point de terminaison

GET /api/members-leads/trainingcamp/club/season-members/{club}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/members-leads/trainingcamp/club/season-members/{club} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Supprime plusieurs prospects de réservation d'entraînement.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. body `string` (obligatoire)

Point de terminaison

DELETE /api/members-leads/workout-booking/club/leads/{club}

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste des prospects de réservation d'entraînement d'une installation.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. all `string` (facultatif) Afficher tous les prospects ou seulement les prochains.

Point de terminaison

GET /api/members-leads/workout-booking/club/leads/{club}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Met à jour un prospect de réservation d'entraînement.

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder. body `string` (obligatoire)

Point de terminaison

PUT /api/members-leads/workout-booking/club/leads/{club}

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Active ou désactive le signalement d'un prospect de réservation d'entraînement.

Paramètres

club `string` (obligatoire) ID interne du club. body `string` (obligatoire)

Point de terminaison

PATCH /api/members-leads/workout-booking/club/leads/{club}/flag

Exemple de requête

curl -X PATCH https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club}/flag \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Obtenir les modules effectifs d'une installation

Renvoie tous les modules disponibles pour une installation en résolvant la hiérarchie : préférences de l'installation → modules de la marque → modules de l'organisation. Les résultats sont mis en cache dans Redis pour de meilleures performances.

Paramètres

facilityId `string` (obligatoire) L'ID de l'installation dont résoudre les modules

Point de terminaison

GET /api/facilities/{facilityId}/modules

Exemple de requête

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

Réponse

[]

Renvoie le catalogue des modules ainsi que la configuration d'affichage du menu latéral. La liste complète des modules est renvoyée pour que le moteur de rendu front-end décide de la visibilité par utilisateur ; le contrôle d'accès reste appliqué côté serveur via `auth.checkModuleAccess()`.

Point de terminaison

GET /api/modules

Exemple de requête

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

Réponse

{}

obtenir les catégories de notifications.

Point de terminaison

GET /api/notification/categories

Exemple de requête

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

Réponse

{}

Supprimer une notification consommée.

Point de terminaison

DELETE /api/club/notification/consumed/:club

Exemple de requête

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

Réponse

{}

crée un message de notification.

Point de terminaison

POST /api/club/notification/consumed/:club

Exemple de requête

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

Réponse

{}

Renvoie un tableau des notifications consommées.

Point de terminaison

GET /api/club/notification/consumed/:club

Exemple de requête

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

Réponse

{}

Supprimer un message de notification.

Point de terminaison

DELETE /api/club/notification/messages/:club

Exemple de requête

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

Réponse

{}

Renvoie un tableau des messages de notification.

Point de terminaison

GET /api/club/notification/messages/:club

Exemple de requête

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

Réponse

{}

met à jour un message de notification.

Point de terminaison

PATCH /api/club/notification/messages/:club

Exemple de requête

curl -X PATCH https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

crée un message de notification.

Paramètres

body `string` (obligatoire)

Point de terminaison

POST /api/club/notification/messages/:club

Exemple de requête

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

Réponse

{}

obtenir les destinataires d'une notification par installation.

Point de terminaison

POST /api/club/notification/viewers/:club

Exemple de requête

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

Réponse

{}

obtenir les catégories de notifications par utilisateur.

Point de terminaison

GET /api/club/notification/user-categories/:club

Exemple de requête

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

Réponse

{}

crée un message de notification.

Point de terminaison

POST /api/notification/webhook

Exemple de requête

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

Réponse

{}

Obtenir la clé publique VAPID pour les notifications push HTML5

Renvoie la clé publique VAPID utilisée pour créer les abonnements push du navigateur.

Point de terminaison

GET /html5-push/vapid-public-key

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/html5-push/vapid-public-key \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Enregistrer ou mettre à jour un abonnement push HTML5

Enregistre un abonnement push du navigateur pour l'utilisateur actuel.

Corps de la requête

Point de terminaison

POST /html5-push/subscribe

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/html5-push/subscribe \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Réponse

{}

Supprimer un abonnement push HTML5

Supprime un abonnement push du navigateur pour l'utilisateur actuel.

Corps de la requête

Point de terminaison

POST /html5-push/unsubscribe

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/html5-push/unsubscribe \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Réponse

{}

Obtenir l'état d'intégration du site pour l'utilisateur appelant

Renvoie les deux volets de l'intégration d'une installation (la configuration : coordonnées et sélection de produits, enregistrée dans les préférences de l'installation ; et le paiement : dérivé en direct de l'enregistrement payment-settings de la facturation SaaS), ainsi qu'un indicateur `required` personnalisé pour l'appelant, sur lequel se base l'interface de l'application. Sites à pile technologique uniquement ; les sites à pile métier renvoient toujours required=false.

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/onboarding/{facilityId}

Exemple de requête

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

Réponse

{}

Enregistrer la progression en cours de l'assistant d'intégration d'une installation

Enregistre l'état partiel de l'assistant (sélection de produits, texte libre « Other », coordonnées de l'entreprise vérifiées, étape actuelle) afin qu'une actualisation ou un abandon reprenne là où l'utilisateur s'était arrêté. N'enregistre jamais la fin : voir le point de terminaison complete.

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

PUT /api/onboarding/{facilityId}

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/onboarding/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Réponse

{}

Générer des suggestions de préremplissage par IA pour l'assistant d'intégration

Utilise le contexte existant de l'installation, de la marque et de l'organisation pour proposer les coordonnées de l'installation (texte de présentation, champs de contact nettoyés), une sélection de produits suggérée et de courts conseils personnalisés. Les résultats sont mis en cache dans Redis pendant 7 jours. Les suggestions sont purement indicatives : le client les affiche dans un formulaire de vérification modifiable. Répond toujours 200 ; `suggestions` vaut null lorsque l'IA est indisponible, afin que l'assistant continue de fonctionner en mode dégradé.

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

POST /api/onboarding/{facilityId}/ai-prefill

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/onboarding/{facilityId}/ai-prefill \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Terminer le volet configuration de l'intégration du site

Valide les sélections et coordonnées confirmées, enregistre les coordonnées de l'entreprise dans la fiche de l'installation, initialise la disposition du menu technique de l'installation à partir de la sélection de produits (sauf si une disposition personnalisée existe déjà) et enregistre la fin de la configuration. Le volet paiement ne peut volontairement PAS être terminé ici : il est dérivé en direct de l'enregistrement payment-settings de la facturation SaaS, de sorte que l'obligation d'enregistrer une carte ne peut pas être contournée en appelant ce point de terminaison. Renvoie l'état actualisé.

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/onboarding/{facilityId}/complete

Exemple de requête

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

Réponse

{}

Déclencher une action d'intégration partenaire déclarée pour une installation

Exécute une action « Run integration » déclarée dans la fiche du partenaire (ph-partners.actions[]), limitée à une installation. Un verrou Redis à exécution unique empêche les exécutions manuelles simultanées pour une même combinaison action + installation.

Paramètres

partnerId `string` (obligatoire) actionId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/partners/{partnerId}/actions/{actionId}/run

Exemple de requête

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

Lire l'état d'exécution d'une action d'intégration partenaire

Indique si une exécution manuelle est en cours (verrou à exécution unique détenu) et renvoie la dernière exécution demandée, pour l'interrogation par le bouton des paramètres.

Paramètres

partnerId `string` (obligatoire) actionId `string` (obligatoire) facilityId `string` (obligatoire)

Point de terminaison

GET /api/partners/{partnerId}/actions/{actionId}/status

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/partners/{partnerId}/actions/{actionId}/status \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Obtenir toutes les configurations partenaires d'une marque

Paramètres

brandId `string` (obligatoire) L'ID de la marque

Point de terminaison

GET /api/partners/brand-config/{brandId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/partners/brand-config/{brandId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

[]

Créer ou mettre à jour une configuration partenaire de marque

Paramètres

body `object` (obligatoire)

Point de terminaison

PUT /api/partners/brand-config

Exemple de requête

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

Réponse

{}

Migrer les données d'intégration GymMaster vers facility-partner-config

Interroge toutes les installations disposant des champs gymMasterAPI et gymMasterDomain et crée ou met à jour les enregistrements facility-partner-config correspondants. Il s'agit d'un point de terminaison de migration ponctuelle.

Paramètres

partnerId `string` (obligatoire) L'ID partenaire GymMaster à utiliser pour tous les enregistrements migrés dryRun `boolean` (facultatif) Si true, indique uniquement ce qui serait migré, sans écrire dans la base de données

Point de terminaison

GET /api/partners/migrate-gymmaster

Exemple de requête

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

Réponse

{}

Activer un partenaire pour une organisation.

Paramètres

partnerId `string` (obligatoire) ID du partenaire

Point de terminaison

POST /api/partners/organisation/enable

Exemple de requête

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

Réponse

{}

Lister les partenaires de l'organisation. Les administrateurs d'organisation ne voient que les partenaires de leur organisation.

Point de terminaison

GET /api/partners/organisation

Exemple de requête

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

Réponse

{}

Retirer un partenaire de l'organisation.

Paramètres

keyId `string` (obligatoire) ID de clé du partenaire de l'organisation organisationId `string` (obligatoire) ID de l'organisation du partenaire

Point de terminaison

DELETE /api/partners/organisation/{keyId}

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/partners/organisation/{keyId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Mettre à jour le mode d'accès et les modules d'un partenaire de l'organisation.

Paramètres

keyId `string` (obligatoire) ID de clé du partenaire de l'organisation organisationId `string` (obligatoire) ID de l'organisation du partenaire partnerId `string` (obligatoire) ID du partenaire accessMode `string` (obligatoire) Mode d'accès du partenaire modules `string` (facultatif) Liste des modules pour le mode d'accès LIMITED

Point de terminaison

PUT /api/partners/organisation/update-access

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/partners/organisation/update-access \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Créer des enregistrements d'arrivée pour une installation

Accepte un tableau d'objets d'enregistrement d'arrivée et les transmet à l'API Partner pour traitement. 25 enregistrements d'arrivée maximum par requête.

Corps de la requête

Point de terminaison

POST /api/partners/check-ins

Exemple de requête

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

Réponse

{}

Supprimer une configuration partenaire d'une installation

Supprime la configuration d'une intégration partenaire dans une installation

Paramètres

facilityId `string` (obligatoire) ID de l'installation (ID club) partnerId `string` (obligatoire) ID du partenaire

Point de terminaison

DELETE /api/partners/facility-config/{facilityId}/{partnerId}

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/partners/facility-config/{facilityId}/{partnerId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lister toutes les configurations partenaires d'une installation

Renvoie toutes les intégrations partenaires configurées pour l'installation donnée

Paramètres

facilityId `string` (obligatoire) ID de l'installation (ID club)

Point de terminaison

GET /api/partners/facility-config/{facilityId}

Exemple de requête

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

Réponse

{}

Créer ou mettre à jour une configuration partenaire pour une installation

Crée ou met à jour la configuration d'une intégration partenaire dans une installation

Corps de la requête

Point de terminaison

POST /api/partners/facility-config

Exemple de requête

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

Réponse

{}

Supprimer un membre par memberId

Supprime une fiche membre existante à l'aide du memberId.

Paramètres

memberId `string` (obligatoire) Identifiant unique du membre

Point de terminaison

DELETE /api/partners/members/{memberId}

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/partners/members/{memberId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Mettre à jour un membre par memberId

Met à jour une fiche membre existante à l'aide du memberId.

Paramètres

memberId `string` (obligatoire) Identifiant unique du membre

Corps de la requête

Point de terminaison

PUT /api/partners/members/{memberId}

Exemple de requête

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

Réponse

{}

Obtenir l'état d'une opération de synchronisation des membres

Renvoie l'état actuel d'une opération asynchrone de création ou de suppression de membre lancée via POST /api/partners/members ou DELETE /api/partners/members/{memberId}. Le front-end interroge ce point de terminaison pour remplacer l'ancien flux d'interrogation de liste et de correspondance par nom. NOTE Le cloisonnement partnerId/facilityId au niveau des lignes est exigé par les règles d'isolation multi-locataire, mais reporté à une PR de renforcement de la phase 3a.1 : les operationIds sont des UUID de 128 bits et la route est déjà conditionnée par l'accès au module `external-integrations`. Toute personne disposant d'un operationId valide et de l'accès au module d'administration peut en consulter l'état.

Paramètres

operationId `string` (obligatoire) UUID renvoyé par POST/DELETE

Point de terminaison

GET /api/partners/members/operations/{operationId}

Exemple de requête

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

Réponse

{}

Créer ou mettre à jour des membres pour une installation

Accepte un tableau d'objets membre et les transmet à l'API Partner pour traitement. 25 membres maximum par requête.

Corps de la requête

Point de terminaison

POST /api/partners/members

Exemple de requête

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

Réponse

{}

Créer ou mettre à jour des formules d'adhésion pour une installation

Accepte un tableau d'objets formule d'adhésion et les transmet à l'API Partner pour traitement. 25 formules d'adhésion maximum par requête.

Corps de la requête

Point de terminaison

POST /api/partners/membership-plans

Exemple de requête

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

Réponse

{}

Crée un nouveau rôle

Paramètres

body `string` (obligatoire) Objet rôle

Point de terminaison

POST /api/roles

Exemple de requête

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

Réponse

{}

Renvoie la liste de tous les rôles

Point de terminaison

GET /api/roles

Exemple de requête

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

Réponse

{}

Supprime un rôle par ID

Point de terminaison

DELETE /api/roles/{roleId}

Exemple de requête

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

Réponse

{}

Met à jour un rôle par ID

Paramètres

body `string` (obligatoire) Objet rôle

Point de terminaison

PUT /api/roles/{roleId}

Exemple de requête

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

Réponse

{}

Créer une nouvelle ligne supplémentaire pour la facture SaaS

Paramètres

organisationId `string` (facultatif) L'ID de l'organisation pour laquelle créer la ligne supplémentaire body `string` (facultatif) Corps de la requête

Point de terminaison

POST /api/saas-billing/additional-line-items

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste des lignes supplémentaires de la facture SaaS

Paramètres

organisationId `string` (obligatoire) L'ID de l'organisation

Point de terminaison

GET /api/saas-billing/additional-line-items

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste des lignes supplémentaires de la facture SaaS de l'installation

Point de terminaison

GET /api/clubs/{clubId}/saas-billing/additional-line-items

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/saas-billing/additional-line-items \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Met à jour une ligne supplémentaire de la facture SaaS

Paramètres

itemId `string` (obligatoire) L'ID de la ligne supplémentaire à mettre à jour body `string` (obligatoire) Le corps de la requête

Point de terminaison

PUT /api/saas-billing/additional-line-items/{itemId}

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items/{itemId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Tarifs horaires combinés des Cloud Agents pour Your Rates

Renvoie les tailles de Cloud Agent proposées avec un tarif horaire combiné unique (hébergement + logiciel). La répartition n'est pas incluse. usedPlans contient les SKU utilisés par cette installation au cours des 30 derniers jours.

Paramètres

clubID `string` (obligatoire)

Point de terminaison

GET /api/clubs/{clubID}/saas-billing/cloud-agent-rates

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/cloud-agent-rates \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Supprimer un rapport mensuel importé

Paramètres

club `string` (facultatif) ID du club reportId `string` (facultatif) ID du rapport

Point de terminaison

DELETE /api/saas-billing/extended-access/monthly-usage-report/{reportId}

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/{reportId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Obtenir le dernier rapport de stockage de vidéosurveillance d'une installation

Renvoie l'instantané quotidien le plus récent du stockage de vidéosurveillance de l'installation à partir des journaux de facturation enregistrés (jusqu'aux 31 derniers jours). Inclut totalStorage, date et les frais liés au stockage.

Paramètres

club `string` (obligatoire) ID du club

Point de terminaison

GET /api/saas-billing/extended-access/latest-cctv-storage-report/{club}

Exemple de requête

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"

Réponse

{}

Renvoie une facture PDF de l'installation pour la période donnée.

Paramètres

club `string` (facultatif) ID du club month `string` (facultatif) mois du rapport sous forme de nombre. 1 = janvier, 2 = février, etc. year `string` (facultatif) année du rapport sous forme de nombre, par exemple 2021

Point de terminaison

GET /api/saas-billing/extended-access/monthly-usage-report/:club/invoice

Exemple de requête

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"

Réponse

{}

Lot de factures PDF de la plateforme pour les mois d'utilisation sélectionnés, sous forme de ZIP. Équivalent groupé du point de terminaison unitaire .../invoice : alimente le téléchargement multiple de l'onglet Invoices & Receipts de l'applet Billing & Cost Management.

Paramètres

club `string` (facultatif) ID du club months `string` (facultatif) Mois d'utilisation ou de rapport séparés par des virgules, au format YYYY-MM (24 maximum)

Point de terminaison

GET /api/saas-billing/extended-access/monthly-usage-report/{club}/invoices.zip

Exemple de requête

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"

Réponse

{}

Renvoie les rapports d'utilisation mensuels de plusieurs mois en un seul appel. Alimente le graphique Cost History et les écarts d'un mois sur l'autre dans l'applet Billing & Cost Management. Les mois sans utilisation renvoient report: null (comme le 404 → 0 $ du point de terminaison mensuel unitaire dans l'interface).

Paramètres

club `string` (facultatif) ID du club months `string` (facultatif) Mois d'utilisation séparés par des virgules, au format YYYY-MM (12 maximum)

Point de terminaison

GET /api/saas-billing/extended-access/monthly-usage-report/{club}/batch

Exemple de requête

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"

Réponse

{}

Importer les rapports mensuels de l'installation.

Paramètres

club `string` (facultatif) ID du club

Point de terminaison

PUT /api/saas-billing/extended-access/usage-report/:club

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie un rapport CSV de l'utilisation de la vidéosurveillance sur les 30 derniers jours pour toutes les installations.

Point de terminaison

GET /api/saas-billing/extended-access/usage-report/:club

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Liste tous les rapports quotidiens du mois pour l'installation.

Paramètres

club `string` (facultatif) ID du club month `string` (facultatif) mois du rapport sous forme de nombre. 1 = janvier, 2 = février, etc. year `string` (facultatif) année du rapport sous forme de nombre, par exemple 2021

Point de terminaison

GET /api/saas-billing/extended-access/monthly-usage-report/{club}/daily-reports

Exemple de requête

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"

Réponse

{}

Renvoie la liste des rapports mensuels importés pour l'administrateur

Paramètres

organisationId `string` (obligatoire) ID de l'organisation

Point de terminaison

GET /api/saas-billing/extended-access/usage-report/imported

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/imported \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie un rapport CSV de l'utilisation de la vidéosurveillance sur les 30 derniers jours pour toutes les installations.

Paramètres

club `string` (facultatif) ID du club month `string` (facultatif) mois du rapport sous forme de nombre. 1 = janvier, 2 = février, etc. year `string` (facultatif) année du rapport sous forme de nombre, par exemple 2021

Point de terminaison

GET /api/saas-billing/extended-access/monthly-usage-report/:club

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie le rapport d'utilisation périodique de l'installation.

Paramètres

club `string` (facultatif) ID du club periodStart `string` (facultatif) Début de la période au format YYYY-MM-DD periodEnd `string` (facultatif) Fin de la période au format YYYY-MM-DD

Point de terminaison

GET /api/saas-billing/extended-access/periodical-usage-report/:club

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/periodical-usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lot de documents de facturation PDF dans un seul ZIP, mélangeant plusieurs types de documents : factures de la plateforme (par mois d'utilisation), reçus de recharge du portefeuille SaaS et reçus de recharge Model Router. Équivalent groupé des points de terminaison invoices.zip / receipts.zip par type, pour l'onglet consolidé Invoices & Receipts. Chaque mois ou ID demandé doit correspondre à un document appartenant à l'installation : une seule valeur incorrecte fait échouer tout le lot.

Paramètres

clubID `string` (obligatoire) invoiceMonths `string` (facultatif) Mois d'utilisation séparés par des virgules, au format YYYY-MM walletIds `string` (facultatif) ID de transactions de recharge du portefeuille SaaS séparés par des virgules aiIds `string` (facultatif) ID de transactions de recharge Model Router séparés par des virgules

Point de terminaison

GET /api/clubs/{clubID}/saas-billing/documents.zip

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/documents.zip \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Ajouter une note à un enregistrement mensuel

Paramètres

recordID `string` (facultatif) L'ID de l'enregistrement à obtenir note `string` (facultatif) La note à ajouter à l'enregistrement

Point de terminaison

POST /api/saas-billing/monthly-records/{recordID}/notes

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{recordID}/notes \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste des enregistrements mensuels de facturation SaaS

Paramètres

club `string` (facultatif) L'ID de l'installation à obtenir month `string` (facultatif) Le mois de facturation au format YYYY-MM

Point de terminaison

GET /api/saas-billing/monthly-records/{club}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{club} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste des enregistrements mensuels de facturation SaaS en échec ou nécessitant 3D Secure

Paramètres

clubID `string` (facultatif) L'ID de l'installation dont obtenir les enregistrements mensuels en échec

Point de terminaison

GET /api/clubs/:clubID/saas-billing/flagged

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/clubs/:clubID/saas-billing/flagged \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie TOUS les enregistrements mensuels de facturation SaaS (le registre des factures) d'une installation, du mois de facturation le plus récent au plus ancien. Équivalent, limité à l'installation, du point de terminaison paginate-monthly-records réservé aux administrateurs : alimente l'onglet client « Invoices & Receipts » de l'applet Billing & Cost Management.

Paramètres

clubID `string` (facultatif) L'ID de l'installation dont lister les enregistrements mensuels

Point de terminaison

GET /api/clubs/{clubID}/saas-billing/monthly-records

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/monthly-records \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste des enregistrements mensuels de facturation SaaS

Paramètres

organisationId `string` (facultatif) ID de l'organisation month `string` (facultatif) Mois au format MM. year `string` (facultatif) Année au format YYYY. filters `string` (facultatif) Filtres de chaîne de requête créés par le tableau de données. order `string` (facultatif) Chaîne de requête créée par le tableau de données.

Point de terminaison

GET /api/saas-billing/monthly-records

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/monthly-records \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Relancer les paiements en échec d'une installation

Paramètres

clubID `string` (facultatif) L'ID de l'installation dont obtenir les enregistrements mensuels en échec

Point de terminaison

PUT /api/clubs/:clubID/saas-billing/retry-failed-payments

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/:clubID/saas-billing/retry-failed-payments \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Mettre à jour un enregistrement mensuel

Paramètres

recordID `string` (facultatif) L'ID de l'enregistrement à obtenir status `string` (facultatif) Le statut à appliquer à l'enregistrement

Point de terminaison

PUT /api/saas-billing/monthly-records/{recordID}

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{recordID} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Vérifie si les paiements ont abouti et met à jour le statut de l'enregistrement

Paramètres

clubID `string` (facultatif) recordID `string` (facultatif) L'ID de l'enregistrement à obtenir

Point de terminaison

PUT /api/clubs/{clubID}/saas-billing/monthly-records/{recordID}/validate

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/monthly-records/{recordID}/validate \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Ajouter un moyen de paiement pour une installation.

Paramètres

clubID `string` (facultatif)

Point de terminaison

POST /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Synchronise les moyens de paiement d'une installation avec Stripe.

Paramètres

clubID `string` (facultatif)

Point de terminaison

PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie le budget de dépenses de l'installation ainsi que le cumul du mois et la prévision calculés.

Paramètres

clubID `string` (facultatif)

Point de terminaison

GET /api/clubs/{clubID}/saas-billing/budget

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/budget \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Créer, mettre à jour ou effacer le budget de dépenses de l'installation.

Paramètres

clubID `string` (facultatif) body `object` (facultatif)

Point de terminaison

PUT /api/clubs/{clubID}/saas-billing/budget

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/budget \
  -H "x-api-key: YOUR_API_KEY"

Supprimer un moyen de paiement des paramètres de paiement de l'installation.

Paramètres

clubID `string` (facultatif) paymentMethodID `string` (facultatif)

Point de terminaison

DELETE /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}

Exemple de requête

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"

Réponse

{}

Obtenir les paramètres de paiement d'une installation.

Paramètres

clubID `string` (facultatif)

Point de terminaison

GET /api/clubs/{clubID}/saas-billing/payment-settings

Exemple de requête

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

Réponse

{}

Mettre à jour les paramètres de paiement d'une installation.

Paramètres

clubID `string` (facultatif) lockedOut `boolean` (facultatif) Indique si l'accès de l'installation au système sera bloqué. pauseBilling `boolean` (facultatif) Indique si la facturation automatique de l'installation sera suspendue. customerID `string` (facultatif) Si renseigné, met à jour l'ID client Stripe de l'installation. deleteSourceID `string` (facultatif) Indique s'il faut supprimer le client source de Stripe.

Point de terminaison

PUT /api/clubs/{clubID}/saas-billing/payment-settings

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Obtenir le premier mois facturé de toutes les installations.

Paramètres

clubID `string` (facultatif)

Point de terminaison

GET /api/saas-billing/payment-settings/earliest-billed-month

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/payment-settings/earliest-billed-month \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lister les comptes pouvant lever un blocage de facturation pour une installation, par niveau : d'abord les utilisateurs disposant du module de facturation, puis les administrateurs d'organisation uniquement en dernier recours si personne n'en dispose.

Paramètres

clubID `string` (obligatoire)

Point de terminaison

GET /api/clubs/{clubID}/saas-billing/lockout-contacts

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/lockout-contacts \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Parcourir par pages toutes les installations du système et renvoyer l'ID client de chacune.

Paramètres

clubID `string` (facultatif) organisationId `string` (facultatif) ID de l'organisation

Point de terminaison

GET /api/saas-billing/payment-settings/customer-ids

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/payment-settings/customer-ids \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Définir le moyen de paiement principal d'une installation.

Paramètres

clubID `string` (facultatif)

Point de terminaison

PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}/primary

Exemple de requête

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"

Réponse

{}

Mettre à jour le profil de facturation d'une installation.

Paramètres

clubID `string` (facultatif) invoiceEntity `string` (facultatif) billingContacts `string` (facultatif) Liste des UUID des contacts KYC ccEmails `string` (facultatif) Liste des e-mails à mettre en copie des factures

Point de terminaison

PUT /api/clubs/{clubID}/saas-billing/payment-settings/billing-profile

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/billing-profile \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Mettre à jour un moyen de paiement d'une installation.

Paramètres

clubID `string` (facultatif) cardID `string` (facultatif)

Point de terminaison

PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{cardID}

Exemple de requête

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"

Réponse

{}

Renvoie, par installation, la ventilation de tous les frais de produits applicables et des lignes supplémentaires pour l'export CSV. Résout la hiérarchie de remplacement globale/région/installation pour chaque installation à laquelle l'utilisateur a accès.

Paramètres

organisationId `string` (obligatoire) ID de l'organisation pour le contrôle d'accès

Point de terminaison

GET /api/saas-billing/charges-config/export

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/charges-config/export \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la configuration des frais d'une cible donnée

Paramètres

clubId `string` (facultatif) L'ID de l'installation dont obtenir la configuration des frais

Point de terminaison

GET /api/saas-billing/charges-config/{clubId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/charges-config/{clubId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Récapitulatif de facturation de l'organisation de cette installation : portée effective du payeur, éventuel changement de consolidation planifié, et possibilité ou non pour l'appelant de gérer l'option de consolidation.

Paramètres

clubID `string` (obligatoire)

Point de terminaison

GET /api/clubs/{clubID}/saas-billing/org/summary

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/org/summary \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Enregistrements mensuels consolidés de l'organisation (relevés) avec la ventilation par installation, du plus récent au plus ancien. Vide jusqu'à la clôture du premier mois consolidé de l'organisation.

Paramètres

clubID `string` (obligatoire)

Point de terminaison

GET /api/clubs/{clubID}/saas-billing/org/monthly-records

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/org/monthly-records \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Récapitulatif du portefeuille prépayé : solde, débits d'utilisation du mois en cours, configuration de la recharge automatique, mode de facturation.

Paramètres

clubID `string` (obligatoire)

Point de terminaison

GET /api/clubs/{clubID}/saas-billing/wallet

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Registre du portefeuille, du plus récent au plus ancien. Les portefeuilles à l'échelle de l'organisation incluent les lignes de toutes les installations (chacune porte son clubID d'origine).

Paramètres

clubID `string` (obligatoire) limit `string` (facultatif) types `string` (facultatif) types de transactions séparés par des virgules from `string` (facultatif) to `string` (facultatif) cursor `string` (facultatif) nextCursor d'une page précédente

Point de terminaison

GET /api/clubs/{clubID}/saas-billing/wallet/transactions

Exemple de requête

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

Réponse

{}

Reçu PDF à l'image de la marque pour une transaction unique du portefeuille (recharges et crédits).

Paramètres

clubID `string` (obligatoire) txId `string` (obligatoire)

Point de terminaison

GET /api/clubs/{clubID}/saas-billing/wallet/transactions/{txId}/receipt.pdf

Exemple de requête

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"

Réponse

{}

Lot de reçus PDF à l'image de la marque pour les transactions de recharge du portefeuille sélectionnées, sous forme de ZIP. Chaque ID doit correspondre à une recharge (par carte ou sur facture) du portefeuille de cette installation : les débits d'utilisation et les ajustements n'ont pas de reçu et sont refusés.

Paramètres

clubID `string` (obligatoire) ids `string` (obligatoire) ID de transactions séparés par des virgules (50 au maximum)

Point de terminaison

GET /api/clubs/{clubID}/saas-billing/wallet/transactions/receipts.zip

Exemple de requête

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

Réponse

{}

Débiter une carte enregistrée pour la facturation SaaS afin d'ajouter du solde prépayé. Renvoie requires_action + clientSecret lorsque 3DS est nécessaire.

Paramètres

clubID `string` (obligatoire) body `object` (facultatif)

Point de terminaison

POST /api/clubs/{clubID}/saas-billing/wallet/topup

Exemple de requête

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

Réponse

{}

Finaliser une recharge du portefeuille une fois que l'applet a terminé l'authentification 3DS. Idempotent.

Paramètres

clubID `string` (obligatoire)

Point de terminaison

POST /api/clubs/{clubID}/saas-billing/wallet/topup/confirm

Exemple de requête

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

Réponse

{}

Mettre à jour la règle de recharge automatique de l'installation (enregistrée dans sa ligne de remplacement du profil de facturation).

Paramètres

clubID `string` (obligatoire) body `object` (facultatif)

Point de terminaison

PATCH /api/clubs/{clubID}/saas-billing/wallet/auto-topup

Exemple de requête

curl -X PATCH https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/auto-topup \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Factures de recharge du portefeuille de cette installation (mode de paiement sur facture), de la plus récente à la plus ancienne.

Paramètres

clubID `string` (obligatoire)

Point de terminaison

GET /api/clubs/{clubID}/saas-billing/wallet/invoices

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/invoices \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Demander une facture de recharge payable par référence (mode de paiement sur facture uniquement). Une seule facture en attente au maximum par portefeuille : une deuxième demande renvoie la facture existante avec alreadyPending=true.

Paramètres

clubID `string` (obligatoire) body `string` (facultatif) { amountCents: number }

Point de terminaison

POST /api/clubs/{clubID}/saas-billing/wallet/topup-invoice

Exemple de requête

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

Réponse

{}

Renvoie la liste des commandes de l'installation.

Paramètres

facilityID `string` (facultatif)

Point de terminaison

GET /api/store/facilities/:facilityID/orders

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/store/facilities/:facilityID/orders \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie la liste des produits disponibles pour l'installation.

Paramètres

clubID `string` (obligatoire) search `string` (facultatif) limit `string` (facultatif) page `string` (facultatif) Le numéro de page pour la pagination (commence à 1).

Point de terminaison

GET /api/store/clubs/{clubID}/products

Exemple de requête

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

Réponse

{}

Lister les enregistrements Stripe de l'installation.

Paramètres

club `string` (obligatoire) fromDate `string` (facultatif) Horodatage Unix toDate `string` (facultatif) Horodatage Unix socketID `string` (obligatoire) Identifiant unique de la requête socket

Point de terminaison

GET /api/club/{club}/stripe/records

Exemple de requête

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

Réponse

{}

Annuler une intention de paiement

Paramètres

club `string` (obligatoire) paymentIntent `string` (facultatif)

Point de terminaison

GET /api/club/{club}/stripe/payment-intent/:paymentIntent/cancel

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/payment-intent/:paymentIntent/cancel \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Créer une Account Session Stripe pour les composants intégrés

Crée une Account Session Stripe pour un compte connecté. Renvoie un client_secret utilisé pour initialiser les composants intégrés Connect (litiges, versements, gestion du compte, documents).

Corps de la requête

Point de terminaison

POST /api/stripe/account-session

Exemple de requête

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

Réponse

{}

Génère un lien à usage unique vers la page KYC Stripe pour un compte connecté.

Paramètres

club `string` (obligatoire)

Point de terminaison

GET /api/club/{club}/stripe/generate-kyc-token

Exemple de requête

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

Réponse

{}

Obtient les détails d'un compte connecté Stripe dans le cadre du processus KYC.

Paramètres

club `string` (obligatoire)

Point de terminaison

GET /api/club/{club}/stripe/connect-account-details

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/connect-account-details \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renvoie tout l'historique des tickets d'après l'ID de l'installation

Paramètres

club `string` (obligatoire) ID interne du club auquel vous souhaitez accéder.

Point de terminaison

GET /api/ticketing/clubtickets/{club}

Exemple de requête

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

Réponse

{}

Obtient les services

Point de terminaison

GET /api/ticketing/departments

Exemple de requête

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

Réponse

{}

Obtient les détails d'un ticket

Paramètres

user `string` (obligatoire) e-mail de l'utilisateur. ticketNumber `string` (obligatoire) ID à 6 chiffres du ticket auquel vous souhaitez accéder. club `string` (obligatoire) l'ID de l'installation sélectionnée.

Point de terminaison

GET /api/ticketing/ticket-details/:ticketNumber/:club

Exemple de requête

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

Réponse

{}

Obtient les sujets

Point de terminaison

GET /api/ticketing/topics

Exemple de requête

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

Réponse

{}

Obtient tous les tickets créés par l'utilisateur actuellement connecté. Remarque : il est déterminé à partir des en-têtes fournis par notre service Google SSO.

Paramètres

user `string` (obligatoire) E-mail de l'utilisateur actuellement connecté

Point de terminaison

GET /api/ticketing/usertickets

Exemple de requête

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

Réponse

{}

Crée un nouveau ticket

Paramètres

club `string` (obligatoire) l'ID de l'installation sélectionnée.

Point de terminaison

POST /api/ticketing/clubticket/:club

Exemple de requête

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

Réponse

{}

Crée un nouveau ticket

Paramètres

subject `string` (obligatoire) Objet du ticket. message `string` (obligatoire) Message complet du ticket.

Point de terminaison

POST /api/ticketing/userticket

Exemple de requête

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

Réponse

{}

Crée une réponse à un ticket existant

Paramètres

subject `string` (obligatoire) Objet du ticket. message `string` (obligatoire) Message complet du ticket.

Point de terminaison

POST /api/ticketing/user-reply

Exemple de requête

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

Réponse

{}

Récupère les préférences d'un utilisateur

Point de terminaison

GET /api/user-preferences

Exemple de requête

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

Réponse

{}

Met à jour les préférences d'un utilisateur

Paramètres

body `string` (obligatoire)

Point de terminaison

PUT /api/user-preferences

Exemple de requête

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

Réponse

{}

Changer le mot de passe de l'utilisateur

Change le mot de passe de l'utilisateur. Exige une vérification par code à usage unique si l'utilisateur a un numéro de téléphone, ou l'ajout d'un numéro de téléphone s'il n'en a pas.

Corps de la requête

Point de terminaison

POST /api/user/change-password

Exemple de requête

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

Réponse

{}

Vérifier l'état de l'authentification à deux facteurs de l'utilisateur

Indique si l'authentification à deux facteurs est activée pour l'utilisateur et si l'un de ses rôles l'impose

Point de terminaison

GET /api/user/check-2fa-status

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/user/check-2fa-status \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lister les organisations, installations et régions auxquelles l'utilisateur a accès pour un module donné.

Paramètres

moduleId `string` (obligatoire)

Point de terminaison

POST /api/user/me/modules/{moduleId}/org-access

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/user/me/modules/{moduleId}/org-access \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Crée une « demande d'association » d'un utilisateur final, qui demande à « rejoindre » une installation.

Paramètres

body `string` (obligatoire) Objet JSON du nouveau club à ajouter au système.

Point de terminaison

POST /api/user/linkclub

Exemple de requête

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

Réponse

{}

Liste toutes les installations autorisées pour l'utilisateur.

Point de terminaison

GET /api/user/listauthorised

Exemple de requête

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

Réponse

{}

Envoyer un code à usage unique sur deux canaux (e-mail + SMS)

Envoie des codes à usage unique à la fois à l'adresse e-mail de l'utilisateur et à un numéro de téléphone indiqué. Utilisé pour les opérations de haute sécurité, comme la première vérification d'un numéro de téléphone. Ce point de terminaison envoie uniquement les codes et ne modifie aucune donnée de l'utilisateur.

Corps de la requête

Point de terminaison

POST /api/user/send-dual-otp

Exemple de requête

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

Réponse

{}

Envoyer un code à usage unique par téléphone ou par e-mail

Envoie un code à usage unique au numéro de téléphone (SMS) ou à l'adresse e-mail de l'utilisateur pour vérification

Corps de la requête

Point de terminaison

POST /api/user/send-otp

Exemple de requête

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

Réponse

{}

Vérifier si l'utilisateur dispose d'un accès valide aux pages sensibles

Indique si l'utilisateur dispose d'une session valide, vérifiée par code à usage unique, pour accéder aux pages sensibles

Point de terminaison

GET /api/user/sensitive-page-access

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/user/sensitive-page-access \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Vérifier le code à usage unique et accorder l'accès aux pages sensibles

Vérifie le code à usage unique et, s'il est valide, accorde un accès d'une heure aux pages sensibles

Corps de la requête

Point de terminaison

POST /api/user/sensitive-page-access/verify

Exemple de requête

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

Réponse

{}

Révoquer l'accès aux pages sensibles (déconnexion des pages sensibles)

Révoque la session actuelle d'accès aux pages sensibles de l'utilisateur

Point de terminaison

POST /api/user/sensitive-page-access/revoke

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/user/sensitive-page-access/revoke \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Activer ou désactiver l'authentification à deux facteurs

Active ou désactive l'authentification à deux facteurs pour l'utilisateur. Exige un numéro de téléphone et une vérification par code à usage unique.

Corps de la requête

Point de terminaison

POST /api/user/toggle-2fa

Exemple de requête

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

Réponse

{}

Mettre à jour son propre profil

Permet à un utilisateur de mettre à jour ses propres informations de profil (prénom, nom, numéro de téléphone). Lors du premier ajout d'un numéro de téléphone, une vérification par code à usage unique sur deux canaux est requise (codes par e-mail et par SMS). Lors du changement d'un numéro existant, seul le code par e-mail est requis.

Corps de la requête

Point de terminaison

PATCH /api/user/update-profile

Exemple de requête

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

Réponse

{}

Récupérer une icône à partir de l'URL.

Point de terminaison

GET /api/website-icon

Exemple de requête

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

Réponse

{}

Lister les modèles d'entrées du coffre-fort de mots de passe

Paramètres

organisationId `string` (facultatif) Contexte d'organisation pour les contrôles d'accès aux modules

Point de terminaison

GET /api/vault/templates

Exemple de requête

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

Réponse

{}

Lister les entrées visibles du coffre-fort de mots de passe

Paramètres

organisationId `string` (obligatoire) scope `string` (facultatif)

Point de terminaison

GET /api/vault/entries

Exemple de requête

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

Réponse

{}

Créer une entrée dans le coffre-fort de mots de passe

Point de terminaison

POST /api/vault/entries

Exemple de requête

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

Obtenir une entrée du coffre-fort de mots de passe sans révéler les valeurs secrètes

Paramètres

entryId `string` (obligatoire) organisationId `string` (obligatoire)

Point de terminaison

GET /api/vault/entries/{entryId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Mettre à jour une entrée du coffre-fort de mots de passe

Point de terminaison

PUT /api/vault/entries/{entryId}

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Supprimer une entrée du coffre-fort de mots de passe

Point de terminaison

DELETE /api/vault/entries/{entryId}

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Révéler les champs masqués ou secrets sélectionnés

Point de terminaison

POST /api/vault/entries/{entryId}/reveal

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/vault/entries/{entryId}/reveal \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lister les récapitulatifs des dossiers du coffre-fort de mots de passe

Point de terminaison

GET /api/vault/folders

Exemple de requête

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

Réponse

{}

Lister les entrées avec codes d'authentification

Point de terminaison

GET /api/vault/authenticator

Exemple de requête

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

Réponse

{}

Lister les types de nœuds de workflow enregistrés

Point de terminaison

GET /api/workflow-engine/node-types

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/node-types \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Obtenir la projection des horaires de l'installation utilisée par les blocs de workflow

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/workflow-engine/facility-hours/{facilityId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/facility-hours/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Prévisualiser l'expéditeur des e-mails de workflow à l'image de l'installation

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/workflow-engine/email-branding/{facilityId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/email-branding/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lister les ressources de l'installation pour la configuration des déclencheurs

Paramètres

facilityId `string` (obligatoire) resourceType `string` (obligatoire)

Point de terminaison

GET /api/workflow-engine/resources/{facilityId}/{resourceType}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/resources/{facilityId}/{resourceType} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lister les workflows d'une installation

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/workflow-engine/workflows/{facilityId}

Exemple de requête

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

Réponse

{}

Créer un brouillon de workflow à partir d'un graphe non vide

L'éditeur garde un nouveau workflow en local jusqu'à ce qu'il contienne au moins un bloc ; le premier enregistrement le crée donc avec son graphe en un seul appel. Un corps sans `nodes` est refusé au lieu d'être enregistré.

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/workflow-engine/workflows/{facilityId}

Exemple de requête

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

Réponse

{}

Lister les identifiants que les workflows d'une installation peuvent utiliser

Renvoie les identifiants propres à l'installation ainsi que ceux partagés au niveau de sa marque ou de son organisation. Les secrets ne sont jamais renvoyés ; `hasValue` indique seulement qu'un secret est enregistré.

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/workflow-engine/credentials/{facilityId}

Exemple de requête

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

Réponse

{}

Créer un identifiant de workflow

Le niveau de portée provient de `scopeType` ; les ID de marque et d'organisation sont résolus à partir de l'installation au lieu d'être acceptés de l'appelant.

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/workflow-engine/credentials/{facilityId}

Exemple de requête

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

Paramètres de workflow à l'échelle de l'installation (destinataires des notifications d'échec)

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/workflow-engine/facility-settings/{facilityId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/facility-settings/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Enregistrer les destinataires des notifications d'échec à l'échelle de l'installation

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

PUT /api/workflow-engine/facility-settings/{facilityId}

Exemple de requête

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

Réponse

{}

Remplacer un identifiant de workflow

Un `secret` vide conserve le secret enregistré, de sorte qu'un identifiant peut être renommé sans le ressaisir. Il est impossible de relire un secret.

Paramètres

facilityId `string` (obligatoire) credentialId `string` (obligatoire)

Point de terminaison

PUT /api/workflow-engine/credentials/{facilityId}/{credentialId}

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId}/{credentialId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Supprimer un identifiant de workflow

Les nœuds qui y font référence échouent de manière sécurisée lors de l'appel suivant, y compris dans les workflows déjà publiés, car un instantané n'enregistre que la référence.

Paramètres

facilityId `string` (obligatoire) credentialId `string` (obligatoire)

Point de terminaison

DELETE /api/workflow-engine/credentials/{facilityId}/{credentialId}

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId}/{credentialId} \
  -H "x-api-key: YOUR_API_KEY"

Obtenir l'URL de webhook d'un déclencheur de workflow

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire) nodeId `string` (obligatoire)

Point de terminaison

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Renouveler l'URL de webhook d'un déclencheur de workflow

Invalide immédiatement l'URL précédente.

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire) nodeId `string` (obligatoire)

Point de terminaison

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook/rotate

Exemple de requête

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"

Réponse

{}

Obtenir un workflow par ID

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire)

Point de terminaison

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Créer ou mettre à jour un brouillon de workflow

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire)

Corps de la requête

Point de terminaison

PUT /api/workflow-engine/workflows/{facilityId}/{workflowId}

Exemple de requête

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

Réponse

{}

Mettre à jour le nom et/ou la description d'un workflow

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire)

Corps de la requête

Point de terminaison

PATCH /api/workflow-engine/workflows/{facilityId}/{workflowId}

Exemple de requête

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

Réponse

{}

Supprimer un workflow et ses versions

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire)

Point de terminaison

DELETE /api/workflow-engine/workflows/{facilityId}/{workflowId}

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Dupliquer un workflow dans un nouveau brouillon inactif

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire)

Point de terminaison

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/duplicate

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/duplicate \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Publier le brouillon actuel (instantané de version immuable)

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/publish

Exemple de requête

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

Réponse

{}

Rétablir le brouillon à la dernière version publiée

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire)

Point de terminaison

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/discard

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/discard \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Activer ou désactiver un workflow

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire)

Corps de la requête

Point de terminaison

PATCH /api/workflow-engine/workflows/{facilityId}/{workflowId}/active

Exemple de requête

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

Réponse

{}

Générer ou réviser un graphe de workflow avec l'IA

Paramètres

facilityId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/workflow-engine/generate/{facilityId}

Exemple de requête

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

Réponse

{}

Lister les modèles sur lesquels un nœud Agent peut s'exécuter pour cette installation

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/workflow-engine/agent-models/{facilityId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-models/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lister les outils MCP qu'un nœud Agent peut associer pour cette installation

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/workflow-engine/agent-tools/{facilityId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-tools/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Rechercher les conversations Agent enregistrées de cette installation (liaisons par Conversation key)

Paramètres

facilityId `string` (obligatoire) deviceId `string` (facultatif) Limiter aux conversations d'un seul appareil Agent (le deviceId configuré du nœud) q `string` (facultatif) Correspondance de sous-chaîne insensible à la casse sur la Conversation key, l'ID de session ou le nom de l'appareil limit `integer` (facultatif) offset `integer` (facultatif)

Point de terminaison

GET /api/workflow-engine/agent-conversations/{facilityId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-conversations/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Rechercher les conversations conservées sur l'appareil Agent de l'installation lui-même

Liste les sessions propres à l'appareil (les conversations de la barre latérale de l'interface Agent) afin qu'un workflow puisse poursuivre une conversation existante avec son contexte. L'appareil détient l'historique ; lorsque l'installation compte plusieurs appareils, `deviceId` choisit lequel (l'appareil configuré du nœud). Appareil injoignable → 502.

Paramètres

facilityId `string` (obligatoire) deviceId `string` (facultatif) L'appareil Agent configuré du nœud ; omettez-le pour résoudre l'appareil unique de l'installation q `string` (facultatif) Correspondance de sous-chaîne insensible à la casse sur le titre ou l'ID de la session limit `integer` (facultatif) offset `integer` (facultatif)

Point de terminaison

GET /api/workflow-engine/agent-device-sessions/{facilityId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-device-sessions/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Rechercher les tableaux du kanban de l'appareil Agent de l'installation

Alimente le sélecteur Board ID du bloc Agent: Kanban. Correspondance de sous-chaîne insensible à la casse sur le nom ou le slug du tableau ; `current` est le slug du tableau actif de l'appareil, pour que le sélecteur de tâches puisse en faire sa portée par défaut. Lorsque l'installation compte plusieurs appareils, `deviceId` choisit lequel. Appareil injoignable → 502.

Paramètres

facilityId `string` (obligatoire) deviceId `string` (facultatif) L'appareil Agent configuré du nœud ; omettez-le pour résoudre l'appareil unique de l'installation q `string` (facultatif) Correspondance de sous-chaîne insensible à la casse sur le nom ou le slug du tableau limit `integer` (facultatif) offset `integer` (facultatif)

Point de terminaison

GET /api/workflow-engine/kanban-boards/{facilityId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/kanban-boards/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Rechercher les tâches d'un tableau du kanban de l'appareil Agent de l'installation

Alimente le sélecteur Task ID du bloc Agent: Kanban. Correspondance de sous-chaîne insensible à la casse sur l'ID, le titre ou le corps de la tâche ; les tâches sont propres à chaque tableau (l'appareil ne permet pas de recherche entre tableaux), donc `board` limite la récupération : omettez-le pour le tableau actif de l'appareil. Appareil injoignable → 502.

Paramètres

facilityId `string` (obligatoire) deviceId `string` (facultatif) L'appareil Agent configuré du nœud ; omettez-le pour résoudre l'appareil unique de l'installation board `string` (facultatif) Le slug du tableau à lister ; omettez-le pour le tableau actif de l'appareil q `string` (facultatif) Correspondance de sous-chaîne insensible à la casse sur l'ID, le titre ou le corps de la tâche limit `integer` (facultatif) offset `integer` (facultatif)

Point de terminaison

GET /api/workflow-engine/kanban-tasks/{facilityId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/kanban-tasks/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lister les modèles de workflow sélectionnés, filtrés pour cette installation

Paramètres

facilityId `string` (obligatoire)

Point de terminaison

GET /api/workflow-engine/templates/{facilityId}

Exemple de requête

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

Réponse

{}

Instancier un modèle en fragment de graphe pour le brouillon ouvert

Paramètres

facilityId `string` (obligatoire) templateId `string` (obligatoire)

Point de terminaison

POST /api/workflow-engine/templates/{facilityId}/{templateId}

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/templates/{facilityId}/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Contexte du sélecteur de portée pour la page d'administration des modèles (niveaux d'administration)

Point de terminaison

GET /api/workflow-engine/template-admin/context

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/context \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lister les modèles que l'appelant peut administrer, avec les indicateurs d'autorisation

Point de terminaison

GET /api/workflow-engine/template-admin

Exemple de requête

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

Réponse

{}

Créer un modèle (niveaux d'administration)

Corps de la requête

Point de terminaison

POST /api/workflow-engine/template-admin

Exemple de requête

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

Détail d'un modèle, graphe compris, pour l'éditeur d'administration

Point de terminaison

GET /api/workflow-engine/template-admin/{templateId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Remplacer un modèle (organisation propriétaire)

Point de terminaison

PUT /api/workflow-engine/template-admin/{templateId}

Exemple de requête

curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Supprimer de manière logique un modèle (organisation propriétaire)

Point de terminaison

DELETE /api/workflow-engine/template-admin/{templateId}

Exemple de requête

curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Dupliquer un modèle visible dans une portée cible que l'appelant peut utiliser

Corps de la requête

Point de terminaison

POST /api/workflow-engine/template-admin/{templateId}/duplicate

Exemple de requête

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

Exécuter le graphe publié d'un workflow à partir d'un déclencheur manuel

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/run

Exemple de requête

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

Réponse

{}

Tester le brouillon enregistré sans le publier

Exécute le graphe du brouillon actuel et enregistre le résultat avec `mode: test` et sans `versionId`. La publication, l'indicateur d'activation et `publishedVersionId` ne sont jamais modifiés. Les effets de bord sont simulés par défaut ; `sideEffects: live` exige en plus `confirmLiveSideEffects: true`.

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/test

Exemple de requête

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

Réponse

{}

Tester un nœud de workflow autorisé

Exécute un nœud du brouillon enregistré testable indépendamment. Les valeurs des variables peuvent être fournies à partir d'étapes d'exécution enregistrées. Les méthodes HTTP qui modifient des données exigent une confirmation explicite.

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/test-node

Exemple de requête

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

Réponse

{}

Lister les exécutions récentes d'un workflow

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire)

Point de terminaison

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Lire une exécution (statut + étapes ordonnées)

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire) executionId `string` (obligatoire)

Point de terminaison

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Annuler le Delay en attente sur lequel une exécution est bloquée

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire) executionId `string` (obligatoire)

Point de terminaison

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/cancel

Exemple de requête

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/cancel \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Rejouer une exécution terminée à partir de la charge utile enregistrée de son déclencheur

`mode: published` réexécute exactement la version sur laquelle l'exécution d'origine était épinglée, avec de vrais effets de bord. `mode: draft-test` réexécute le brouillon actuel sous forme de test simulé. Une exécution dont la charge utile du déclencheur a été tronquée à l'écriture ne peut pas être rejouée.

Paramètres

facilityId `string` (obligatoire) workflowId `string` (obligatoire) executionId `string` (obligatoire)

Corps de la requête

Point de terminaison

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/retry

Exemple de requête

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

Réponse

{}

Recherche indexée des workflows contenant un type de nœud

Paramètres

nodeType `string` (obligatoire) facilityId `string` (facultatif) organisationId `string` (facultatif)

Point de terminaison

GET /api/workflow-engine/master-view/{nodeType}

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/master-view/{nodeType} \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Proxy de redirection OAuth en marque blanche (Connected Apps)

Redirection 302 publique non authentifiée qui transmet le rappel d'un fournisseur OAuth au rappel d'authentification de la plateforme d'outils en amont, en conservant la chaîne de requête. Permet aux applications OAuth détenues par PH d'enregistrer un URI de redirection performancehub.co, afin que le domaine du fournisseur en amont n'apparaisse jamais dans la barre d'adresse (nécessaire pour le futur projet d'applications OAuth personnalisées ; sans effet avec l'authentification gérée).

Point de terminaison

GET /guest/connected-apps/oauth-callback

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/oauth-callback \
  -H "x-api-key: YOUR_API_KEY"

Page de fin de la chaîne de connexion (Connected Apps)

Page d'arrivée légère « vous pouvez fermer cette fenêtre » pour l'onglet OAuth dans lequel une chaîne de connexion s'est exécutée. Renvoie le résultat (suite ou toolkit connecté et nouveaux ID de compte, ou toolkit en échec) à l'onglet de la marketplace via window.opener.postMessage de même origine ; si le lien avec l'onglet d'origine a été rompu, se rabat sur un lien profond vers l'applet ph-ai-agent qui reproduit la page d'arrivée de l'application. Purement informatif : ne contient aucun secret et n'effectue aucune écriture.

Paramètres

connected `string` (facultatif) ID de la suite ou slug du toolkit dont la connexion est terminée (cas de réussite). accounts `string` (facultatif) ID des comptes connectés créés par la chaîne, séparés par des virgules. connectError `string` (facultatif) Slug du toolkit dont l'étape a échoué (cas d'échec).

Point de terminaison

GET /guest/connected-apps/finish

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/finish \
  -H "x-api-key: YOUR_API_KEY"

Réponse

{}

Rappel d'enchaînement de la connexion d'une suite (Connected Apps)

Étape de rappel OAuth du flux de connexion d'une suite en un clic. Le JWT d'état signé (HS256, TTL de 30 min) encode { clubID, deviceId, suite, toolkits, step, caids } : les comptes se connectent à cet appareil agent unique, et caids accumule les ID de compte créés à chaque étape (la redirection finale vers l'applet les transporte pour que la marketplace puisse proposer d'étiqueter les nouveaux comptes). Marque le toolkit de l'étape comme connecté, puis redirige (302) vers le Connect Link du toolkit suivant, ou vers la page de l'applet ph-ai-agent (lien profond vers l'agent) lorsque la suite est terminée. Les connexions d'un seul toolkit passent par le même gestionnaire avec une suite d'un seul toolkit.

Paramètres

state `string` (obligatoire) JWT d'état signé de la chaîne de connexion.

Point de terminaison

GET /guest/connected-apps/connect-next

Exemple de requête

curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/connect-next \
  -H "x-api-key: YOUR_API_KEY"

Déclencher l'e-mail de configuration du mot de passe

Valide le lien signé d'un e-mail de bienvenue, déclenche un e-mail de réinitialisation du mot de passe et affiche une page de confirmation. Aucune authentification requise.

Paramètres

email `string` (obligatoire) Adresse e-mail de l'utilisateur sig `string` (obligatoire) Signature HMAC de l'e-mail

Point de terminaison

GET /guest/setup-password

Exemple de requête

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

Réponse

{}