Introducción

Te damos la bienvenida a la API de Performance Hub. Esta API administra los datos del club y los sistemas clave que se integran con tu club y sus sistemas externos, y no es una API de consumo público. Para obtener más información sobre el uso de los distintos sistemas de Performance Hub que admite esta API, consulta la entrada correspondiente al sistema que necesitas en nuestra [documentación de Performance Hub](https://docs.performancehub.co).

URL base

https://portal.hub.gymsystems.co

Autenticación

Recibirás los datos de autenticación cuando se apruebe tu integración.

Evento "turno del agente completado" informado por el dispositivo (activador de notificaciones web push)

Lo llama el sidecar de un dispositivo de Agente de IA vinculado (nunca los navegadores) cuando termina una ejecución del agente iniciada desde la interfaz web que duró más que el umbral de notificación del dispositivo. Se autentica con un JWT HS256 de corta duración por dispositivo (aud 'events'). Se deduplica por dispositivo+sesión+inicio y tiene límite de frecuencia por dispositivo; luego se entrega a las suscripciones push HTML5 del usuario que inició la ejecución, con un enlace directo a la conversación.

Cuerpo de la solicitud

Endpoint

POST /ai/events/agent-turn-complete

Solicitud de ejemplo

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

Respuesta

{}

Notificación push iniciada por el agente (skill ph-notify)

Lo llama el sidecar de un dispositivo de Agente de IA vinculado en nombre del agente del dispositivo (la skill ph-notify) para enviar una notificación arbitraria al navegador y los dispositivos móviles de un usuario. Se autentica con un JWT HS256 de corta duración por dispositivo (aud 'events'). El usuario de destino debe tener acceso al dispositivo (política de acceso por agente); si se omite, la notificación se envía al propietario del dispositivo. Tiene límite de frecuencia por dispositivo, independiente del de los eventos de turno completado.

Cuerpo de la solicitud

Endpoint

POST /ai/events/agent-notify

Solicitud de ejemplo

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

Respuesta

{}

Cargar una imagen de notificación (skill ph-notify)

Acepta el cuerpo de una imagen sin procesar desde un dispositivo vinculado (JWT con aud 'events') y la almacena en el bucket público notify-media con una clave UUID imposible de adivinar. Los objetos se eliminan automáticamente después de 7 días (ciclo de vida de S3). Devuelve la URL https pública para usarla como `imageUrl` en /ai/events/agent-notify. Límite de 5 MB; solo png/jpeg/gif/webp.

Cuerpo de la solicitud

Endpoint

POST /ai/media/notify-image

Solicitud de ejemplo

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

Respuesta

{}

Relé MCP del dispositivo para Connected Apps (herramientas SaaS externas)

Endpoint MCP de HTTP transmitible para dispositivos de Agente de IA vinculados (servidor MCP "connected_apps" en el puerto de escucha :8790 del sidecar del dispositivo). Se autentica con un JWT HS256 de corta duración por dispositivo (aud 'mcp', la misma credencial que /mcp) y depende de la marca de Connected Apps habilitado del AGENTE (las conexiones son por dispositivo de agente, no por instalación). Las solicitudes se transmiten al servidor MCP de sesión de la plataforma de herramientas de origen del propio agente, con los encabezados de sesión insertados en el servidor; las credenciales de origen nunca llegan al dispositivo. Los nombres de las herramientas y la marca del proveedor se sustituyen por marca blanca en ambos sentidos durante el tránsito. Un 401/410 de origen (sesión vencida) provoca que se vuelva a crear la sesión y se reintente una vez.

Endpoint

POST /mcp/apps

Solicitud de ejemplo

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

Respuesta

{}

Buscar en los registros de auditoría de la API (acceso al módulo IAM & Admin)

Busca y filtra los registros de acceso a la API con funciones de filtrado avanzadas. Los usuarios solo pueden ver los registros de las organizaciones a las que tienen acceso.

Parámetros

organisationId `string` (opcional) ID de la organización para la verificación de ACL (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/admin/audit-logs/search

Solicitud de ejemplo

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

Respuesta

{}

Obtener las estadísticas de registros de auditoría almacenadas en caché en Redis (acceso al módulo IAM & Admin)

Recupera estadísticas agregadas de la caché de Redis para cargar el panel al instante

Parámetros

timeWindow `string` (opcional) Período de las estadísticas (12h de forma predeterminada)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Obtener estadísticas de los registros de auditoría (acceso al módulo IAM & Admin)

Recupera estadísticas agregadas para el panel. Limitadas a las organizaciones del usuario.

Parámetros

startTime `number` (opcional) Hora de inicio (marca de tiempo Unix); de forma predeterminada, hace 24 horas endTime `number` (opcional) Hora de finalización (marca de tiempo Unix); de forma predeterminada, el momento actual

Endpoint

GET /api/admin/audit-logs/statistics

Solicitud de ejemplo

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

Respuesta

{}

Obtener datos de series temporales de los registros de auditoría (acceso al módulo IAM & Admin)

Recupera datos de series temporales agrupados en intervalos para visualizar la línea de tiempo de solicitudes

Parámetros

timeWindow `string` (opcional) Período de los datos de series temporales: - 1h: última hora (bloques de 10 minutos) - 12h: últimas 12 horas (bloques de 10 minutos) - 24h: últimas 24 horas (bloques de 10 minutos) - 7d: últimos 7 días (bloques de 1 hora) - 14d: últimos 14 días (bloques de 1 hora)

Endpoint

GET /api/admin/audit-logs/timeseries

Solicitud de ejemplo

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

Respuesta

{}

Obtener las organizaciones a cuyos registros de auditoría tiene acceso el usuario (acceso al módulo IAM & Admin)

Devuelve la lista de organizaciones cuyos registros de auditoría puede ver el usuario actual

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

La llamada inicial para crear un club nuevo. Ten en cuenta que solo se crea el objeto de club 'template'; luego se necesita una segunda solicitud a la API para actualizar el club con sus datos, como el horario de apertura, la ubicación, las URL de redes sociales, etc.

Parámetros

body `string` (obligatorio) Objeto JSON del club nuevo que se agregará al sistema.

Endpoint

POST /api/admin/clubs/addclub

Solicitud de ejemplo

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

Respuesta

{}

Agrega un usuario nuevo al sistema

Parámetros

body `string` (obligatorio) Objeto JSON con los datos del usuario que quieres agregar o actualizar.

Endpoint

POST /api/users

Solicitud de ejemplo

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

Respuesta

{}

Muestra todos los usuarios (cuentas de Google Apps) que tienen acceso al sistema o la API de backoffice

Endpoint

GET /api/admin/users/listusers

Solicitud de ejemplo

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

Respuesta

{}

Muestra las claves MCP de un usuario (ocultas). Los usuarios pueden ver sus propias claves.

Parámetros

userId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Crea una clave de API de MCP nueva para un usuario. Los usuarios pueden crear sus propias claves.

Parámetros

userId `string` (obligatorio) body `object` (opcional)

Endpoint

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

Solicitud de ejemplo

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

Revoca o elimina una clave de API de MCP. Los usuarios pueden eliminar sus propias claves.

Parámetros

userId `string` (obligatorio) keyId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Quitar un rol a un usuario

Parámetros

userId `string` (opcional) El correo electrónico del usuario al que quieres quitarle el rol. roleId `string` (opcional) El ID del rol que quieres quitarle al usuario.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Actualiza los datos del perfil de un usuario existente (firstName, lastName, phoneNumber)

Parámetros

userId `string` (obligatorio) Dirección de correo electrónico del usuario body `object` (obligatorio) Datos del perfil del usuario que se actualizarán

Endpoint

PATCH /api/users/{userId}

Solicitud de ejemplo

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

Respuesta

{}

Crear o actualizar un rol de usuario

Parámetros

body `object` (opcional)

Endpoint

PUT /api/users/{userId}/roles

Solicitud de ejemplo

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

Respuesta

{}

Servicios en vivo que se ejecutan en el Agente de IA de una instalación (selector de publicación)

Obtiene a través del túnel los servicios en vivo que detectó el bridge del dispositivo, para el selector "Publish to Performance Hub" del applet. Requiere el módulo ph-ai-agent Y acceso 'open' por dispositivo (el mismo requisito que para publicar). Cada servicio se marca con publishedAppId cuando ya existe una aplicación personalizada para su puerto.

Parámetros

club `string` (obligatorio) device `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Índice de nombres de íconos MDI integrado en el Agente de IA de una instalación (selector de íconos)

Hace de proxy, a través del túnel, del índice de íconos MDI integrado en el bridge del dispositivo (GET /__services/icons/mdi/index.json). El selector de publicación y edición usa el catálogo incluido en el applet (la misma versión fijada 7.4.47); los SVG de las aplicaciones publicadas se resuelven desde el paquete local @mdi/js de portal-server. El requisito de acceso es el mismo que el del selector de servicios (módulo ph-ai-agent + acceso 'open' por dispositivo).

Parámetros

club `string` (obligatorio) device `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Obtener un lote de SVG de íconos MDI del Agente de IA de una instalación (vistas previas del selector)

Resuelve hasta 60 glifos MDI con nombre del conjunto de íconos integrado en el dispositivo en una sola llamada, y los depura en el servidor con la misma lista de permitidos que se aplica a los íconos guardados de las aplicaciones. Lo usa el selector de íconos para mostrar los resultados de búsqueda; los nombres desconocidos devuelven null.

Parámetros

club `string` (obligatorio) device `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Alcances de audiencia en los que el solicitante puede publicar desde esta instalación

El rango de audiencias que el publicador puede otorgar en el selector de publicación y edición: las instalaciones que alcanzan sus roles de ph-ai-agent (alcance de varias instalaciones) y si tiene el nivel de organización necesario para audiencias de toda la marca o toda la organización en la marca u organización de esta instalación. El servidor vuelve a aplicar las mismas reglas al publicar o actualizar (validatePublishAudience); este endpoint solo da forma a la interfaz.

Parámetros

club `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Autocompletar compañeros para la audiencia de usuarios específicos de una aplicación

Busca SOLO entre los usuarios que el solicitante ya puede ver: personas cuyos roles coinciden con al menos una instalación, región u organización del propio acceso a ph-ai-agent del solicitante. Una consulta mínima de 2 caracteres y un límite de 10 resultados impiden usar el endpoint para extraer datos; el servidor vuelve a aplicar el mismo conjunto de alcance al guardar la audiencia.

Parámetros

club `string` (obligatorio) q `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Publicar un servicio en vivo del Agente de IA como aplicación personalizada de Performance Hub

Registra una aplicación web alojada en el Agente de IA de la instalación (un servicio en vivo detectado por el bridge) como elemento del menú lateral "Custom Apps" para la audiencia elegida. Requiere el módulo ph-ai-agent en esta instalación Y acceso 'open' por dispositivo; la audiencia está limitada por los alcances de los roles del propio publicador (nunca puedes publicar más allá de tu alcance). La identidad del servicio se resuelve EN VIVO desde la lista /__services del dispositivo; el esquema http/https nunca se guarda.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Aplicaciones personalizadas publicadas visibles en esta instalación

Devuelve las aplicaciones publicadas activas cuya audiencia incluye esta instalación, con el formato que muestra el menú lateral (appId, name, icon, description). La audiencia se vuelve a resolver en vivo en cada llamada, por lo que los cambios de acceso se aplican de inmediato.

Parámetros

club `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Aplicaciones publicadas administradas desde esta instalación (vista del publicador)

Filas completas de las aplicaciones cuya instalación PRINCIPAL es este club, para la lista de administración "Published Apps" del applet. Cada fila se marca con canManage para el usuario solicitante (publicador).

Parámetros

club `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Emitir un token de visualización limitado al servicio para una aplicación personalizada publicada

Devuelve una URL firmada de corta duración y un token que el navegador usa para abrir UNA aplicación publicada directamente en el gateway de retransmisión regional del dispositivo. El token incluye un claim svc con el puerto del servicio, por lo que el gateway limita la sesión a /__services/proxy//; nunca se puede acceder al chat ni a la terminal del agente con él. Quienes la visualizan necesitan el módulo custom-apps en una instalación incluida en la audiencia de la aplicación; NO necesitan el módulo ph-ai-agent ni acceso al agente por dispositivo.

Parámetros

club `string` (obligatorio) appId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Responsable del soporte de una aplicación personalizada publicada (contacto del propietario)

Quién da soporte a esta aplicación publicada por un usuario: el correo electrónico del publicador (o, en su defecto, el del propietario del agente que la aloja). Se muestra en los paneles de desconexión o error del visor para que las solicitudes de soporte vayan al propietario de la aplicación y no a Performance Hub: las aplicaciones publicadas no forman parte del soporte principal de PH. Primero se vuelve a comprobar la audiencia de la aplicación; quienes nunca tuvieron acceso compartido a la aplicación no obtienen ninguna información. Las aplicaciones en pausa también se resuelven (los propietarios también responden preguntas como "¿por qué está en pausa?").

Parámetros

club `string` (obligatorio) appId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Enviar por correo electrónico una solicitud de soporte al propietario de una aplicación personalizada publicada

Envía el mensaje del usuario al contacto de soporte de la aplicación (el publicador o, en su defecto, el propietario del agente) como un correo electrónico con la marca: To al propietario, CC al usuario (como constancia de la solicitud) y Reply-To al usuario para que el propietario le responda directamente. Las aplicaciones publicadas las mantienen los usuarios, por lo que su soporte queda fuera de la cola de Performance Hub. Se vuelve a comprobar la audiencia; una solicitud por usuario por aplicación cada 15 minutos (tiempo de espera en Redis, fail-open).

Parámetros

club `string` (obligatorio) appId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Actualizar una aplicación personalizada publicada (nombre, ícono, descripción, estado, audiencia)

Solo para el publicador. Los cambios de audiencia se vuelven a validar con los alcances de los roles del EDITOR, con las mismas reglas de límite que al publicar. El estado alterna entre activo y en pausa (las aplicaciones en pausa desaparecen de los menús y rechazan la emisión de tokens).

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Anular la publicación de una aplicación personalizada (eliminación lógica)

Solo para el publicador. Elimina de forma lógica la fila del registro: la aplicación desaparece de los menús de inmediato y se rechaza la emisión de tokens de visualización; las sesiones del gateway ya emitidas caducan cuando vence el token.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Transferir la propiedad de una aplicación personalizada publicada

Replica el flujo de reasignación de propietario del Agente de IA: el publicador actual o un propietario de la cuenta (módulo de facturación) puede ceder la aplicación a otro usuario, que pasa a administrarla. El nuevo propietario debe tener acceso a la instalación en el club principal de la aplicación.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Exportaciones de skills preparadas en el Agente de IA de una instalación (selector para compartir)

Hace de proxy, a través del túnel, de la lista de exportaciones preparadas del bridge del dispositivo (GET /__skills/exports) para el selector "Share a skill" del applet. Las exportaciones las prepara la revisión de seguridad y portabilidad ph-skill-sharing del dispositivo; cada entrada incluye el resultado del análisis en el dispositivo. Requiere el módulo ph-ai-agent Y acceso 'open' por dispositivo (el mismo requisito que para publicar).

Parámetros

club `string` (obligatorio) device `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Publicar una exportación de skill preparada como una NUEVA skill compartida (versión borrador)

Obtiene a través del túnel el tarball de la exportación preparada indicada desde el bridge del dispositivo, lo extrae en memoria (se rechazan el path traversal, los enlaces simbólicos y el tamaño excesivo), ejecuta el análisis de seguridad determinista en la nube, genera el manifiesto a partir del frontmatter de SKILL.md, almacena el tarball direccionado por contenido en el bucket privado de skills y crea la cabecera de la skill + una versión BORRADOR. Si el análisis la bloquea, no se guarda NADA y se devuelven los hallazgos. La audiencia está limitada por los alcances de los roles del propio publicador. Envía el borrador (POST submit) para publicarlo.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Publicar una exportación preparada como una NUEVA VERSIÓN de una skill compartida existente

El mismo proceso que al publicar, pero sobre una skill existente: el nombre en el SKILL.md de la exportación debe coincidir con la skill, la versión debe ser nueva (las versiones son inmutables) y se requiere un registro de cambios. Solo el publicador puede agregar versiones. Si el análisis la bloquea, se guarda una fila de versión con estado 'rejected' (solo el informe, sin artefacto) para que los hallazgos aparezcan en el historial del publicador.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Informe de análisis completo (+ revisión con LLM) de una versión de skill

La lista completa de hallazgos de una versión, solo para el publicador y los administradores de la organización (revisiones de aprobación); quienes instalan ven los recuentos resumidos en el detalle de la skill.

Parámetros

club `string` (obligatorio) skillId `string` (obligatorio) version `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Enviar una versión borrador de una skill (publicarla o ponerla en cola de aprobación)

Hace avanzar una versión borrador según la gobernanza de la organización. Si la organización activó la revisión con LLM, primero se ejecuta la revisión de las instrucciones (en la medida de lo posible; un veredicto 'fail' la rechaza y un veredicto 'flag' la envía obligatoriamente a la cola de aprobación). Lo que se comparte a nivel de instalación se publica de inmediato, a menos que la gobernanza exija aprobación; lo que se comparte en la biblioteca de la organización (audiencia de marca u organización) requiere aprobación de forma predeterminada. Al publicar se establece el latestVersion de la skill; las instalaciones con política 'auto' la incorporan en la siguiente pasada de conciliación.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Retirar una skill compartida (la quita de la biblioteca)

Solo para el publicador. La skill desaparece de la biblioteca y rechaza nuevas instalaciones de inmediato; las instalaciones EXISTENTES siguen funcionando: retirarla afecta solo al listado, no la desactiva.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Editar el listado de una skill compartida (nombre visible, descripción, ícono)

Solo para el publicador. Campos solo de presentación: el nombre canónico de la skill es su identidad (manifiestos, directorios de instalación, coincidencia de versiones) y nunca cambia. Una cadena vacía restablece un campo a null (se usa el nombre canónico o ningún ícono). Los íconos usan el catálogo MDI (mdi:icon-name), el mismo formato que las aplicaciones de agente publicadas.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Transferir la propiedad de una skill compartida

Replica el flujo de transferencia de las aplicaciones publicadas: el publicador actual o un propietario de la cuenta (módulo de facturación) puede ceder la skill a otro usuario, que pasa a administrar sus versiones y su listado. El nuevo propietario debe tener acceso a la instalación en el club principal de la skill.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Biblioteca de skills visible en esta instalación (filtrada por audiencia)

Skills activas con al menos una versión publicada cuya audiencia incluye esta instalación (o nombra al usuario), con el resumen de la última versión publicada y el alcance de adopción en la organización (instalaciones distintas, nunca recuentos brutos de instalaciones). La audiencia se vuelve a resolver en vivo en cada llamada.

Parámetros

club `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Detalle de la skill (versiones, requisitos, resumen del análisis, adopción)

Detalle completo de una skill de la biblioteca: historial de versiones con registros de cambios y resúmenes de análisis (las listas de endpoints por versión alimentan la comparación de análisis de las actualizaciones), requisitos declarados en el manifiesto, procedencia del publicador y el indicador de adopción por número de instalaciones. Se vuelve a comprobar la audiencia: quienes nunca tuvieron acceso compartido a la skill no obtienen ninguna información (el publicador y los administradores de la organización siempre la ven).

Parámetros

club `string` (obligatorio) skillId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Skills publicadas desde esta instalación (lista de administración del publicador)

Filas completas de las skills cuya instalación PRINCIPAL es este club, cada una marcada con canManage para el usuario solicitante y con el resumen de su última versión (incluye borradores y aprobaciones pendientes: es la vista de trabajo del publicador).

Parámetros

club `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Instalar una skill de la biblioteca en el Agente de IA de una instalación

Sujeto a la gobernanza: el installSources de la organización debe permitirlo, la audiencia de la skill debe incluir esta instalación (o nombrar al solicitante), la versión debe estar publicada y el solicitante debe cumplir el nivel whoCanInstall del dispositivo de destino (propietario / usuario permitido / administrador de la instalación / administrador de la organización; consulta la gobernanza). Escribe la fila del ciclo de vida de la instalación (la fuente de verdad) y hace un envío inmediato en la medida de lo posible; el cron de conciliación garantiza la entrega cuando el dispositivo esté accesible.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Aprobar una actualización de skill pendiente para una instalación

Mueve el desiredVersion de la instalación a la última versión publicada (el paso manual de las políticas 'notify' y 'pinned', y el camino cuando la gobernanza establece updatePosture en 'approvalRequired'). Conserva la versión actual como destino de reversión de un paso y elimina cualquier bloqueo de actualización posterior a una reversión (skipVersion). El mismo nivel de permiso whoCanInstall que para instalar.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Revertir una skill instalada a su versión anterior

Establece desiredVersion en el previousVersion de la fila de instalación (se conserva en cada cambio de versión) y deja que el proceso normal de entrega la reinstale. Es de un solo paso: las versiones se intercambian, así que revertir dos veces te devuelve al punto de partida. También bloquea las actualizaciones (skipVersion = la versión desde la que se revirtió) para que las políticas auto/notify mantengan la reversión; el bloqueo se elimina cuando se publica una versión estrictamente más reciente, con update-approve o con set-policy.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Desinstalar una skill del Agente de IA de una instalación

Marca la fila de instalación como pending-uninstall y envía el estado deseado; la fila se elimina cuando el dispositivo confirma la eliminación (lectura de verificación de la conciliación). El mismo nivel de permiso whoCanInstall que para instalar.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Establecer la política de actualización por instalación de una skill en un dispositivo

auto (la conciliación aplica automáticamente las nuevas versiones publicadas, a menos que el updatePosture de la organización exija aprobación), notify (se notifica al propietario una vez por cada versión nueva y este la aplica manualmente) o pinned (nunca cambia sin un update-approve explícito). Cambiar la política elimina cualquier bloqueo de actualización posterior a una reversión (skipVersion). El mismo nivel de permiso whoCanInstall que para instalar.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Instalaciones de skills en el Agente de IA de una instalación (pestaña Skills)

Las filas del ciclo de vida de instalación de un dispositivo, cada una con los campos del listado de la skill y la indicación de si existe una versión publicada más reciente. Requiere acceso 'open' por dispositivo (la pestaña Skills está dentro del panel del agente).

Parámetros

club `string` (obligatorio) device `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Versiones de skills pendientes de aprobación en la organización de esta instalación

La cola de aprobación de los administradores de la organización: todas las versiones pendientes de aprobación de las skills de la organización, con el listado de la skill y los resúmenes del análisis y del LLM. Solo para administradores de la organización.

Parámetros

club `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Aprobar una versión de skill pendiente (la publica)

Solo para administradores de la organización. La versión se publica, el latestVersion de la skill se actualiza y se notifica al publicador. Las instalaciones con política 'auto' incorporan la versión en la siguiente pasada de conciliación.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Rechazar una versión de skill pendiente

Solo para administradores de la organización. La versión se rechaza con el motivo del revisor y se notifica al publicador, que puede corregir los hallazgos y enviar una versión nueva (las versiones son inmutables).

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Gobernanza efectiva de las skills de agentes para la organización de esta instalación

La política guardada de la organización combinada sobre los valores predeterminados de la plataforma (una organización sin fila guardada ve solo los valores predeterminados). Solo para administradores de la organización.

Parámetros

club `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Actualizar la gobernanza de las skills de agentes para la organización de esta instalación

Actualización parcial: solo cambian los campos indicados; todo lo demás conserva su valor guardado o predeterminado. Solo para administradores de la organización. Las anulaciones por dispositivo se guardan en la fila de registro mediante las rutas de configuración de dispositivos existentes.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Obtener los datos ambientales de una instalación

Devuelve las condiciones meteorológicas actuales, incluidos el amanecer y el atardecer (mediante Open-Meteo), y la temperatura interior de la instalación (de los sensores de Duress) del club especificado. Se almacena en caché en Redis durante 30 minutos.

Parámetros

clubId `string` (obligatorio) ID interno del club o la instalación

Endpoint

GET /api/clubs/{clubId}/environment

Solicitud de ejemplo

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

Respuesta

{}

Agrega o asocia un dispositivo IoT genérico a un club.

Parámetros

club `string` (obligatorio) ID interno del club en el que quieres agregar el dispositivo. body `string` (obligatorio) Objeto JSON de la nueva pantalla que se asociará.

Endpoint

POST /api/devices/addGenericDevice/{club}

Solicitud de ejemplo

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

Respuesta

{}

Quitar una pantalla y restablecerla a la configuración de fábrica

Quita la asociación activa de la pantalla con la instalación y programa un restablecimiento de fábrica persistente. Una pantalla apagada aplica el restablecimiento la próxima vez que se encienda y se vuelva a conectar, y luego vuelve a su página de vinculación HDMI. Los registros de facturación históricos se conservan.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Asocia un controlador de puerta a una instalación.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Actualiza la configuración del controlador de puerta de una instalación.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Retira un controlador de puerta de una instalación.

Parámetros

club `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la configuración de relés de un controlador de puerta.

Parámetros

uuid `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve los metadatos del dispositivo

Parámetros

uuid `string` (obligatorio) ID único del dispositivo

Endpoint

GET /api/devices/metadata/{uuid}

Solicitud de ejemplo

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

Respuesta

{}

Devuelve los metadatos del dispositivo. La respuesta es la fila de metadatos en el nivel superior (formato heredado) más `detectedType` (camera | ai-edge-processor | door-controller | ph-ai-agent | null) y `online` (true si se actualizó en los últimos 5 minutos).

Parámetros

deviceSerialNumber `string` (obligatorio) Número de serie del dispositivo

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve los datos de Smart Club del club.

Parámetros

club_id `string` (obligatorio) ID interno del club en el que quieres agregar el dispositivo.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve todos los dispositivos asociados a un club.

Parámetros

club `string` (obligatorio) ID interno del club cuyos dispositivos quieres ver.

Endpoint

GET /api/devices/list/{club}

Solicitud de ejemplo

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

Respuesta

{}

Devuelve todas las versiones de la aplicación para nuestros dispositivos balena.

Endpoint

GET /api/devices/listReleases

Solicitud de ejemplo

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

Respuesta

{}

Mueve un dispositivo a una nueva instalación (club) y actualiza los sistemas relacionados.

Parámetros

club `string` (obligatorio) ID de la instalación de origen (el club en el que está actualmente el dispositivo) body `object` (obligatorio) Parámetros del traslado

Endpoint

POST /api/devices/move/{club}

Solicitud de ejemplo

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

Respuesta

{}

Intenta establecer una conexión con el router de una instalación seleccionando el mejor dispositivo del club y enviando un comando MQTT para crear un túnel.

Parámetros

facilityID `string` (obligatorio) ID interno de la instalación para la que se intenta la conexión con el router.

Endpoint

GET /api/devices/openRouterWebpage/{facilityID}

Solicitud de ejemplo

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

Respuesta

{}

Catálogo de Cloud Agent (zonas, tamaños, precios de venta en vivo)

Parámetros

club `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Cotizar un Cloud Agent (software + alojamiento)

Endpoint

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

Solicitud de ejemplo

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

Iniciar un Cloud Agent (poner en cola el aprovisionamiento + asociación automática)

Endpoint

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

Solicitud de ejemplo

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

Estado del trabajo de Cloud Agent

Endpoint

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

Solicitud de ejemplo

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

Purgar un Cloud Agent (VM + balena + registro)

Endpoint

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

Solicitud de ejemplo

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

Resolver la eliminación en espera de un Cloud Agent (reintentar la copia de seguridad, eliminar sin copia de seguridad o cancelar)

Endpoint

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

Solicitud de ejemplo

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

Mostrar las Connected Apps de un agente (suites + aplicaciones con cuentas conectadas)

Devuelve el estado de las Connected Apps del agente: el indicador de activación, los resúmenes por suite (Google Workspace, Microsoft 365) y el catálogo seleccionado de aplicaciones con las cuentas conectadas de cada una (varias cuentas: un agente puede tener varias cuentas por aplicación, cada una con un alias opcional), resueltos a partir de la sesión upstream del agente.

Parámetros

facilityId `string` (obligatorio) deviceId `string` (obligatorio) El UUID de balena del dispositivo del agente.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Catálogo completo del marketplace de Connected Apps para un agente

Devuelve todas las aplicaciones que se pueden conectar (el catálogo completo de toolkits con autenticación administrada, almacenado en caché en el servidor durante ~12h) con los niveles de destacadas y suites y las cuentas conectadas del agente por aplicación, además de los resúmenes por suite y las solicitudes de conexión pendientes del agente: un solo payload para el marketplace de aplicaciones, que se puede buscar del lado del cliente.

Parámetros

facilityId `string` (obligatorio) deviceId `string` (obligatorio) El UUID de balena del dispositivo del agente.

Endpoint

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

Solicitud de ejemplo

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"

Respuesta

{}

Descartar una solicitud de conexión pendiente del agente

Marca como descartada la solicitud de conexión pendiente del agente para un toolkit (desaparece de la sección "Requested by your agent" del marketplace). Es idempotente: descartar una solicitud que no está pendiente no tiene efecto.

Parámetros

facilityId `string` (obligatorio) deviceId `string` (obligatorio) El UUID de balena del dispositivo del agente.

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Activar o desactivar las Connected Apps de un agente

Guarda el interruptor de Connected Apps del agente y envía la variable de dispositivo PH_APPS_MCP_ENABLED de Balena solo a ese dispositivo (en la medida de lo posible: el indicador en PH es el control definitivo del relé MCP).

Parámetros

facilityId `string` (obligatorio) deviceId `string` (obligatorio) El UUID de balena del dispositivo del agente.

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Payload de preparación de la conexión de una aplicación (modo, campos de credenciales, guía de configuración)

Todo lo que necesita el cuadro de diálogo de conexión antes de iniciar una conexión: cómo se conecta la aplicación (oauth = flujo de consentimiento alojado, credentials = formulario en el producto), los campos de credenciales que se deben recopilar en el modo credentials y la guía de configuración en el producto (redactada para las aplicaciones prioritarias o, si no, generada a partir de los metadatos de los campos de la aplicación; nunca un enlace a documentación externa). Las aplicaciones OAuth propias del cliente también indican si su aplicación OAuth ya está registrada para ESTE agente (byoConfigured) y la URL de redirección que se debe registrar con el proveedor.

Parámetros

facilityId `string` (obligatorio) deviceId `string` (obligatorio) El UUID de balena del dispositivo del agente. toolkit `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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"

Respuesta

{}

Conectar una aplicación con credenciales proporcionadas por el usuario (clave de API, etc., sin OAuth)

Crea una cuenta conectada para una aplicación en modo credentials directamente desde el formulario del producto, sin flujo de consentimiento alojado. Los campos de credenciales provienen del payload connect-info de la aplicación; se deben proporcionar todos los campos obligatorios. Las credenciales se validan con el proveedor cuando es posible (en la medida de lo posible: algunas aplicaciones solo rechazan una clave incorrecta en la primera llamada a una herramienta del agente). Un alias opcional identifica la cuenta nueva (varias cuentas: conectar una aplicación ya conectada agrega OTRA cuenta).

Parámetros

facilityId `string` (obligatorio) deviceId `string` (obligatorio) El UUID de balena del dispositivo del agente.

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Registrar la aplicación OAuth propia del cliente para una aplicación BYO e iniciar su flujo de conexión

Para las aplicaciones OAuth propias del cliente (Xero, Shopify, ...): toma el ID de cliente y el secreto de cliente de la aplicación OAuth que el cliente creó con el proveedor (siguiendo la guía de configuración de la aplicación), la registra para ESTE agente (el secreto se guarda solo en la plataforma de integración upstream, nunca en Performance Hub) e inicia de inmediato el flujo de inicio de sesión alojado con ella. Devuelve la URL de consentimiento a la que se debe enviar al usuario, con el mismo contrato que el endpoint de conexión. Volver a enviarla reemplaza la aplicación registrada del agente (p. ej., después de rotar el secreto); las cuentas conectadas existentes siguen funcionando.

Parámetros

facilityId `string` (obligatorio) deviceId `string` (obligatorio) El UUID de balena del dispositivo del agente.

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Desconectar una cuenta conectada de un agente

Elimina una sola cuenta conectada (varias cuentas: las demás cuentas de la misma aplicación siguen conectadas). Antes de eliminarla, se valida que la cuenta pertenezca a este agente; si era la ÚLTIMA cuenta de la aplicación, el toolkit se quita del conjunto conectado del agente (la sesión se vuelve a crear de forma diferida para que se actualice la lista de herramientas del agente).

Parámetros

facilityId `string` (obligatorio) deviceId `string` (obligatorio) El UUID de balena del dispositivo del agente.

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Cambiar el nombre (alias) de una de las cuentas conectadas de un agente

Establece el alias visible de una cuenta conectada. Los alias normalmente se establecen de forma automática después de OAuth (a partir de la identidad con la que se inició sesión); este endpoint respalda el cambio de nombre manual en el cuadro de diálogo de detalles de la aplicación. Un alias vacío borra la etiqueta. Antes de la actualización upstream, se valida que la cuenta pertenezca a este agente.

Parámetros

facilityId `string` (obligatorio) deviceId `string` (obligatorio) El UUID de balena del dispositivo del agente.

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Activar o desactivar un servicio integrado de Performance Hub para un agente

Activa o desactiva para este agente un servicio integrado siempre disponible (Smart Search, Weather, ...). Los servicios integrados no necesitan conexión ni OAuth: se incluyen con todos los agentes y están activados de forma predeterminada; este interruptor guarda la anulación por agente y vuelve a crear de inmediato la sesión upstream del agente para que se actualice el conjunto de herramientas. Ten en cuenta que el interruptor independiente "External apps" (la ruta /enable) desactiva por completo todo el servidor MCP de aplicaciones: cuando está desactivado, los servicios integrados tampoco están disponibles, sin importar sus interruptores individuales.

Parámetros

facilityId `string` (obligatorio) deviceId `string` (obligatorio) El UUID de balena del dispositivo del agente. slug `string` (obligatorio) Slug del servicio integrado.

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Asociar un dispositivo de Agente de IA a una instalación

Asociación basada primero en los metadatos. Busca el dispositivo por número de serie en los metadatos de dispositivos en vivo, exige que esté en línea y luego crea de forma diferida la fila de registro, asigna una región de relé Chisel + un puerto de túnel + un secreto, registra ese espacio en el relé y envía la configuración de la instalación y del túnel al dispositivo mediante Balena. Los dispositivos nuevos también reciben una cuenta de servicio MCP predeterminada (activada, limitada a esta instalación, con todas las capacidades); al volver a vincular se conserva cualquier permiso MCP existente. La configuración avanzada opcional anula los valores predeterminados al momento de la vinculación (configuración de copias de seguridad, MCP activado o desactivado, restricción de acceso) y `restoreFrom` inicializa el dispositivo nuevo a partir de la copia de seguridad en la nube de otro dispositivo de la instalación (origen activo o retirado; pone en cola una restauración entre repositorios, que se devuelve como `restoreRequest` para consultar el progreso).

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Mostrar los dispositivos de Agente de IA de una instalación

Devuelve los dispositivos de Agente de IA de la instalación con su estado en línea y de túnel en vivo (lo usa el selector de dispositivos del applet).

Parámetros

club `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Actualización y estado en línea del Agente de IA

Indica si el dispositivo está en línea, si hay una actualización disponible o pendiente, y la versión ofrecida (la versión fijada de la flota si está fijada; la más alta correcta si la flota sigue la más reciente).

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Estado en vivo y métricas del dispositivo de Agente de IA

Devuelve una instantánea seleccionada para la barra de métricas y el panel de administración del applet: campos de identidad y registro, actividad y conexión, versiones de software y las métricas del último heartbeat (CPU, temperatura, memoria, almacenamiento por punto de montaje, tiempo de actividad, red). Combina la baliza de metadatos del dispositivo y el estado de actualización de Balena; cualquiera de las dos partes puede faltar durante una interrupción temporal.

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Explicación generada por IA para el informe de estado del dispositivo

Devuelve una breve explicación para el operador de los problemas de estado detectados actualmente. Los datos y los pasos del procedimiento siempre están en device-status; este párrafo adicional se genera en la medida de lo posible y puede ser null.

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Emitir un token de acceso directo al relé para un Agente de IA

Devuelve una URL firmada de corta duración que el navegador usa para conectarse DIRECTAMENTE al gateway de retransmisión regional del dispositivo (sin pasar por el salto global de PH/Sídney), junto con el token HS256. PH sigue siendo la autoridad (Google SSO + comprobaciones de módulo e instalación aquí); el gateway de retransmisión verifica el token. El proxy /ai-agent-ui sigue siendo la alternativa.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Enviar un mensaje de chat a una sesión del Agente de IA (respuesta directa desde la notificación)

Retransmisión en el servidor que usa la acción de respuesta directa de la notificación web push: el service worker hace un POST aquí (mismo origen, cookies de SSO) para que la respuesta funcione sin ninguna pestaña de Performance Hub abierta. PH resuelve el destino de retransmisión del dispositivo (la misma búsqueda que el proxy /ai-agent-ui), agrega x-ph-user para atribuir el turno (la notificación push de finalización resultante vuelve a este usuario) y lo reenvía al /api/chat/start del dispositivo con el ID de sesión.

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Leer la configuración de control de acceso de un Agente de IA (propietario)

Devuelve el bloque de acceso del dispositivo (modo, lista de permitidos, visibilidad, interruptor de soporte de PH) y las solicitudes de acceso pendientes. Lo puede leer el propietario del dispositivo; los demás usuarios reciben un 403.

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Actualizar la configuración de control de acceso de un Agente de IA (propietario)

Escribe el modo (org/restricted), la lista de permitidos restringida, la visibilidad de la lista (all/admins) y el interruptor "permit access from Performance Hub Support". Permitido para el propietario del dispositivo. El propietario solo se puede cambiar mediante reallocate-owner. Las solicitudes de acceso aprobadas son persistentes: los solicitantes que siguen aprobados se vuelven a agregar a la lista de permitidos guardada; quitar a uno de la lista enviada revoca su aprobación (la solicitud pasa a denegada y puede volver a solicitar acceso).

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Reasignar el propietario de un Agente de IA

Reasigna la propiedad del dispositivo a otro usuario de Performance Hub. Solo para propietarios de la cuenta (acceso al módulo de facturación SaaS): es la vía de escape cuando el propietario de un agente restringido se va. Se notifica tanto al propietario anterior como al nuevo (en la aplicación + push + correo electrónico).

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Lista de usuarios de la instalación para los selectores de lista de permitidos y de propietario del Agente de IA

Devuelve el correo electrónico y el nombre (+ indicadores isOrgAdmin) de cada usuario cuyo rol le da acceso a ESTA instalación. Limitado al propietario del dispositivo y a quienes pueden reasignarlo (propietario de la cuenta), para que los usuarios comunes no puedan enumerar la base de usuarios.

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Solicitar acceso a un Agente de IA restringido

Crea (o vuelve a abrir) la solicitud de acceso del solicitante para un dispositivo restringido; es idempotente por usuario+dispositivo. Se notifica al propietario en la aplicación, por web push y por correo electrónico, con un enlace directo al módulo del agente.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Aprobar o denegar una solicitud de acceso a un Agente de IA (propietario)

Resolución de una solicitud pendiente por parte del propietario del dispositivo. Al aprobarla, el solicitante se agrega a la lista de permitidos del dispositivo; en ambos casos se notifica al solicitante (en la aplicación + push + correo electrónico).

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Permitir y aplicar una actualización del Agente de IA

Fija el dispositivo a la versión ofrecida (la versión fijada de la flota, o la más alta correcta si la flota sigue la más reciente) y libera el bloqueo de actualización para que el supervisor de balena la aplique. El estado del volumen de datos del dispositivo se conserva tras la actualización.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Programar una actualización del Agente de IA para más adelante

Guarda una hora de instalación programada en el registro del dispositivo. Un trabajo recurrente del backend (cada 5 minutos) aplica la actualización (fijación + desbloqueo) una vez que pasa la hora programada. Programarla reemplaza cualquier programación existente del dispositivo.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Cancelar una actualización programada del Agente de IA

Borra la instalación programada pendiente del dispositivo (no tiene efecto si no hay nada programado).

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Ejecutar un comando remoto en un dispositivo de Agente de IA

Publica un comando MQTT permitido (reiniciar, reiniciar un contenedor, bloquear o desbloquear actualizaciones, administración de Wi-Fi) en el device-controller que se ejecuta en el Agente de IA. El dispositivo debe estar asociado a la instalación.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Actualizar la configuración del Agente de IA visible para la instalación

Guarda la configuración editable por el operador de un Agente de IA asociado: el nombre del dispositivo, su ubicación física y la frecuencia de reinicio programado. La programación de reinicio también se envía al dispositivo como la variable de entorno de Balena REBOOT_DEVICE (2 a. m. hora local), igual que el comportamiento de Display Screens.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Instalaciones a las que se puede mover un Agente de IA de esta instalación

Devuelve las instalaciones de la misma organización a las que puede acceder el usuario que inició sesión (excepto la instalación actual), para el selector "Mover a otra instalación". El traslado en sí lo realiza POST /api/devices/move/:club, que aplica en el servidor las mismas reglas de misma organización y de acceso al destino.

Parámetros

club `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

El conjunto de acceso MCP que el solicitante puede conceder a los Agentes de IA de una instalación

Devuelve lo que el usuario que inició sesión puede conceder a una cuenta de servicio MCP de un Agente de IA en la organización de esta instalación: las instalaciones y regiones dentro de su propio acceso, si puede conceder un alcance de toda la organización, el conjunto de módulos que tiene y el catálogo completo de herramientas MCP (para la máscara avanzada por herramienta). La interfaz lo usa para que los usuarios solo vean opciones dentro de sus propios permisos; el endpoint POST de mcp-access aplica la misma atenuación en el servidor.

Parámetros

club `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Obtener la configuración de la cuenta de servicio MCP de un Agente de IA

Devuelve la configuración de acceso MCP del dispositivo (alcance, módulos, máscara de herramientas, campos de auditoría).

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Configurar la cuenta de servicio MCP de un Agente de IA

Guarda la configuración de acceso MCP del dispositivo con atenuación en el momento de la concesión. Los solicitantes solo pueden conceder instalaciones y regiones dentro de su propio acceso, el alcance de organización solo si tienen un rol de toda la organización, y los módulos que ellos mismos tienen en la organización de la instalación. La marca de habilitado también se envía al dispositivo como la variable de entorno de Balena PH_MCP_ENABLED.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Obtener la configuración de VPN de un Agente de IA (con datos ocultos)

Devuelve la marca de compatibilidad con VPN del dispositivo y su lista de conexiones. Nunca se devuelven el contenido de los perfiles ni los valores de las credenciales, solo los metadatos del momento de la importación (remotos, rutas, DNS) y marcas que indican si hay credenciales. El estado en vivo de cada conexión proviene del endpoint de estado del dispositivo (beacon metadata.vpn).

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Activar o desactivar la compatibilidad con VPN de un Agente de IA

Activa o desactiva la función VPN del dispositivo. Envía la variable de dispositivo de Balena PH_VPN_ENABLED y avisa al dispositivo (MQTT vpnConfigChanged); las conexiones se conservan al desactivarla (los túneles se detienen; la configuración se mantiene para volver a activarla).

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Importar perfiles de OpenVPN en un Agente de IA

Acepta cargas codificadas en base64: un solo archivo .ovpn/.conf, paquetes de archivos separados (configuración + certificados/claves) y archivos comprimidos (.zip, exportaciones .tar/.tgz de Pritunl, .tblk de Tunnelblick, .visc/.visz de Viscosity). Los perfiles se normalizan a una forma canónica integrada; cada perfil se convierte en una conexión (se importa desconectada: ingresa las credenciales y luego conéctate). Devuelve errores 400 con indicaciones claras si las cargas no se pueden usar.

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Actualizar una conexión VPN de un Agente de IA (nombre / credenciales / DNS dividido)

Actualiza la conexión guardada. Los campos de credenciales son de solo escritura (si se omiten, se conserva el valor guardado; una cadena vacía lo borra). Los cambios de credenciales o de DNS dividido incrementan la revisión de la conexión, de modo que un túnel activo se reinicia con los nuevos valores.

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Eliminar una conexión VPN de un Agente de IA

Quita la conexión del registro y avisa al dispositivo, que cierra el túnel y borra el perfil y las credenciales que tenía en caché.

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio) connectionId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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"

Respuesta

{}

Conectar o desconectar una conexión VPN de un Agente de IA

Modelo de estado deseado: establece la marca de habilitado de la conexión en el registro y avisa al dispositivo (MQTT vpnConfigChanged sin carga útil); el dispositivo obtiene el estado autorizado mediante su llamada a universal-api autenticada con JWT y ajusta sus túneles. Si se pierde un aviso, el estado converge en la sincronización periódica.

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Obtener la configuración y el estado de la copia de seguridad en la nube de un Agente de IA

Devuelve la configuración de copia de seguridad del dispositivo (habilitada, retención, región de almacenamiento), el estado continuo de las copias (última copia, tamaño, errores), la región automática resuelta y las regiones de almacenamiento disponibles para el selector. La contraseña del repositorio de restic nunca se devuelve.

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Actualizar la configuración de copia de seguridad en la nube de un Agente de IA

Guarda la habilitación, la retención y la región. Se aplica en la siguiente copia de seguridad por hora del dispositivo (el dispositivo pide a PH su contexto de ejecución antes de cada ejecución), por lo que no es necesario reiniciar el dispositivo.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Listar los orígenes de restauración de copias de seguridad para vincular un nuevo Agente de IA

Vista de toda la instalación para la opción "restaurar desde una copia de seguridad" del cuadro de diálogo para agregar un agente: cada registro de la instalación (activo Y dado de baja o reemplazado) que aún tenga un repositorio de copias descifrable y al menos un punto de restauración utilizable, con sus instantáneas más recientes. También devuelve las listas de opciones de configuración de copias (allowedRetentionDays, availableRegions), para que el cuadro de diálogo no necesite el UUID de un dispositivo para llenar sus selectores.

Parámetros

club `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Listar los puntos de restauración de copias de seguridad de un Agente de IA

Devuelve el índice de instantáneas del dispositivo (de la más reciente a la más antigua) desde DynamoDB, sin consultar al dispositivo ni al repositorio, además del estado actual de las solicitudes de copia manual o restauración para el sondeo del panel lateral. Las solicitudes obsoletas (nunca recogidas o sin señal de progreso) se muestran como fallidas, para que la interfaz siempre pueda enviar una nueva.

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Solicitar ahora una copia de seguridad manual de un Agente de IA

Escribe una solicitud de ejecución manual (con la nota del usuario) en la fila del registro y avisa al dispositivo por MQTT. El dispositivo obtiene la solicitud verificada mediante su llamada de contexto de ejecución a universal-api autenticada con JWT; incluso sin MQTT, se recoge en el siguiente ciclo del programador. Se rechaza mientras haya otra copia de seguridad o restauración en curso.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Fijar o desfijar un punto de restauración de un Agente de IA

Los puntos de restauración fijados están protegidos de la depuración por retención: el mantenimiento nocturno del dispositivo recibe los ID de las instantáneas fijadas en su llamada de contexto de ejecución y los excluye de restic forget, y sus filas de índice nunca vencen por TTL. Al desfijar se restablece el comportamiento normal de retención.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Restaurar un Agente de IA desde un punto de restauración de copia de seguridad

Escribe una solicitud de restauración en la fila del registro y avisa al dispositivo. Las restauraciones completas sobrescriben /data y /home/hermeswebui (el dispositivo primero toma una instantánea de seguridad automática previa a la restauración y detiene el agente durante el proceso) y requieren escribir el nombre del dispositivo como confirmación. Si pasas `paths`, se realiza en su lugar una restauración no disruptiva solo de esos archivos o rutas. Opcionalmente, fija el dispositivo a la versión de software de la instantánea una vez que termina la restauración de datos (consulta backup-restore-release).

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Aplicar la versión de software registrada en una restauración completada

Paso final de una restauración que solicitó la versión de software de la instantánea: cuando el dispositivo informa que terminó la restauración de datos, fija el dispositivo a la versión guardada y desbloquea las actualizaciones (con el mismo mecanismo que el endpoint de actualización). Lo activa el sondeo del panel lateral; es idempotente: la versión fijada guardada se borra una vez aplicada.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Explorar archivos dentro de un punto de restauración de copia de seguridad

Lista un nivel de directorio de una instantánea de restic, servido completamente desde el servidor a partir del repositorio de Wasabi (funciona con el dispositivo desconectado). Solo se leen los metadatos del árbol; no se descargan datos de archivos para los listados.

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio) takenAt `number` (obligatorio) path `string` (opcional)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Buscar nombres de archivo dentro de un punto de restauración de copia de seguridad

Búsqueda de nombres de archivo sin distinguir mayúsculas y minúsculas desde un directorio hacia abajo, servida desde el servidor a partir de los metadatos del árbol de restic (no se leen datos de archivos; funciona con el dispositivo desconectado). Transmite el listado y se detiene en las primeras 200 coincidencias.

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio) takenAt `number` (obligatorio) q `string` (obligatorio) path `string` (opcional)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Qué cambió entre dos puntos de restauración de copia de seguridad

Ejecuta en el servidor un restic diff entre dos instantáneas del dispositivo (solo metadatos del árbol) y devuelve la lista de archivos agregados, eliminados y modificados (hasta 500 cambios) junto con estadísticas de resumen. Los resultados se guardan en caché, ya que las instantáneas son inmutables.

Parámetros

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

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Historial de versiones de un archivo en todos los puntos de restauración

Un único restic find en el servidor sobre todas las instantáneas del repositorio del dispositivo, agrupado en versiones DISTINTAS (se combinan las coincidencias consecutivas con el mismo tamaño y mtime) y unido a las filas del índice de instantáneas para obtener fechas, tipos y notas.

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio) path `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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"

Respuesta

{}

Buscar por nombre de archivo en todos los puntos de restauración de las copias de seguridad de un dispositivo

La vía para recuperar archivos eliminados: un único restic find en el servidor sobre TODAS las instantáneas del repositorio (sin distinguir mayúsculas y minúsculas, por subcadena o patrón glob), agrupado por ruta con los puntos de restauración en los que aparece cada archivo. Un archivo eliminado del dispositivo se puede encontrar aquí mientras algún punto de restauración lo contenga.

Parámetros

club `string` (obligatorio) uuid `string` (obligatorio) q `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Descargar un solo archivo de un punto de restauración de copia de seguridad

Transmite un archivo directamente desde el repositorio de restic al navegador (como adjunto). Los directorios se transmiten como un archivo tar. Tiene un límite de tamaño y se sirve desde el servidor, por lo que funciona con el dispositivo desconectado.

Parámetros

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

Endpoint

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

Solicitud de ejemplo

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"

Respuesta

{}

Dar de baja un Agente de IA de una instalación

Parámetros

club `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Quitar un Agente de IA de una instalación y restablecer el hardware a la configuración de fábrica

Desvincula por completo el dispositivo para que pueda vincularse en CUALQUIER instalación y borra todos los datos del NUC. El borrado se prepara mediante la variable de dispositivo de Balena PH_FACTORY_RESET (un nonce de un solo uso) ANTES del desmontaje en la nube, de modo que se mantiene aunque el dispositivo esté desconectado al quitarlo: el borrado se ejecuta la próxima vez que se conecte. Un aviso MQTT factoryReset hace que el caso en línea sea inmediato. Después, el desmontaje en la nube revoca todas las credenciales y concesiones, elimina la vinculación de la instalación en Balena (variables del dispositivo + etiqueta de la instalación) y el clubID de los metadatos, y elimina las solicitudes de acceso y el registro DNS de la LAN. Las copias de seguridad en la nube se CONSERVAN: el índice de instantáneas y la contraseña del repositorio permanecen en el registro con eliminación lógica y pueden usarse como origen de restauración al agregar un reemplazo. Requiere escribir el nombre del dispositivo como confirmación.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Reemplazar un Agente de IA averiado por un nuevo NUC (recuperación ante desastres)

Reemplazo del dispositivo en un solo paso: asocia el NUC de reemplazo (ranura de túnel, secretos, variables de Balena, semilla de copia de seguridad), traslada el nombre, la ubicación, la programación de reinicio, la configuración de copias, el bloqueo de acceso y la concesión MCP del dispositivo anterior, vuelve a asignar el índice de instantáneas anterior al nuevo dispositivo (para que todo su historial de copias se pueda seguir explorando), da de baja el registro anterior (marcado con replacedBy / replacedFrom) y, salvo que `restore` sea false, pone en cola una restauración completa del punto de restauración elegido desde el repositorio de copias del dispositivo ANTERIOR al nuevo hardware. Funciona aunque el dispositivo anterior esté averiado o desconectado; requiere escribir el nombre del dispositivo anterior como confirmación. Solo dentro de la misma instalación.

Parámetros

club `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Resuelve un enlace corto de código QR de un dispositivo de Performance Hub al enlace profundo al que apunta, para que el escáner de Agregar dispositivo pueda detectar el tipo de dispositivo. Solo se siguen los hosts de performancehub.co.

Parámetros

url `string` (obligatorio) El enlace corto escaneado

Endpoint

GET /api/devices/resolve-qr

Solicitud de ejemplo

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

Respuesta

{}

Prueba la conectividad con el controlador UniFi de una instalación y si las credenciales son correctas.

Parámetros

facilityID `string` (obligatorio) ID interno de la instalación con la que quieres probar la conectividad de UniFi

Endpoint

GET /api/devices/testUnifiController/{facilityID}

Solicitud de ejemplo

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

Respuesta

{}

Actualiza un dispositivo IoT genérico de una instalación.

Parámetros

club `string` (obligatorio) ID interno de la instalación cuyo dispositivo quieres actualizar. body `string` (obligatorio) Objeto JSON con los parámetros de actualización.

Endpoint

PUT /api/devices/updateGenericDevice/{club}

Solicitud de ejemplo

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

Respuesta

{}

Muestra la cantidad de acuerdos pendientes que requieren acción según el usuario y los clubes asociados a él

Endpoint

GET /api/agreements/agreements-outstanding

Solicitud de ejemplo

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

Respuesta

{}

Muestra todos los acuerdos disponibles para un club

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. contracts-sort `string` (opcional) Ordena los acuerdos por date-effective o alphabetical. El valor predeterminado es date-effective. contracts-acknowledgement `string` (opcional) Filtra los acuerdos por all, acknowledged o unacknowledged. El valor predeterminado es all. contracts-requirement `string` (opcional) Filtra los acuerdos por all, signature, checkbox, popup o none. El valor predeterminado es all. contracts-status `string` (opcional) Filtra los acuerdos por all, active o archived. El valor predeterminado es all.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Firma un acuerdo según su ID.

Parámetros

club `string` (obligatorio) ID interno del club que firma el acuerdo. agreementid `string` (obligatorio) ID del acuerdo que se está firmando. body `string` (obligatorio) Objeto JSON con el acuerdo y los parámetros que se agregarán o cargarán al sistema...

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Resumen de Model Router de la instalación (configuración, saldo, gasto).

Parámetros

clubID `string` (obligatorio) tz `string` (opcional) Zona horaria IANA del usuario; se usa para los períodos de gasto diarios y mensuales cuando la instalación no tiene datos de zona horaria.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Catálogo de modelos disponibles con su estado de activación por instalación (todos activados de forma predeterminada).

Parámetros

clubID `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Barreras de protección disponibles y plantillas predefinidas de PH.

Parámetros

clubID `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Servicios conectados de Model Router. Incluye los dispositivos de Agente de IA vinculados, los agentes externos con tipo explícito y el servicio Workflow de la instalación. La configuración se edita mediante PATCH /keys/{keyHash}.

Parámetros

clubID `string` (obligatorio) tz `string` (opcional) Zona horaria IANA del usuario; se usa para los períodos de gasto diarios y mensuales cuando la instalación no tiene datos de zona horaria.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Activa Model Router para una instalación y aprovisiona su acceso de inferencia.

Parámetros

clubID `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Actualiza el plan, la lista de modelos permitidos, las barreras de protección, los filtros de contenido (ocultación o bloqueo mediante regex en PH), el límite de gasto y la configuración de recarga automática.

Parámetros

clubID `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Restablece a 0 el contador del límite estricto total (toma el gasto actual como nueva base) y registra el período cerrado en el historial.

Parámetros

clubID `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Historial de restablecimientos del límite estricto (los más recientes primero): límite, gasto y marcas de tiempo de cada período cerrado.

Parámetros

clubID `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Crea una nueva clave de API phk_ para la instalación (el texto sin cifrar se devuelve una sola vez). Acepta límites de gasto, lista de modelos permitidos, barreras de protección, filtros de contenido y límites de frecuencia rpmLimit/tpmLimit opcionales.

Parámetros

clubID `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Actualiza los campos editables de la clave: etiqueta, límites de gasto por clave, lista de modelos permitidos, barreras de protección, filtros de contenido y límites de frecuencia rpmLimit/tpmLimit (sincronizados con la clave).

Parámetros

clubID `string` (obligatorio) keyHash `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Registros de inferencia por solicitud de la instalación (en vivo, solo metadatos).

Parámetros

clubID `string` (obligatorio) page `string` (opcional) pageSize `string` (opcional) status `string` (opcional) model `string` (opcional) provider `string` (opcional) source `string` (opcional) `key` o `agent` keyHash `string` (opcional) Filtra por una sola clave o agente según su keyHash de PH. q `string` (opcional) Búsqueda de texto libre en el ID de solicitud, la etiqueta de la clave o el agente, el modelo, el proveedor y el usuario final. minutes `string` (opcional) Período inferior a un día (p. ej., Live=1440); anula startDate/endDate. startTs `string` (opcional) Inicio del período en segundos epoch (clic para ampliar); anula los minutos y las fechas. endTs `string` (opcional) Fin del período en segundos epoch (clic para ampliar); anula los minutos y las fechas.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Histograma de solicitudes a lo largo del tiempo para la vista de registros. Usa los mismos filtros que la ruta de la lista, pero agregados en el servidor en intervalos de tiempo (recuentos de éxitos y errores), por lo que la respuesta es muy pequeña sin importar el volumen de registros. El tamaño del intervalo se elige automáticamente según el período.

Parámetros

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

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Intervalos de análisis de uso + totales por modelo para un rango (en vivo).

Parámetros

clubID `string` (obligatorio) range `string` (opcional) 24h | 7 | 30 | 90 | year | all (se ignora si se indican startDate/endDate) startDate `string` (opcional) endDate `string` (opcional) groupBy `string` (opcional) model (predeterminado) | key | source | provider | status: dimensión para los intervalos y los grupos subgroupBy `string` (opcional) segunda dimensión opcional anidada en cada grupo (Explore) keyHash `string` (opcional) filtro de análisis detallado: limita a una sola clave o agente model `string` (opcional) filtro de análisis detallado: limita a un solo modelo provider `string` (opcional) source `string` (opcional) compare `string` (opcional) establécelo en "prev" para devolver también groupsPrev (el período inmediatamente anterior de igual duración)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Calendario de actividad diaria del último año móvil (estilo GitHub, unas 53 semanas).

Parámetros

clubID `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Cobra a la tarjeta de facturación SaaS guardada para agregar crédito prepago de Model Router.

Parámetros

clubID `string` (obligatorio) body `object` (opcional)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Finaliza una recarga después de que el applet completa la autenticación 3DS.

Parámetros

clubID `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Resumen de la tarjeta de facturación SaaS guardada a la que se cobrarán las recargas y la recarga automática.

Parámetros

clubID `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Transacciones del libro contable de la instalación, las más recientes primero. Opcionalmente filtradas por tipo (p. ej., `types=topup,adjustment` para el historial de movimientos de dinero, o `types=charge-reconcile` con `from`/`to` para los descuentos por uso de un mes).

Parámetros

clubID `string` (obligatorio) limit `integer` (opcional) Máximo de filas (50 de forma predeterminada, máximo 200) types `string` (opcional) Tipos de transacción separados por comas (topup, charge-reconcile, refund, adjustment, trueup-shortfall) from `integer` (opcional) Solo las transacciones con createdAt >= from (segundos unix) to `integer` (opcional) Solo las transacciones con createdAt <= to (segundos unix)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Meses `YYYY-MM` distintos (UTC, los más recientes primero) que contienen al menos una transacción de los tipos solicitados. Alimenta los menús desplegables de filtro de año y mes para que la interfaz solo ofrezca períodos que realmente tienen datos.

Parámetros

clubID `string` (obligatorio) types `string` (opcional) Tipos de transacción separados por comas (topup, charge-reconcile, refund, adjustment, trueup-shortfall)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Recibo de pago en PDF con la marca para una sola transacción de Model Router.

Parámetros

clubID `string` (obligatorio) txId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Paquete ZIP de recibos de pago en PDF con la marca para las transacciones de recarga seleccionadas. Cada ID debe ser una recarga de la instalación: los descuentos por uso y los ajustes administrativos no tienen recibos y se rechazan.

Parámetros

clubID `string` (obligatorio) ids `string` (obligatorio) IDs de transacción separados por comas (máximo 50)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Resúmenes por mes calendario (UTC) de los descuentos por uso de la instalación, los más recientes primero. El mes actual siempre se incluye y se marca con `isCurrentMonth` (lo que va del mes).

Parámetros

clubID `string` (obligatorio) months `integer` (opcional) Período retrospectivo en meses (12 de forma predeterminada, máximo 24; se ignora si se establece `year`) year `integer` (opcional) Limita los resúmenes a un año calendario UTC (p. ej., 2026)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Estado de uso mensual en PDF con la marca: un resumen de los descuentos por uso del mes (subtotales diarios + total). Expresamente no es una factura ni un recibo; los descuentos por uso no cobran ningún pago.

Parámetros

clubID `string` (obligatorio) month `string` (obligatorio) Mes calendario UTC, `YYYY-MM`

Endpoint

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

Solicitud de ejemplo

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"

Respuesta

{}

Partidas sin procesar de los descuentos por uso de un mes en CSV (ID de transacción, marca de tiempo UTC, importe, saldo posterior, gasto total en ese momento): la exportación detallada que concilia con el total del estado del mes.

Parámetros

clubID `string` (obligatorio) month `string` (obligatorio) Mes calendario UTC, `YYYY-MM`

Endpoint

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

Solicitud de ejemplo

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"

Respuesta

{}

Resumen de uso y gasto de la instalación (en vivo más el libro contable conciliado).

Parámetros

clubID `string` (obligatorio) tz `string` (opcional) Zona horaria IANA del usuario; se usa para los períodos de gasto diarios y mensuales cuando la instalación no tiene datos de zona horaria.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Asocia un dispositivo AI Edge Processor a un club o actualiza la asociación

Parámetros

body `string` (obligatorio) Objeto JSON para actualizar el registro del dispositivo AI Edge Processor.

Endpoint

POST /api/ai-edge-processor/devices

Solicitud de ejemplo

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

Respuesta

{}

Asocia un dispositivo AI Edge Processor a un club. Resuelve el dispositivo priorizando los metadatos (prevalece el heartbeat en vivo), completa la fila de registro si el dispositivo nunca se registró por sí mismo y limpia las filas de registro obsoletas que dejó el hardware reaprovisionado.

Parámetros

body `string` (obligatorio) Objeto JSON para actualizar el registro del dispositivo AI Edge Processor.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una lista de los registros de carga de bbox de un club

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Índice de búsqueda de la base de datos de cámaras

Hace de proxy del índice de búsqueda público camera-db de la documentación (fabricantes, series, modelos, alias) que usa el cuadro de diálogo Find my camera al agregar cámaras de red. Se almacena en caché en el servidor durante 12 horas.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Plantillas de fabricantes de la base de datos de cámaras

Hace de proxy de las plantillas de URL RTSP y los valores predeterminados de un fabricante desde la base de datos pública de cámaras de la documentación. El slug se valida para evitar el path traversal. Se almacena en caché en el servidor durante 12 horas.

Parámetros

slug `string` (obligatorio) Slug del fabricante (p. ej., hikvision)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una lista de los datos de registros de entrada de una instalación

Parámetros

club `string` (obligatorio) ID interno del club o la instalación a la que quieres acceder. startDate `string` (opcional) Fecha de inicio en formato YYYY-MM-DD endDate `string` (opcional) Fecha de finalización en formato YYYY-MM-DD timezone `string` (opcional) Zona horaria para interpretar las fechas (Australia/Brisbane de forma predeterminada) nextToken `string` (opcional) Token de paginación para obtener la página siguiente

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Recuperar la configuración del frontend o la interfaz del CCTV

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/cctv/config/:club

Solicitud de ejemplo

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

Respuesta

{}

Obtener la configuración de entrega de contenido del CCTV

Devuelve el dominio de contenido que usan los clientes del CCTV para resolver los recursos multimedia. El dominio lo define la variable de entorno CONTENT_DOMAIN o, en su defecto, un valor predeterminado según la etapa (producción sirve /cctv y las demás etapas sirven /cctv-stg).

Endpoint

GET /api/cctv/content-config

Solicitud de ejemplo

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

Respuesta

{}

Cambiar la configuración del frontend o la interfaz del CCTV

Parámetros

body `object` (obligatorio) Objeto JSON del nuevo bloque de configuración que se agregará al sistema.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una lista de la disponibilidad de regiones de bucket para la configuración del proveedor de almacenamiento del CCTV

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Restablecer la colección de rostros no identificados

Restablece la colección de CompreFace de rostros no identificados de la instalación eliminando todos los sujetos. Los registros de personas de DynamoDB, las detecciones de rostros y los bloques de la línea de tiempo de OpenSearch NO se ven afectados. Solo se borran los datos de reconocimiento facial subyacentes. Se crearán perfiles provisionales nuevos automáticamente a medida que el sistema procese nuevas detecciones de las cámaras.

Parámetros

facilityId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Obtener información de la colección de no identificados

Devuelve la cantidad actual de sujetos de la colección de CompreFace de rostros no identificados de la instalación.

Parámetros

facilityId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Agrega una cámara de red (cámara OEM/IP) mediante la URL de transmisión (RTSP, HTTP, HTTPS)

Parámetros

body `string` (obligatorio) Objeto JSON para agregar una cámara de red.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Agregar cámaras de red de forma masiva a un Edge Processor

Registra varias cámaras de red RTSP/HTTP en un Edge Processor y luego envía FEED_CONFIG una sola vez para que el dispositivo vuelva a cargar la configuración solo una vez.

Parámetros

body `object` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Asocia un dispositivo a un club o actualiza la asociación

Parámetros

body `string` (obligatorio) Objeto JSON para actualizar el registro del dispositivo de CCTV.

Endpoint

POST /api/cctv/devices

Solicitud de ejemplo

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

Respuesta

{}

Asocia un dispositivo a un club

Parámetros

body `string` (obligatorio) Objeto JSON para actualizar el registro del dispositivo de CCTV.

Endpoint

POST /api/cctv/devices/associate

Solicitud de ejemplo

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

Respuesta

{}

Envía una solicitud MQTT a un UUID de dispositivo específico y espera una respuesta (mediante websocket) con las capacidades disponibles de la cámara.

Parámetros

club `string` (obligatorio) ID interno del club propietario del dispositivo que consultas. body `string` (obligatorio) Objeto JSON con los parámetros de actualización.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Mostrar los registros de dispositivos

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/cctv/devices/:club

Solicitud de ejemplo

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

Respuesta

{}

Quita una cámara de red marcándola como eliminada y retirándola del FEED_CONFIG del Edge Processor

Parámetros

club `string` (obligatorio) ID interno del club propietario del dispositivo. balenaUUID `string` (obligatorio) UUID de la cámara de red que se quitará.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Guarda todas las capacidades de cámara configuradas y las aplica al dispositivo como variable de entorno (mediante balena)

Parámetros

club `string` (obligatorio) ID interno del club propietario del dispositivo que consultas. body `string` (obligatorio) Objeto JSON con los parámetros de actualización.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Guarda una máscara de movimiento (si está configurada) para la cámara y la aplica al dispositivo como variable de entorno (mediante balena)

Parámetros

club `string` (obligatorio) ID interno del club propietario del dispositivo que consultas. body `string` (obligatorio) Objeto JSON de la máscara de la cámara.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Envía un comando v4l2 específico (como brillo o contraste) al dispositivo físico

Parámetros

club `string` (obligatorio) ID interno del club propietario del dispositivo que consultas. body `string` (obligatorio) Objeto JSON con los parámetros de actualización.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Probar la URL de transmisión de una cámara de red

Envía un comando de prueba a un Edge Processor para validar la URL de transmisión de una cámara con ffprobe

Cuerpo de la solicitud

Endpoint

POST /api/cctv/devices/test-stream

Solicitud de ejemplo

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

Respuesta

{}

Elimina de forma permanente un registro de detección de rostro de la base de datos. Se usa para quitar entradas de seguimiento incorrectas o que no coinciden del registro de actividad de una persona.

Parámetros

club `string` (obligatorio) fdID `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una lista de los datos de detecciones de rostro de una persona

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. personID `string` (obligatorio) ID de la persona en el sistema de identificación facial

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve las detecciones de rostro que hacen referencia a una imagen recortada de persona determinada, consultadas mediante el GSI personCropImage.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. personCropImage `string` (obligatorio) URL de la imagen recortada de la persona guardada en el registro de detección de rostro. limit `string` (opcional) Cantidad máxima de detecciones que se devolverán. nextToken `string` (opcional) Token de paginación de una respuesta anterior.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una lista de los datos de detecciones de rostro de un club agrupados por rango en relación con la hora actual

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una lista de los datos de detecciones de rostro de un club

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Buscar bloques de la línea de tiempo de detecciones de rostro en una instalación con OpenSearch

Parámetros

facilityId `string` (obligatorio) ID interno de la instalación en la que se buscará timezone `string` (obligatorio) Zona horaria IANA para la conversión de fechas (p. ej., Pacific/Auckland) startDate `string` (opcional) Filtro de fecha de inicio (YYYY-MM-DD), convertido a startUnix según la zona horaria endDate `string` (opcional) Filtro de fecha de finalización (YYYY-MM-DD), convertido a endUnix según la zona horaria personId `string` (opcional) Filtrar por un ID de persona específico query `string` (opcional) Búsqueda de texto libre (p. ej., el nombre de la persona) limit `string` (opcional) Resultados por página (20 de forma predeterminada, máximo 100) filters `string` (opcional) Objeto de filtros codificado en JSON (p. ej., {"matchType":"identified"}) sortBy `string` (opcional) Campo por el que se ordena (startUnix, endUnix, created). El valor predeterminado es endUnix. page `string` (opcional) Número de página para la paginación (1 de forma predeterminada) sortOrder `string` (opcional) Dirección del orden (asc o desc). El valor predeterminado es desc.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una lista de informes sobre la instalación del club

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Inicia la generación de mapas de calor a pedido. Invoca la misma lógica Starter que usa el cron programado, pero permite elegir una instalación, una fecha y hora y un conjunto de períodos específicos. Si se llama sin cuerpo, se comporta exactamente igual que el cron: analiza todas las instalaciones aptas y pone en cola todos los dispositivos.

Cuerpo de la solicitud

Endpoint

POST /api/cctv/heatmaps/generate

Solicitud de ejemplo

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

Respuesta

{}

Resuelve la ubicación de un PNG de mapa de calor compuesto de período móvil para un solo dispositivo. Solo devuelve metadatos JSON: los bytes del PNG están en el dominio de contenido y el frontend construye la URL así: `${contentDomain}/cctv/${storageService}/${region}/${filePath}?s=${token}` Orden de resolución: 1. Coincidencia en el índice `composed#…` de DynamoDB → se devuelve de inmediato (~10 ms). 2. HEAD de Wasabi sobre la clave de caché determinista. Si hay coincidencia, se escribe una fila de índice de relleno y se devuelve. 3. Respaldo obsoleto: existe algún registro compuesto para esta tupla (dispositivo, rango, hora), aunque sea de otra fecha. Se devuelve de inmediato con `cache: 'HIT-STALE'` para que el FE pueda mostrar *algo*. Se inicia una composición nueva de forma asíncrona. 4. Ruta en frío: no existe ningún registro. La Lambda de composición se pone en cola mediante `InvocationType: 'Event'` y el endpoint devuelve `202 { cache: 'PENDING' }`. El FE consulta periódicamente hasta que aparece un registro (normalmente entre 3 y 5 segundos). Manejo del día actual: cuando `endDate` es el "hoy" local de la instalación, el endpoint sirve el PNG de ayer: el cron Starter todavía está escribiendo los segmentos de hoy y una composición nueva quedaría incompleta. La respuesta repite el `endDate` solicitado e incluye `endDateUsed` (= ayer). Enum `cache`: - `HIT`: servido desde el índice de DDB para la fecha solicitada. - `HIT-FALLBACK`: se solicitó hoy; se sirvió la fila de índice de ayer. - `HIT-BACKFILL`: no estaba en DDB, pero Wasabi tenía el PNG; la fila se acaba de escribir. - `HIT-FALLBACK-BACKFILL`: relleno sobre el respaldo de ayer. - `HIT-STALE`: no hay registro para la fecha solicitada, pero existe un registro de otra fecha para esta tupla; se sirve de inmediato y se pone en cola una composición nueva en segundo plano. - `PENDING`: no hay ningún registro; se puso en cola la composición. El FE debe consultar periódicamente. La respuesta es `202 Accepted`, sin `filePath`.

Parámetros

facilityId `string` (obligatorio) deviceUUID `string` (obligatorio) Dispositivo para el que se compone. Las composiciones son por dispositivo. hour `integer` (obligatorio) Hora del día (0–23) que se compondrá a lo largo del período retrospectivo. endDate `string` (opcional) Última fecha del período (YYYY-MM-DD). De forma predeterminada, hoy (zona horaria de la instalación). range `string` (opcional) Período retrospectivo. Debe ser uno de los rangos permitidos. nocache `integer` (opcional) Establécelo en `1` para omitir las capas de caché DDB + HEAD y forzar una composición nueva.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Descubre qué horas del día tienen registros de segmentos `1h` para un dispositivo en un período retrospectivo móvil. El frontend lo usa para completar el selector de hora junto con un selector de fecha + rango antes de llamar al endpoint de composición (`/api/cctv/heatmaps/hourly/...`). Ejemplo: `GET /api/cctv/heatmaps/query-hourly/Birkdale?deviceUUID=abc123&endDate=2026-04-16&range=30d` Internamente: una consulta de rango de DynamoDB sobre `cctvheatmaps` (`sk BETWEEN 1h#{start}-00 AND 1h#{end}-23`), agrupada por hora. Devuelve una entrada por cada hora que tiene al menos un segmento, incluida una imagen JPEG de referencia representativa (tomada del día más reciente del período: la referencia es compartida por dispositivo y por día).

Parámetros

facilityId `string` (obligatorio) deviceUUID `string` (obligatorio) Dispositivo que se consultará. Los segmentos por hora son por dispositivo. endDate `string` (opcional) Última fecha del período (YYYY-MM-DD). De forma predeterminada, hoy (zona horaria de la instalación). range `string` (opcional) Período retrospectivo. Debe ser uno de los rangos permitidos.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Consulta los registros de mapas de calor generados previamente para una instalación. **Todos los registros de un tipo de período:** - `/api/cctv/heatmaps/Birkdale?periodType=1y` - `/api/cctv/heatmaps/Birkdale?deviceUUID=abc123&periodType=1d` **Rango de fechas, un solo tipo de período:** - `/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` **Rango de fechas, todos los tipos de período aplicables (omite periodType):** - `/api/cctv/heatmaps/Birkdale?from=2026-03-01&to=2026-03-31` Devuelve los registros anuales, semestrales, trimestrales, etc., hasta los de 6h, que se superponen con el rango indicado. **Momento específico, los 9 tipos de período de un dispositivo:** - `/api/cctv/heatmaps/Birkdale?deviceUUID=abc123&date=2026-03-15T14:30` Devuelve hasta 9 registros (1y, 6m, 3m, 2m, 1m, 1w, 1d, 12h, 6h).

Parámetros

facilityId `string` (obligatorio) El identificador de la instalación. deviceUUID `string` (opcional) Consulta un dispositivo específico. Si se omite, consulta todos los dispositivos (GSI). periodType `string` (opcional) Filtra por un solo tipo de período. Si se omite junto con from/to, consulta todos los tipos. from `string` (opcional) Fecha de inicio (yyyy-mm-dd). Debe usarse con `to`. to `string` (opcional) Fecha de finalización (yyyy-mm-dd). Debe usarse con `from`. date `string` (opcional) Búsqueda de un momento específico (yyyy-mm-dd o yyyy-mm-ddTHH:mm). Requiere deviceUUID. Devuelve un registro por tipo de período.

Endpoint

GET /api/cctv/heatmaps/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Obtener la miniatura de la transmisión en vivo del dispositivo

Parámetros

club `string` (obligatorio) ID interno del club. deviceId `string` (obligatorio) ID interno del dispositivo de CCTV.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Indicar al sistema de CCTV que vas a ver una transmisión en vivo

Parámetros

club `string` (obligatorio) ID interno del club. deviceId `string` (obligatorio) ID interno del dispositivo de CCTV.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Aprobar una coincidencia de intersección

Establece el estado de la coincidencia en confirmado y registra al revisor.

Parámetros

club `string` (obligatorio) matchId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Obtener una coincidencia de intersección con los detalles de la visita

Devuelve el registro de la coincidencia y su desglose de tiempos por visita.

Parámetros

club `string` (obligatorio) matchId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Mostrar las coincidencias de intersección de una instalación

Devuelve las coincidencias paginadas y filtradas por estado.

Parámetros

club `string` (obligatorio) status `string` (opcional) limit `integer` (opcional) nextToken `string` (opcional)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Rechazar una coincidencia de intersección

Establece el estado de la coincidencia en rechazado y registra al revisor.

Parámetros

club `string` (obligatorio) matchId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Obtener los recuentos resumidos de coincidencias de intersección

Devuelve los recuentos de coincidencias de la instalación agrupados por estado.

Parámetros

club `string` (obligatorio) ID de la instalación

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Lee el estado de una operación "upsert identified person" en curso (incluye creación y edición). Lee la fila directamente de la tabla `people-ops`, propiedad de cctv-rekognition-api, sin pasar por una Lambda. Lo usa el frontend del CCTV para consultar el progreso después de POST /api/cctv/people/{facility}/identified. La ruta está al mismo nivel que `/cctv/people/...` (no anidada debajo) para que el router de express no confunda `operationId` con `:personID` en `/cctv/people/:club/:personID`. Consulta el orden de los globs en createAPIRouter. Devuelve un marcador `pending` mientras la Lambda upsertIdentifiedPerson todavía no escribió su primera entrada de etapa (período de arranque en frío). El hook de consulta del FE trata el marcador y pending de la misma forma, por lo que el contrato se mantiene estable para quienes llaman.

Parámetros

operationId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Agrega una imagen de rostro (de una detección de seguimiento existente) al sujeto de reconocimiento de CompreFace de la persona y guarda una referencia en la tabla de fotos provisionales. NO carga la imagen en Wasabi: ya está allí como captura de detección de rostro.

Parámetros

club `string` (obligatorio) personID `string` (obligatorio) body `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Agregar fotos provisionales al registro de una persona

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. personID `string` (obligatorio) ID de registro de la persona body `string` (obligatorio) Objeto JSON del nuevo bloque de configuración que se agregará al sistema.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Consultar las fotos provisionales de una persona

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. personID `string` (obligatorio) ID de registro de la persona

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Elimina de forma permanente un registro de foto provisional de CCTVShadowPhotosTable y quita el rostro correspondiente de CompreFace (si se guardó faceId).

Parámetros

club `string` (obligatorio) personID `string` (obligatorio) id `string` (obligatorio) El ID del registro de foto provisional (clave principal)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Elimina las referencias y los registros de rekognition asociados según un personID

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. personID `string` (obligatorio) ID único de la persona en el CCTV.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve el registro de una persona de un club

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. personID `string` (obligatorio) ID de la persona en la base de datos.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Obtener las zonas de acceso que coinciden con el perfil de membresía de una persona

Resuelve el tipo de miembro, las etiquetas y los planes de membresía de la persona y luego devuelve las zonas de acceso reales (origin=membership-plan, no absorbidas) que coinciden con las reglas de inclusión y exclusión. El accessRestriction de cada zona se reduce solo a las reglas que coincidieron con la persona. Las cámaras de las zonas secundarias se combinan con las zonas principales.

Parámetros

club `string` (obligatorio) ID interno de la instalación personID `string` (obligatorio) ID de la persona en la tabla de personas del CCTV

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve el estado actual de un trabajo de combinación, incluidos los resultados por origen. Consulta este endpoint cada 3 a 5 segundos mientras el estado sea IN_PROGRESS.

Parámetros

club `string` (obligatorio) mergeJobID `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Inicia en segundo plano la combinación de varios perfiles de personas no identificadas en uno solo que se conserva. Responde 202 de inmediato con un mergeJobID. Consulta /merge-status/:mergeJobID para ver el progreso.

Parámetros

club `string` (obligatorio) body `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Agregar un rostro a la colección de la lista negra de una instalación

Parámetros

facilityId `string` (obligatorio) ID interno de la instalación

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Crea o actualiza una persona identificada en una instalación: crea un registro nuevo o actualiza uno existente. Hace de proxy a la Lambda upsertIdentifiedPerson, que escribe el registro de la persona, carga en Wasabi la foto que se haya proporcionado y vuelve a indexar el rostro en CompreFace. Cuando `isNewRecord` es true (predeterminado), la Lambda ejecuta la rama de creación (cctvPeople.save) y se genera un `personID` si no se proporciona. Cuando `isNewRecord` es false, la Lambda ejecuta la rama de actualización (cctvPeople.update): `personID` es obligatorio y debe identificar un registro existente.

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Actualiza el conjunto de campos opcionales de socios que se sincronizan con la tabla de personas del CCTV de una instalación.

Parámetros

facilityId `string` (obligatorio) ID interno de la instalación

Cuerpo de la solicitud

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una lista de los datos de personas de un club

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/cctv/people/:club

Solicitud de ejemplo

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

Respuesta

{}

Busca personas en una instalación a partir de una imagen de rostro. Invoca la Lambda imageFaceSearch de cctv-rekognition-api con la imagen base64 cargada y el ID de la instalación de la ruta. Devuelve las coincidencias ordenadas por relevancia y un resumen de atributos de DeepFace.

Parámetros

club `string` (obligatorio) ID de la instalación o del club body `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Buscar personas en una instalación con OpenSearch

Parámetros

facilityId `string` (obligatorio) ID interno de la instalación en la que se buscará query `string` (opcional) Término de búsqueda (p. ej., nombre) page `string` (opcional) Número de página (1 de forma predeterminada) limit `string` (opcional) Resultados por página (20 de forma predeterminada, máximo 100) filters `string` (opcional) Objeto de filtros codificado en JSON (p. ej., {"membershipStatus":"active"}) sortBy `string` (opcional) Campo por el que se ordena (created, lastName, firstName, membershipUpdatedOn). El valor predeterminado es created. sortOrder `string` (opcional) Dirección del orden (asc o desc). El valor predeterminado es desc.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Actualiza los elementos de detección de rostros con un personID nuevo y asocia los registros de rekognition

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. body `string` (obligatorio) Objeto JSON del nuevo bloque de configuración que se agregará al sistema.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve un objeto con todos los filtros disponibles para los datos de grabaciones del CCTV de un club

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Transmitir la grabación.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Actualizar la información de la grabación.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve un resumen de los datos de grabaciones del CCTV de un club

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una lista de los datos de grabaciones del CCTV de un club según un rango relativo a la hora actual

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una lista de los datos de grabaciones del CCTV de un club

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/cctv/recordings/:club

Solicitud de ejemplo

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

Respuesta

{}

Las grabaciones se eliminan automáticamente después de un período establecido; usa esta función para conservarlas

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Buscar instantáneas de informes de una instalación dentro de un rango de fechas

Parámetros

facilityId `string` (obligatorio) ID interno de la instalación startDate `string` (obligatorio) Filtro de fecha de inicio (YYYY-MM-DD) endDate `string` (obligatorio) Filtro de fecha de finalización (YYYY-MM-DD) deviceIds `string` (opcional) Lista de IDs de cámaras o dispositivos separados por comas para filtrar view `string` (opcional) Vista alternativa del informe que se calculará (se reenvía a la Lambda de informes)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Búsqueda vectorial en el contenido multimedia indexado del CCTV de una instalación. Responde con un text/event-stream retransmitido desde la Lambda searchAnything, para que el cliente pueda mostrar el progreso mientras un contenedor en frío carga el codificador. Los eventos son `status` y luego `result` o `error`. Hay tres formas de consultar, dos de ellas con este verbo. Envía `query` para buscar por texto libre. Envía `seedIndex` + `seedKey` para buscar por ejemplo ("más como este") con el vector de una fila que ya está en el índice; así encuentras más resultados parecidos al que el usuario está viendo. Para buscar con una imagen que tiene el usuario, envía los bytes con `POST` a esta misma ruta. Envía palabras junto con una imagen para acotar una con la otra: **el texto filtra, la imagen ordena**. Los candidatos salen de la semilla, las palabras deciden cuáles se conservan y la similitud visual decide el orden, de modo que los resultados siguen pareciéndose a la imagen y las palabras descartan los que no coinciden. Las dos nunca se combinan en un solo vector, por eso `queryKind` sigue siendo `similar` en una búsqueda combinada; la presencia de `query` en el resultado es lo que indica que se aplicó un filtro de texto. Es bastante habitual que las búsquedas combinadas no devuelvan nada; trátalo como un resultado aparte: `perIndex..textGated` cuenta los candidatos que coincidieron con la imagen pero no con las palabras, así que una página vacía puede explicarse como "quita las palabras" en lugar de "prueba con otra imagen". Una búsqueda con semilla y sin palabras no carga ningún codificador, por lo que nunca sufre un arranque en frío; agregar palabras pierde esa ventaja. En cualquier caso, busca en todos los índices de forma predeterminada: los vectores de recortes, grabaciones y timelapse comparten un mismo espacio, así que el recorte de una persona puede encontrar grabaciones que coinciden. Las puntuaciones con semilla son mucho más altas que las de texto (de imagen a imagen no hay brecha de modalidad) y se filtran con un umbral distinto, todavía sin calibrar: `result.queryKind` indica qué escala estás leyendo, y nunca debes comparar una puntuación de una escala con la otra. Busca en todos los índices de forma predeterminada y devuelve una sola lista combinada y ordenada por puntuación; cada resultado incluye `index` y `kind` para que quien llama pueda distinguir un resultado de imagen de uno de video (este último agrega `offsetMs`). Los índices sin tabla para la instalación se informan en `skipped` en lugar de generar un error. Los resultados por debajo del umbral de relevancia calibrado de cada índice se descartan, por lo que una consulta sin coincidencias reales devuelve una lista vacía en lugar de resultados sin sentido presentados con confianza; `perIndex` informa qué aportó cada índice y por qué. Puedes acotar los resultados por hora de captura y por cámara. Usa `cameraId` en lugar de `camera`: es el balenaUUID de la cámara, el único valor que todos los índices guardan de forma idéntica, así que un solo filtro los acota a todos. Un filtro que un índice no puede aplicar se informa en `perIndex..filtersIgnored` y ese índice se busca sin acotar, en lugar de quitarse de la búsqueda. Los resultados de grabaciones son **uno por clip, no uno por fotograma coincidente**: los fotogramas se muestrean cada 2 s, así que un sujeto que permanece en escena coincide con diez fotogramas casi idénticos de la misma grabación. Cada clip devuelve su mejor fotograma, además de `matchCount` y `offsetsMs`, que enumeran cada momento coincidente dentro del clip y se pueden usar directamente como puntos de búsqueda en la reproducción. Los recortes de personas nunca se agrupan, ya que dos recortes de una misma persona son dos avistamientos distintos.

Parámetros

facilityId `string` (obligatorio) ID interno de la instalación en la que se buscará query `string` (opcional) Descripción en texto libre de lo que se busca. Es obligatoria, salvo que se envíe warm=1 o una semilla. Combinada con una semilla, deja de ser lo que se ordena y pasa a ser un filtro sobre los candidatos de la semilla, que descarta aquellos cuya puntuación de texto queda por debajo del umbral de relevancia del índice. seedIndex `string` (opcional) Busca por ejemplo en lugar de por texto: el índice en el que está la fila semilla (person-crops, recording-frames, timelapse-frames). Es el `index` del resultado en el que hizo clic el usuario. Debe enviarse con seedKey. seedKey `string` (opcional) El `key` de la fila semilla, tomado textualmente del resultado. La semilla se excluye de sus propios resultados; en una grabación, eso significa todo el clip, ya que sus demás fotogramas están separados por 2 s y son casi idénticos. seedFrameId `string` (opcional) Obligatorio cuando seedIndex es recording-frames: ese índice guarda una fila por cada fotograma muestreado y todas comparten la clave del clip, por lo que la clave sola identifica un clip y no un momento. Envía el `frameId` del resultado. Las filas más antiguas no lo tienen; en ese caso, envía seedOffsetMs. seedOffsetMs `string` (opcional) Identificador de fotograma alternativo para las semillas de recording-frames cuya fila es anterior a `frame_id`. Envía el `offsetMs` del resultado. Se ignora si se proporciona seedFrameId. warm `string` (opcional) Prepara un contenedor Lambda sin ejecutar una búsqueda. Llámalo al cargar la página. warmTarget `string` (opcional) Qué codificador carga `warm`: `text` (predeterminado), `image` o `both`. La torre de visión ocupa 355 MB frente a los 283 MB de la torre de texto, así que prepararla es opcional: solicita `image` solo cuando el usuario realmente haya preparado una imagen, no al cargar la página. index `string` (opcional) Conjuntos de datos en los que se buscará, separados por comas: person-crops, recording-frames, timelapse-frames. Los resultados se combinan en una sola lista ordenada por puntuación. De forma predeterminada se busca en los tres; pasa una lista explícita para acotarla. timelapse-frames abarca las cámaras que no graban nada y solo generan un fotograma por minuto, y su umbral de relevancia todavía no está calibrado. model `string` (opcional) Codificador con el que se consulta. Debe coincidir con el codificador con el que se indexó el conjunto de datos. limit `string` (opcional) Resultados que se devolverán por índice (50 de forma predeterminada, máximo 100). No es un total, así que buscar en los tres índices puede devolver hasta el triple. En las grabaciones cuenta clips, no fotogramas coincidentes. from `string` (opcional) Solo coincide con contenido capturado en este momento o después, en milisegundos desde el epoch. Ten en cuenta que es la hora de captura, no la de carga. to `string` (opcional) Solo coincide con contenido capturado antes de este momento (exclusivo), en milisegundos desde el epoch. cameraId `string` (opcional) balenaUUID de las cámaras por las que se acotará, separados por comas: el campo `balenaUUID` de cada entrada que devuelve /api/cctv/recordings/filters/:club. Es el filtro de cámara recomendado: todos los índices guardan este mismo valor, así que un solo filtro los acota a todos. Ten en cuenta que solo lo tienen los recortes cuya unión con la detección de rostros se resolvió (~1% actualmente), por lo que acotar los recortes por cámara devolverá pocos o ninguno hasta que se ejecute el relleno de recortes; las grabaciones tienen el dato completo y se filtran con exactitud. camera `string` (opcional) Nombres de las cámaras por las que se acotará, separados por comas. En la práctica, solo para grabaciones: person-crops guarda un nombre de cámara vacío en cada fila, así que cualquier valor aquí excluye todos los recortes. Usa preferentemente cameraId. cameraGroup `string` (opcional) Grupos de cámaras por los que se acotará, separados por comas. Está completo en todas las grabaciones, pero solo en ~1% de los recortes, por el mismo motivo que cameraId. minScore `string` (opcional) Anula el umbral de coseno por índice que filtra el ruido. Omítelo en producción; cada índice tiene un valor predeterminado calibrado (y otro, sin calibrar, para las búsquedas con semilla). Pasa 0 para ver los vecinos más cercanos sin filtrar al depurar la relevancia.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Busca con una imagen que tiene el usuario, en lugar de con palabras o con un resultado que ya está en pantalla. Es idéntico al GET en todo lo demás (mismos parámetros de consulta, mismo flujo de eventos, misma forma del resultado), así que aquí solo se documenta lo que cambia. Envía los **bytes del archivo original** como cuerpo de la solicitud con un Content-Type `image/*`. No cambies el tamaño, recortes ni vuelvas a codificar la imagen en el navegador antes: el servidor reproduce un cambio de tamaño muy específico (una compresión a 256x256 con un kernel bilineal con antialiasing) con el que se generaron los vectores indexados, y el escalado de canvas usa otro. Según las mediciones, esa sustitución queda a unos 0,93 de coseno de la respuesta correcta, más lejos que dos imágenes realmente distintas, por lo que los resultados se devuelven ordenados de forma plausible pero incorrecta, sin ningún error. El límite es de 4 MB, una restricción de transporte y no de calidad: los bytes viajan dentro del payload de invocación de la Lambda, que tiene un máximo de 6 MB, y base64 los aumenta en un tercio. Los resultados se puntúan de imagen a imagen, así que `queryKind` es `image` y las puntuaciones están en la misma escala, mucho más alta, que una búsqueda con semilla: nunca son comparables con las puntuaciones de texto. Es de esperar que queden ligeramente *por debajo* de una búsqueda con semilla equivalente: el vector de una semilla lo escribió el propio dispositivo, mientras que una carga se vuelve a codificar aquí con otro motor, lo que la deja unas centésimas lejos de donde la habría ubicado el dispositivo. Según las mediciones, aun así los resultados tienen la misma calidad; simplemente no son exactamente el mismo conjunto. Agregar `query` filtra los resultados por esas palabras, igual que con una semilla. Enviar una semilla *y* una imagen se rechaza: ambas son lo que se ordena, así que la combinación no tiene sentido. Esta es la solicitud más costosa que atiende el endpoint. Una imagen cargada carga la torre de visión, y agregar palabras también carga la torre de texto, ambas en un contenedor en frío. `warm=1&warmTarget=image`, una vez que el usuario prepara una imagen, saca eso de la ruta crítica.

Parámetros

facilityId `string` (obligatorio) ID interno de la instalación en la que se buscará body `string` (obligatorio) Bytes de la imagen sin procesar ni modificar, 4 MB como máximo query `string` (opcional) Palabras opcionales para acotar los resultados de la imagen, que descartan las coincidencias cuya puntuación de texto queda por debajo del umbral de relevancia del índice.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve los detalles de almacenamiento y otras métricas del CCTV del club

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una lista de los registros de carga de timelapse de un club

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/cctv/timelapse/:club

Solicitud de ejemplo

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

Respuesta

{}

Mostrar las acciones de los usuarios sobre las grabaciones en el frontend o la interfaz del CCTV

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Registrar una acción de un usuario sobre las grabaciones en el frontend o la interfaz del CCTV

Parámetros

body `string` (obligatorio) Objeto JSON del nuevo bloque de configuración que se agregará al sistema.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Obtener el token de usuario para el frontend o la interfaz del CCTV

Parámetros

club `string` (obligatorio) ID del club

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Generar un token para acceso temporal o de invitado

Parámetros

club `string` (obligatorio) El identificador único del club. body `string` (obligatorio) Objeto JSON con los detalles del token que se emitirá.

Endpoint

POST /api/cctv/token/{club}

Solicitud de ejemplo

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

Respuesta

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

Devuelve una lista de registros de tokens para acceso temporal o de invitado

Parámetros

club `string` (obligatorio) El identificador único del club.

Endpoint

GET /api/cctv/token/{club}

Solicitud de ejemplo

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

Respuesta

{}

Obtener un token de acceso mediante el ID de acceso

Parámetros

accessID `string` (obligatorio) ID del registro del token en la base de datos.

Endpoint

POST /guest/cctv/token/:accessID

Solicitud de ejemplo

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

Respuesta

{}

Eliminar un horario de acceso de la instalación

Parámetros

facilityId `string` (obligatorio) body `object` (obligatorio) Objeto JSON del nuevo horario de acceso.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una lista de los horarios de acceso de la instalación

Parámetros

facilityId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Actualiza o crea un horario de acceso de la instalación

Parámetros

facilityId `string` (obligatorio) body `object` (obligatorio) Objeto JSON del nuevo horario de acceso.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Eliminar una zona de acceso de la instalación

Parámetros

facilityId `string` (obligatorio) body `object` (obligatorio) Objeto JSON de la nueva zona de acceso.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una lista de las zonas de acceso de la instalación

Parámetros

facilityId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Actualiza o crea una zona de acceso de la instalación

Parámetros

facilityId `string` (obligatorio) body `object` (obligatorio) Objeto JSON de la nueva zona de acceso.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la unión de todos los ID de módulos de administración de las marcas e instalaciones de una organización, completados como objetos de módulo.

Parámetros

organisationId `string` (obligatorio) ID de la organización

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la lista de todas las organizaciones

Parámetros

includeBrands `string` (opcional) Incluir las marcas asociadas a la organización includeFacilities `string` (opcional) Incluir las instalaciones asociadas a la organización includeRegions `string` (opcional) Incluir las regiones asociadas a la organización

Endpoint

GET /api/organisations

Solicitud de ejemplo

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

Respuesta

{}

Un asistente de IA sencillo que analiza el contenido de un ticket de soporte y crea sugerencias según los temas disponibles, además de temas de búsqueda de Algolia sugeridos...

Parámetros

messageBody `string` (obligatorio) Cuerpo del mensaje que se enviará topicData `string` (obligatorio) Objeto o arreglo JSON del topicData que devuelve osTicket (sistema de tickets y soporte) facilityId `string` (opcional) El ID interno del club, necesario para determinar el índice de Algolia correcto en el que buscar.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Una API sencilla de generación de imágenes

Parámetros

type `string` (obligatorio) Tipo de imagen que se generará name `string` (obligatorio) Nombre de la imagen maxSize `string` (opcional) Tamaño máximo opcional de la respuesta, p. ej., 200KB, 1MB o una cantidad de bytes. La imagen se reduce o se comprime para ajustarse.

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Consulta sencilla a un LLM

Endpoint ligero para consultas sencillas y sin estado a un LLM. Usa un modelo económico sin razonamiento (gpt-4o-mini) con límites de tokens estrictos. Sin historial de conversación, sin herramientas, sin streaming: solo entra un prompt y sale texto.

Cuerpo de la solicitud

Endpoint

POST /api/ai/llm/query

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la configuración de Algolia, incluidos el nombre del índice, el ID de la aplicación y la clave de API.

Parámetros

facilityId `string` (obligatorio)

Endpoint

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

Solicitud de ejemplo

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

Respuesta

{}

Inicializa el índice de Algolia de materiales impresos de marketing

Parámetros

organisationId `string` (obligatorio)

Endpoint

PUT /api/algolia/index

Solicitud de ejemplo

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

Respuesta

{}

Buscar materiales impresos de marketing

Cuerpo de la solicitud

Endpoint

POST /algolia/search-marketing-print

Solicitud de ejemplo

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

Respuesta

{}

Buscar materiales impresos de marketing

Parámetros

club `string` (opcional) ID del club searchTerms `string` (opcional) Términos de búsqueda algoliaArgs `object` (opcional) Argumentos de búsqueda adicionales de Algolia

Endpoint

GET /algolia/search-marketing-print

Solicitud de ejemplo

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

Respuesta

{}

Actualizar de forma masiva los objetos de materiales impresos de marketing de un club específico

Endpoint

POST /algolia/bulk-update-marketing-print

Solicitud de ejemplo

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

Respuesta

{}

Obtiene los recursos de materiales impresos de marketing desde Algolia.

Parámetros

organisationId `string` (obligatorio) search `string` (opcional) limit `string` (opcional) brand `string` (opcional) tag `string` (opcional)

Endpoint

GET /api/algolia/marketing/assets

Solicitud de ejemplo

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

Respuesta

{}

Inicializa el índice de Algolia de materiales impresos de marketing con la configuración de la instalación.

Parámetros

organisationId `string` (obligatorio)

Endpoint

POST /api/algolia/marketing/assets

Solicitud de ejemplo

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

Respuesta

{}

Realiza una búsqueda en un índice de Algolia específico según los términos de búsqueda, el club o la configuración regional. Puedes personalizar más la búsqueda con argumentos adicionales de Algolia.

Parámetros

searchTerms `string` (obligatorio) Los términos que se buscarán en el índice de Algolia. club `string` (opcional) ID interno del club que hace la solicitud. Si se especifica, la búsqueda se filtra según la región asociada al club. locale `string` (opcional) La configuración regional que se usará para determinar la región si no se especifica un club. Se obtiene de navigator.languages. algoliaArgs `string` (opcional) Argumentos adicionales o personalizados que se pasarán a la solicitud de búsqueda de Algolia.

Endpoint

POST /api/algolia/search-wiki

Solicitud de ejemplo

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

Respuesta

{}

Muestra todos los anuncios

Endpoint

GET /api/announcements/list

Solicitud de ejemplo

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

Respuesta

{}

Carga un recurso en un BUCKET S3 PÚBLICO (mediante la API de carga), que luego posprocesa y optimiza el archivo, genera miniaturas, etc. *Nota: los recursos estarán disponibles públicamente*

Parámetros

file `string` (opcional) Nombre del archivo o recurso que se cargará.

Endpoint

POST /api/asset-upload

Solicitud de ejemplo

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

Respuesta

{}

Devuelve el estado de la carga según el uuid indicado del registro de carga

Parámetros

uuid `string` (obligatorio) UUID del registro de carga

Endpoint

GET /api/asset-upload/:uuid

Solicitud de ejemplo

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

Respuesta

{}

Enviar un comando al Sonos del club

Parámetros

body `object` (obligatorio) Objeto JSON con el comando y la entrada que se enviarán a Sonos.

Endpoint

PUT /api/audio-control/command/:club

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/audio-control/command/:club \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Recuperar la configuración del frontend de control de audio

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/audio-control/config/:club

Solicitud de ejemplo

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

Respuesta

{}

Cambiar la configuración del frontend de control de audio

Parámetros

body `object` (obligatorio) Objeto JSON del nuevo bloque de configuración que se agregará al sistema.

Endpoint

PUT /api/audio-control/config/:club/:section

Solicitud de ejemplo

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

Respuesta

{}

Recupera la configuración de la marca para una región específica

Parámetros

brandId `string` (opcional) El ID de la marca regionCode `string` (opcional) El código ISO de la región cuya configuración se recuperará

Endpoint

GET /api/brands/{brandId}/regions/{regionCode}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/regions/{regionCode} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Actualiza varios parámetros de configuración de la marca para una región específica

Parámetros

brandId `string` (opcional) El ID de la marca que se actualizará regionCode `string` (opcional) El código ISO de la región cuya configuración se actualizará acceptFreeTrialBookingsVisibility `string` (opcional) customTrackingCodeVisibility `string` (opcional) displayDataSources `string` (opcional) displayDefaultDataSource `string` (opcional) displayDefaultUI `string` (opcional) displayUIOptions `string` (opcional) defaultAboutBusiness `string` (opcional) defaultAboutBusinessFacebook `string` (opcional) facilityCoverImage `string` (opcional) digitalProfileSettingsVisibility `string` (opcional) facilityHoursVisibility `string` (opcional) facilityLocationVisibility `string` (opcional) facilityPaymentMethods `string` (opcional) facilityPrimaryLogo `string` (opcional) facilityStatusVisibility `string` (opcional) landingPagesVisibility `string` (opcional) lineChatIntegrationVisibility `string` (opcional) whatsAppIntegrationVisibility `string` (opcional) defaultWhatsAppMessage `string` (opcional) socialUrlsVisibility `string` (opcional) yextApiKey `string` (opcional) Clave de API que usa la integración de Yext para esta combinación de marca y región. Solo se consulta cuando `directorySyncMode` es `yext`. directorySyncMode `string` (opcional) Qué backend de sincronización se ejecuta para las instalaciones de esta combinación de marca y región. Si falta, el valor predeterminado es `yext`, por compatibilidad con las marcas anteriores a la implementación de Directory Publishers. websiteUrl `string` (opcional) androidAppUrl `string` (opcional) iosAppUrl `string` (opcional) featuredMessageDescription `string` (opcional) yextCategoryIds `string` (opcional) Clave de almacenamiento heredada: en realidad son IDs de categoría de Google Business Profile (p. ej., gcid:gym). El prefijo "yext" es anterior al retiro de Yext; se conserva por compatibilidad con las filas existentes de la base de datos. customInputFields `string` (opcional) customInputFieldsToRemove `string` (opcional)

Endpoint

PUT /api/brands/{brandId}/regions/{regionCode}

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/brands/{brandId}/regions/{regionCode} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Recupera la configuración de la marca para una instalación específica

Parámetros

facilityId `string` (opcional) El ID de la instalación cuya configuración de marca se recuperará

Endpoint

GET /api/facilities/{facilityId}/brand-settings

Solicitud de ejemplo

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

Respuesta

{}

Crea una marca nueva

Parámetros

name `string` (obligatorio) El nombre de la marca organisationId `string` (obligatorio) El ID de la organización a la que pertenece la marca redirectDashboard `string` (opcional) La URL a la que se redirige después de iniciar sesión, en lugar del panel predeterminado

Endpoint

POST /api/brands

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la lista de todas las marcas

Endpoint

GET /api/brands

Solicitud de ejemplo

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

Respuesta

{}

Devuelve el objeto de la marca

Parámetros

brandId `string` (obligatorio) El ID de la marca que se recuperará includeOrganisation `boolean` (opcional) Indica si se incluyen los datos de la organización en la respuesta

Endpoint

GET /api/brands/{brandId}

Solicitud de ejemplo

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

Respuesta

{}

Actualiza una marca por su ID

Parámetros

brandId `string` (opcional) El ID de la marca que se actualizará name `string` (obligatorio) El nombre de la marca brandOrganisationId `string` (opcional) El ID de la organización a la que pertenece la marca redirectDashboard `string` (opcional) La URL a la que se redirige después de iniciar sesión, en lugar del panel predeterminado yextApiKey `string` (opcional) La clave de API que se usa para acceder a la API de Yext para esta marca customMenuLayout `object` (opcional) Árbol de diseño del menú lateral por marca (secciones / grupos / elementos con referencias a módulos del sistema o URL personalizadas). Solo puede establecerlo un administrador de la organización de esta marca.

Endpoint

PUT /api/brands/{brandId}

Solicitud de ejemplo

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

Respuesta

{}

Mostrar las instalaciones de una marca

Devuelve una lista ligera de las instalaciones (ID, nombre, código ISO de la región) que pertenecen a la marca. Se usa para completar los selectores de instalaciones de destino en la configuración de la marca.

Parámetros

brandId `string` (obligatorio) El ID de la marca cuyas instalaciones se mostrarán

Endpoint

GET /api/brands/{brandId}/facilities

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la lista de todas las marcas asociadas a la organización del club.

Endpoint

GET /api/clubs/{club}/brands

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la lista de todos los tipos de calendario

Endpoint

GET /api/programs/calendars/calendar-types

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/programs/calendars/calendar-types \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Eliminar un banner del panel

Elimina de forma lógica un banner del panel que pertenece a la marca.

Parámetros

brandId `string` (obligatorio) El ID de la marca a la que pertenece el banner bannerId `string` (obligatorio) El ID del banner que se eliminará

Endpoint

DELETE /api/brands/{brandId}/dashboard-banners/{bannerId}

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/brands/{brandId}/dashboard-banners/{bannerId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Mostrar los banners del panel de una marca

Devuelve todos los banners del panel (no eliminados) configurados para la marca, para su administración.

Parámetros

brandId `string` (obligatorio) El ID de la marca cuyos banners se mostrarán

Endpoint

GET /api/brands/{brandId}/dashboard-banners

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/dashboard-banners \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Crear o actualizar un banner del panel

Crea un banner del panel nuevo para la marca, o actualiza uno existente cuando se incluye `bannerId` en el cuerpo. Los banners se pueden programar (inicio y fin en segundos unix, null = sin límite) y dirigir a toda la marca, a regiones específicas (códigos ISO) o a instalaciones específicas.

Parámetros

brandId `string` (obligatorio) El ID de la marca a la que pertenece el banner

Cuerpo de la solicitud

Endpoint

PUT /api/brands/{brandId}/dashboard-banners

Solicitud de ejemplo

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

Respuesta

{}

Obtener los banners activos del panel de una instalación

Resuelve los banners del panel que deben mostrarse actualmente en una instalación, según la marca y la región de la instalación (código de país ISO) y la marca de habilitado, la franja programada y la segmentación de cada banner. Los usan las interfaces del panel.

Parámetros

facilityId `string` (obligatorio) El ID de la instalación para la que se resuelven los banners

Endpoint

GET /api/facilities/{facilityId}/dashboard-banners

Solicitud de ejemplo

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

Respuesta

{}

Devuelve el recurso KYC de un club.

Parámetros

clubId `string` (obligatorio) El ID del club. key `string` (obligatorio) La clave del recurso KYC.

Endpoint

GET /api/clubs/{clubId}/kyc-assets/{key}

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la información KYC del club.

Endpoint

GET /api/clubs/{clubId}/kyc

Solicitud de ejemplo

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

Respuesta

{}

Actualiza la información KYC del club.

Parámetros

clubId `string` (obligatorio) El ID del club que se actualizará. body `object` (obligatorio)

Endpoint

PUT /api/clubs/{clubId}/kyc

Solicitud de ejemplo

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

Respuesta

{}

Carga un recurso KYC para un club.

Parámetros

clubId `string` (obligatorio) El ID del club. file `string` (obligatorio) El archivo que se cargará.

Endpoint

POST /api/clubs/{clubId}/kyc-assets

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la configuración de preferencias del club.

Endpoint

GET /api/club/preferences/:club

Solicitud de ejemplo

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

Respuesta

{}

Crea o actualiza la entrada de preferencias del club.

Cuerpo de la solicitud

Endpoint

POST /api/club/preferences/:club

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la lista de miembros con acuerdo.

Endpoint

GET /api/clubpass/user/email/exist/:club

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/clubpass/user/email/exist/:club \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista de miembros con acuerdo.

Endpoint

GET /api/clubpass/user/phone/exist/:club

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/clubpass/user/phone/exist/:club \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve una lista de los usuarios que pertenecen al club especificado

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder

Endpoint

GET /api/clubs/{club}/members

Solicitud de ejemplo

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

Respuesta

{}

Indica si el club está abierto en la fecha indicada.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. date `string` (obligatorio) Fecha que se comprobará, en formato unix

Endpoint

GET /api/club-busy-hours/:club

Solicitud de ejemplo

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

Respuesta

{}

Devuelve todos los metadatos del club que se muestran en los sitios web de Example Club.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/clubs/clubpage/clubdata/{club}

Solicitud de ejemplo

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

Respuesta

{}

Actualiza los metadatos de un club con los datos nuevos enviados desde el front-end. Los campos que no están en el cuerpo de la solicitud se conservan (sin SET ni REMOVE). Los campos enviados como `null` o como cadena vacía se borran. Pasa `updateAll: false` para usar la ruta específica de combinación parcial; en cualquier caso, quien llama nunca necesita enviar campos que no le corresponden.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. body `string` (obligatorio) Objeto JSON con los datos del club que quieres actualizar.

Endpoint

POST /api/clubs/clubpage/updateclub/{club}

Solicitud de ejemplo

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

Respuesta

{}

agregar un nuevo registro de seguimiento personalizado

Parámetros

club `string` (obligatorio) ID del club body `string` (obligatorio) Arreglo de elementos de seguimiento personalizado.

Endpoint

POST /api/clubs/{club}/customtracking

Solicitud de ejemplo

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

Respuesta

{}

Devuelve el seguimiento personalizado de un club específico

Endpoint

GET /api/clubs/customtracking/:clubID

Solicitud de ejemplo

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

Respuesta

{}

Actualizar las entradas de seguimiento personalizado

Parámetros

club `string` (obligatorio) ID del club body `string` (obligatorio) Objeto JSON con los datos del club que quieres actualizar.

Endpoint

POST /api/clubs/{club}/customtracking/update

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la imagen de fachada predeterminada de un club.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/clubs/{club}/default-shop-front

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/default-shop-front \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Mostrar las puertas disponibles en la instalación

Parámetros

body `object` (obligatorio) Objeto JSON con los datos del club que quieres actualizar.

Endpoint

POST /api/clubs/integrations/doors/:facilityId

Solicitud de ejemplo

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

Respuesta

{}

Desbloquear una puerta específica de la instalación

Parámetros

body `object` (obligatorio) Objeto JSON con los datos del club que quieres actualizar.

Endpoint

POST /api/clubs/integrations/doors/unlock

Solicitud de ejemplo

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

Respuesta

{}

Devuelve todas las integraciones y los detalles de configuración del club especificado.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/clubs/integrations/list/{club}

Solicitud de ejemplo

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

Respuesta

{}

Actualiza los metadatos de un club con los datos nuevos enviados desde el front-end.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. body `object` (obligatorio) Objeto JSON con los datos del club que quieres actualizar.

Endpoint

POST /api/clubs/integrations/update/{club}

Solicitud de ejemplo

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

Respuesta

{}

Devuelve un booleano que indica si el club está en un país europeo

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. date `string` (obligatorio) Fecha que se comprobará, en formato unix

Endpoint

GET /api/clubs/is-eu/{club}

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una lista general de todos los clubes de nuestra base de datos.

Endpoint

GET /api/clubs/listclubs

Solicitud de ejemplo

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

Respuesta

{}

Indica si el club está abierto en la fecha indicada.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. date `string` (obligatorio) Fecha que se comprobará, en formato unix

Endpoint

GET /api/clubs/{club}/open-on/{date}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/open-on/{date} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Obtener las reseñas del club desde DynamoDB.

Parámetros

club `string` (obligatorio) ID del club

Endpoint

GET /api/clubs/{club}/reviews

Solicitud de ejemplo

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

Respuesta

{}

Obtener la configuración de reseñas del club desde DynamoDB.

Parámetros

facilityId `string` (obligatorio) ID de la instalación

Endpoint

GET /api/clubs/{club}/reviews-settings

Solicitud de ejemplo

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

Respuesta

{}

Actualizar la configuración de reseñas del club en DynamoDB.

Parámetros

club `string` (obligatorio) ID del club

Endpoint

PUT /api/clubs/{club}/reviews-settings

Solicitud de ejemplo

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

Respuesta

{}

Volver a activar la publicación automática en la configuración de reseñas.

Parámetros

club `string` (obligatorio) ID del club

Endpoint

PUT /api/clubs/{club}/reviews/publish-recent-reviews

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/publish-recent-reviews \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Publica una reseña

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. review `string` (obligatorio) ID interno de la reseña que quieres publicar.

Endpoint

PUT /api/clubs/{club}/reviews/{review}/publish

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{review}/publish \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Volver a activar la publicación automática en la configuración de reseñas.

Parámetros

club `string` (obligatorio) ID del club

Endpoint

PUT /api/clubs/{club}/reviews-settings/re-enable-auto-publish

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings/re-enable-auto-publish \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Publica una respuesta a una reseña a través del publicador de origen (Google, etc.).

Parámetros

club `string` (obligatorio) ID de la instalación reviewId `string` (obligatorio) ID de la reseña en PH (se busca en la tabla club-social-reviews) body `string` (obligatorio)

Endpoint

POST /api/clubs/{club}/reviews/{reviewId}/respond

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{reviewId}/respond \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Anula la publicación de una reseña

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. review `string` (obligatorio) ID interno de la reseña cuya publicación quieres anular.

Endpoint

PUT /api/clubs/{club}/reviews/{review}/un-publish

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{review}/un-publish \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve una lista de los propietarios que pertenecen al club especificado desde la base de datos de PH

Parámetros

clubID `string` (obligatorio) ID interno del club al que quieres acceder

Endpoint

GET /api/clubs/{clubID}/owners

Solicitud de ejemplo

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

Respuesta

{}

Devuelve todos los planes de membresía de la instalación.

Parámetros

facilityId `string` (obligatorio) ID interno de la instalación

Endpoint

GET /api/facilities/membership-plans/:facilityId

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/facilities/membership-plans/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Actualiza un registro de plan de membresía.

Parámetros

facilityId `string` (obligatorio) ID interno de la instalación body `object` (obligatorio) Objeto JSON con los datos del plan de membresía que quieres actualizar.

Endpoint

PUT /api/facilities/membership-plans/:facilityId

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/facilities/membership-plans/:facilityId \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Volver a activar la publicación automática en la configuración de reseñas.

Parámetros

club `string` (obligatorio) ID del club

Endpoint

PUT /api/clubs/{club}/reviews/publish-recent-reviews

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/publish-recent-reviews \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Volver a activar la publicación automática en la configuración de reseñas.

Parámetros

club `string` (obligatorio) ID del club

Endpoint

PUT /api/clubs/{club}/reviews-settings/re-enable-auto-publish

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings/re-enable-auto-publish \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista de todas las monedas disponibles

Endpoint

GET /api/currencies

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la ubicación geográfica a partir de la dirección IP.

Parámetros

ip `string` (obligatorio) Dirección IP que se consultará

Endpoint

GET /api/geo/ip-location/:club

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la ubicación geográfica del usuario actual según su IP.

Endpoint

GET /api/geo/ip-current

Solicitud de ejemplo

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

Respuesta

{}

Devuelve solo la dirección IP pública del cliente que hace la solicitud (sin búsqueda de geolocalización ni llamadas a API de terceros). La aplicación de Agentes de IA la usa para comparar la IP pública del navegador con la IP WAN que informa un dispositivo y detectar si están en la misma red.

Endpoint

GET /api/geo/client-ip

Solicitud de ejemplo

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

Respuesta

{}

Analizador de números de teléfono.

Parámetros

body `string` (obligatorio) Objeto JSON con el número que quieres analizar.

Endpoint

POST /api/phone/parser

Solicitud de ejemplo

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

Respuesta

{}

Devuelve el dispositivo de reloj maestro

Parámetros

club_id `string` (obligatorio) ID interno del club en el que quieres agregar el dispositivo.

Endpoint

GET /api/clubs/{club_id}/smart-club/health-check/master-clock

Solicitud de ejemplo

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"

Respuesta

{}

Devuelve el dispositivo Sonos maestro

Parámetros

club_id `string` (obligatorio) ID interno del club en el que quieres agregar el dispositivo.

Endpoint

GET /api/clubs/{club_id}/smart-club/health-check/sonos-mqtt

Solicitud de ejemplo

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"

Respuesta

{}

obtener las notificaciones de batería baja de Duress de un club determinado.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/clubs/{club}/smart-club/health-check/low-battery-duress

Solicitud de ejemplo

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"

Respuesta

{}

Devuelve los datos de análisis de la red

Parámetros

club_id `string` (obligatorio) ID interno del club en el que quieres agregar el dispositivo.

Endpoint

GET /api/clubs/{club_id}/smart-club/health-check/network-analysis

Solicitud de ejemplo

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"

Respuesta

{}

enviar las notificaciones de batería baja de Duress de un club determinado.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/clubs/{club}/smart-club/health-check/send-low-battery-duress-notifs

Solicitud de ejemplo

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"

Respuesta

{}

Devuelve los datos de pruebas de velocidad de los dispositivos para cada tipo de dispositivo

Parámetros

club_id `string` (obligatorio) ID interno del club en el que quieres agregar el dispositivo.

Endpoint

GET /api/clubs/{club_id}/smart-club/health-check/speed-test

Solicitud de ejemplo

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"

Respuesta

{}

Obtener las estadísticas de la ficha de una instalación. De forma predeterminada devuelve los totales diarios agregados de todos los editores, o de un solo editor cuando se proporciona `publisherId`.

Parámetros

facilityId `string` (obligatorio) publisherId `string` (opcional) startDate `string` (obligatorio) endDate `string` (obligatorio)

Endpoint

GET /api/facilities/{facilityId}/directory-insights

Solicitud de ejemplo

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

Respuesta

{}

Obtener las estadísticas agregadas de las fichas de una marca en todos los editores.

Parámetros

brandId `string` (obligatorio) startDate `string` (obligatorio) endDate `string` (obligatorio)

Endpoint

GET /api/brands/{brandId}/directory-insights

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/directory-insights \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Principales palabras clave de búsqueda (divididas en con marca y sin marca) de una instalación, que actualmente provienen de Google Business Profile.

Parámetros

facilityId `string` (obligatorio) publisherId `string` (opcional) El valor predeterminado es "google"; por ahora solo se admite Google. startDate `string` (obligatorio) endDate `string` (obligatorio) limit `string` (opcional)

Endpoint

GET /api/facilities/{facilityId}/directory-search-keywords

Solicitud de ejemplo

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

Respuesta

{}

Principales palabras clave de búsqueda de una marca, agregadas en todas las instalaciones.

Parámetros

brandId `string` (obligatorio) startDate `string` (obligatorio) endDate `string` (obligatorio) limit `string` (opcional)

Endpoint

GET /api/brands/{brandId}/directory-search-keywords

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/directory-search-keywords \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Listar las preguntas y respuestas de una instalación.

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/facilities/{facilityId}/qna

Solicitud de ejemplo

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

Respuesta

{}

Responder una pregunta.

Endpoint

POST /api/facilities/{facilityId}/qna/{questionId}/answer

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna/{questionId}/answer \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Eliminar una respuesta.

Endpoint

DELETE /api/facilities/{facilityId}/qna/{questionId}/answer/{answerId}

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna/{questionId}/answer/{answerId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve los editores habilitados para la organización de la instalación, con su estado de conexión.

Parámetros

facilityId `string` (obligatorio) organisationId `string` (obligatorio)

Endpoint

GET /api/facilities/{facilityId}/directory-publishers/resolved

Solicitud de ejemplo

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

Respuesta

{}

Obtener la configuración compartida de Door & Gate Access de una instalación

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/door-access/rules/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Actualizar la configuración compartida de Door & Gate Access de una instalación

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

PUT /api/door-access/rules/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Obtener las políticas de acceso de una instalación

La configuración de acceso existente se convierte automáticamente en políticas aplicadas equivalentes la primera vez que se lee.

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/door-access/policies/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Reemplazar las políticas de acceso con verificación optimista de revisión

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

PUT /api/door-access/policies/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Crear una política de acceso

Parámetros

facilityId `string` (obligatorio)

Endpoint

POST /api/door-access/policies/{facilityId}

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Actualizar una política de acceso

Parámetros

facilityId `string` (obligatorio) policyId `string` (obligatorio)

Endpoint

PATCH /api/door-access/policies/{facilityId}/{policyId}

Solicitud de ejemplo

curl -X PATCH https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Eliminar una política de acceso

Parámetros

facilityId `string` (obligatorio) policyId `string` (obligatorio) revision `integer` (obligatorio)

Endpoint

DELETE /api/door-access/policies/{facilityId}/{policyId}

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Duplicar una política de acceso con un nuevo ID estable

Parámetros

facilityId `string` (obligatorio) policyId `string` (obligatorio)

Endpoint

POST /api/door-access/policies/{facilityId}/{policyId}/duplicate

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId}/duplicate \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Contar los usuarios y las puertas afectados por todas las políticas de acceso

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/door-access/policies/{facilityId}/impacts

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/impacts \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Contar los usuarios y las puertas afectados por una política de acceso

Parámetros

facilityId `string` (obligatorio) policyId `string` (obligatorio)

Endpoint

GET /api/door-access/policies/{facilityId}/{policyId}/impact

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId}/impact \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Listar los tipos de persona, estados y etiquetas de la instalación

Devuelve los valores distintos de tipo de persona, estado de membresía y etiqueta presentes en las filas de User Access de la instalación (ph-door-access-users), obtenidos de la sincronización con socios y de la entrada manual. La aplicación de door-gate-access los usa para llenar los menús desplegables de las reglas de acceso. Las etiquetas son la unión de las `tags` sincronizadas y las `customTags` del administrador, igual que en el evaluador de reglas.

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/door-access/people-config/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Listar los controladores de puerta de una instalación con sus reglas efectivas de Door & Gate Access

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/door-access/doors/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Guardar las anulaciones, el icono y la configuración del dispositivo de cada puerta

Única vía de escritura para todo lo que la aplicación de administración de DGA edita en una puerta: - `accessRulesOverride` / `geofenceOverride`: pasa `null` para borrarlos y volver al valor predeterminado de la instalación. - `icon`: clave estable (consulta services/door-access/door-icons.js); los valores desconocidos devuelven 400. - `holdTimeSeconds` (1–30), `maintenanceMode` (`off` / `force-open` / `force-closed`), `doorLocation` (texto libre, ≤64 caracteres), `playNotificationSoundOnRelayToggle` (booleano), `autoUnlockSchedule` (cuadrícula de franjas semanales). Antes eran campos exclusivos de Device Management, pero ahora la aplicación los escribe directamente para que los administradores no tengan que salir del panel lateral de la puerta para los cambios de configuración habituales. Cuando se modifica alguno de los campos del dispositivo, la ruta también envía las variables de entorno de Balena correspondientes (`RELAY_NOTIFICATION_SOUND`, `DOOR_MAINTENANCE_MODE`, `DOOR_AUTO_UNLOCK_SCHEDULE`) y lanza un comando MQTT `unlockUpdates` para que el dispositivo adopte la nueva configuración sin esperar la siguiente actualización de entorno de Balena. Se hace lo posible: la respuesta devuelve 200 aunque Balena no esté disponible temporalmente.

Parámetros

facilityId `string` (obligatorio) doorId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

PUT /api/door-access/doors/{facilityId}/{doorId}/override

Solicitud de ejemplo

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

Respuesta

{}

Consulta ligera del estado en Balena para el aviso de recarga del panel lateral de la puerta

El panel lateral de la aplicación de DGA lo obtiene de forma diferida cuando un administrador abre una puerta, para mostrar el texto adecuado de "al guardar se recargará el controlador": la variante predeterminada de "unos segundos" o la variante más fuerte de "varios minutos" cuando también hay una actualización de versión pendiente. Devuelve una instantánea plana obtenida de `balena.models.device.get()`. Si falla, devuelve `data: null` (en lugar de un error 5xx), de modo que una interrupción de Balena solo degrada el texto del aviso en lugar de impedir que se abra el panel lateral.

Parámetros

facilityId `string` (obligatorio) doorId `string` (obligatorio)

Endpoint

GET /api/door-access/doors/{facilityId}/{doorId}/device-status

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/device-status \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Anulación del administrador: desbloquear una puerta desde la aplicación

Activa brevemente el relé con el `holdTimeSeconds` actual de la puerta y escribe una fila de auditoría `admin-override` en ph-door-app-access-events para que la acción se pueda atribuir en los Registros de acceso. Siempre se ejecuta correctamente, sin importar `maintenanceMode === 'force-closed'`: es la vía de escape del administrador. Devuelve 200 en cuanto se envía la publicación MQTT; aquí no se esperan los estados confirmado, fallido o agotado (el flujo heredado /api/devices/door-controllers + /api/ics/devices/command tampoco espera respuesta).

Parámetros

facilityId `string` (obligatorio) doorId `string` (obligatorio)

Endpoint

POST /api/door-access/doors/{facilityId}/{doorId}/unlock

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/unlock \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Reproducir un patrón de pitidos de localización en el controlador de puerta

Publica un comando MQTT `beep` para que el controlador emita tres pitidos de duración media (~500 ms cada uno, ~350 ms de pausa, ~2 s en total). Los administradores lo usan para ubicar físicamente un controlador de puerta en el sitio. El botón heredado de Device Management usa una ráfaga de ~30 s de pitidos cortos, pero el controlador del zumbador del firmware solo emite de forma fiable el primero, por lo que la aplicación envía en su lugar un patrón más corto y más fiable. No genera fila de auditoría: es una acción de diagnóstico sin efecto en el control de acceso.

Parámetros

facilityId `string` (obligatorio) doorId `string` (obligatorio)

Endpoint

POST /api/door-access/doors/{facilityId}/{doorId}/identify

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/identify \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Reiniciar un controlador de puerta de forma remota

Publica el mismo comando MQTT `rebootDevice`, sin espera de respuesta, que envía el botón heredado "Remotely Reboot Device" de Device Management, pero controlado por el módulo `door-gate-access` para que los administradores de DGA puedan reiniciar un controlador desde la sección Avanzado del panel lateral de la puerta sin una concesión `device-management` aparte. Devuelve 200 en cuanto se envía la publicación; el dispositivo se desconecta mientras dura el reinicio.

Parámetros

facilityId `string` (obligatorio) doorId `string` (obligatorio)

Endpoint

POST /api/door-access/doors/{facilityId}/{doorId}/reboot

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/reboot \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Listar las filas de User Access de una instalación

Devuelve todas las filas de acceso de usuario no eliminadas de la instalación. Admite filtros del lado del cliente (source, search, accessEnabled, hasGrants). El cálculo `hideExcluded` en el servidor de la Fase 4 se agregará cuando llegue el evaluador de concesiones híbridas; por ahora el parámetro se acepta, pero devuelve el conjunto completo.

Parámetros

facilityId `string` (obligatorio) search `string` (opcional) source `string` (opcional) accessEnabled `string` (opcional) hasGrants `string` (opcional) hideExcluded `boolean` (opcional) Si es true, se ocultan los usuarios sincronizados (source != manual) que no podrían pasar por ninguna puerta en ningún momento en esta instalación. La respuesta incluye un objeto `hidden: { count, sample }`.

Endpoint

GET /api/door-access/users/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Crear manualmente una fila de User Access en una instalación

Crea una fila nueva con `source: 'manual'`. Devuelve 409 con `existingUserId` si el teléfono o el correo electrónico proporcionados ya corresponden a una fila de esta instalación.

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/door-access/users/{facilityId}

Solicitud de ejemplo

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

Obtener una sola fila de User Access

Parámetros

facilityId `string` (obligatorio) userId `string` (obligatorio)

Endpoint

GET /api/door-access/users/{facilityId}/{userId}

Solicitud de ejemplo

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

Respuesta

{}

Actualización parcial de una fila de User Access

Edita cualquier subconjunto de campos de identidad o autorización. Pasa `null` para borrar un campo opcional. Devuelve 409 si el nuevo teléfono o correo electrónico coincide con otra fila de la misma instalación. `appMessage` acepta la misma estructura que el mensaje de toda la instalación en PUT /api/door-access/rules/{facilityId}: texto del cuerpo, gravedad, enlace opcional y programación opcional de inicio y fin. La aplicación móvil muestra esto en el panel solo al usuario destinatario.

Parámetros

facilityId `string` (obligatorio) userId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

PATCH /api/door-access/users/{facilityId}/{userId}

Solicitud de ejemplo

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

Respuesta

{}

Eliminación lógica de una fila de User Access

Marca la fila como `deleted: true` y deshabilita el acceso. Se conserva el vínculo del registro de auditoría con el userId; los administradores pueden volver a habilitarla manualmente.

Parámetros

facilityId `string` (obligatorio) userId `string` (obligatorio)

Endpoint

DELETE /api/door-access/users/{facilityId}/{userId}

Solicitud de ejemplo

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

Respuesta

{}

Atribución de acceso por puerta para un usuario

Para cada puerta, devuelve la autorización determinista actual (`allowedNow`, `allowedVia`, `deniedReason`) y las vías configuradas de políticas de acceso, concesiones permanentes, programaciones de políticas, concesiones de franjas horarias del administrador y franjas recientes asignadas desde el socio de origen. También devuelve la disponibilidad actual y la siguiente, y la actualidad del origen. El blockAllAccess y el mantenimiento de la puerta se evalúan antes que todas las vías de permiso.

Parámetros

facilityId `string` (obligatorio) userId `string` (obligatorio)

Endpoint

GET /api/door-access/users/{facilityId}/{userId}/effective-access

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/effective-access \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Crear en bloque filas de User Access desde una importación CSV

Crea varias filas `source: 'manual'` en una sola solicitud, con la misma validación, normalización de teléfono y correo electrónico, comprobación de coincidencias por instalación, mensajería automática y lógica de invitación (opcional) que la creación individual. Las filas se procesan en orden, por lo que una fila posterior que coincida con una creada antes se informa como duplicada. Las concesiones se proporcionan como ID de puertas o grupos ya resueltos (el cliente convierte los nombres en ID). Las concesiones de franjas horarias se rechazan intencionalmente en bloque y deben agregarse con el endpoint de reemplazo por usuario después de la importación. Nunca genera excepciones por fila; el resultado de cada fila se informa por separado.

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/door-access/users/{facilityId}/bulk

Solicitud de ejemplo

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

Respuesta

{}

Reemplazar las concesiones de autorización híbrida de una fila de User Access

Conexión con el evaluador híbrido de la Fase 3. Las concesiones conviven con las reglas de etiquetas de la instalación: se permite el acceso a un usuario cuando coincide cualquiera de ellas al desbloquear.

Parámetros

facilityId `string` (obligatorio) userId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

PUT /api/door-access/users/{facilityId}/{userId}/grants

Solicitud de ejemplo

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

Respuesta

{}

Reemplazar las concesiones adicionales de Access Time Windows de una fila de User Access

Reemplaza solo `timeWindowGrants`; no se modifican las `grants` permanentes ni las `sourceTimeWindows` de la integración. Cada elemento requiere un alcance (`facilityWide`, `doors` o `groups`) y una `window` absoluta o semanal. Enviar un array vacío borra explícitamente todas las franjas del administrador.

Parámetros

facilityId `string` (obligatorio) userId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

PUT /api/door-access/users/{facilityId}/{userId}/time-window-grants

Solicitud de ejemplo

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

Respuesta

{}

Congelar una fila de User Access frente a las actualizaciones de sincronización del origen

Establece `decoupledFromSource: true`, borra todas las `sourceTimeWindows` que pertenecen a la integración y hace que la sincronización (cron + streams) registre y omita esta fila hasta que un administrador borre la marca mediante /recouple.

Parámetros

facilityId `string` (obligatorio) userId `string` (obligatorio)

Endpoint

POST /api/door-access/users/{facilityId}/{userId}/decouple

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/decouple \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Volver a vincular una fila de User Access a las actualizaciones de sincronización del origen

Parámetros

facilityId `string` (obligatorio) userId `string` (obligatorio)

Endpoint

POST /api/door-access/users/{facilityId}/{userId}/recouple

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/recouple \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Revocar todos los tokens de actualización de la aplicación de Door & Gate Access de un usuario

Revoca según el teléfono o el correo electrónico guardados del usuario (la tabla de tokens de actualización usa como clave `sha256(plaintext)`; los GSI byMobilePhone / byEmail permiten eliminar en abanico a partir de un solo usuario). También se cerraría la sesión de otros usuarios que compartan el mismo teléfono o correo electrónico en otra instalación.

Parámetros

facilityId `string` (obligatorio) userId `string` (obligatorio)

Endpoint

POST /api/door-access/users/{facilityId}/{userId}/logout

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/logout \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

(Re)enviar a un usuario el correo electrónico de invitación a la aplicación de Door & Gate Access

Fuerza el envío del correo electrónico de invitación para descargar la aplicación a la dirección de correo guardada del usuario (solo correo electrónico; sin SMS). Ignora las comprobaciones de elegibilidad y de envío previo que usa la sincronización automática, porque es una acción explícita del administrador. Devuelve 400 si el usuario no tiene correo electrónico registrado.

Parámetros

facilityId `string` (obligatorio) userId `string` (obligatorio)

Endpoint

POST /api/door-access/users/{facilityId}/{userId}/resend-invite

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/resend-invite \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Vista previa de los destinatarios de un envío masivo de invitaciones a la aplicación

Calcula el conjunto de usuarios que recibirían un correo electrónico de invitación a la aplicación. El grupo base son todos los usuarios no eliminados con correo electrónico que nunca han usado la aplicación (`appLastSeenAt` vacío). De forma predeterminada, el grupo se reduce a los usuarios que actualmente tienen acceso (coincidencia de regla o concesión) y que nunca han sido invitados; `includeAlreadyInvited` e `includeNoAccess` lo amplían. No se envían correos: devuelve recuentos, una pequeña muestra y los userIds candidatos para el endpoint de ejecución.

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/door-access/users/{facilityId}/bulk-invite/preview

Solicitud de ejemplo

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

Respuesta

{}

Enviar correos electrónicos de invitación a la aplicación a un lote de usuarios

Envía el correo electrónico de invitación para descargar la aplicación a cada uno de los userIds proporcionados (máximo 50 por solicitud; el cliente divide en lotes la lista completa de candidatos de la vista previa). Cada usuario se vuelve a validar en el momento del envío: las filas que ya no existen, no tienen correo electrónico o han usado la aplicación desde la vista previa se omiten, nunca se marcan como fallidas. El resultado de cada usuario se informa por separado para que el cliente pueda resumir los enviados, fallidos y omitidos.

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/door-access/users/{facilityId}/bulk-invite

Solicitud de ejemplo

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

Respuesta

{}

Listar los grupos de puertas de una instalación

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/door-access/door-groups/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Crear un grupo de puertas

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/door-access/door-groups/{facilityId}

Solicitud de ejemplo

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

Obtener un solo grupo de puertas

Parámetros

facilityId `string` (obligatorio) groupId `string` (obligatorio)

Endpoint

GET /api/door-access/door-groups/{facilityId}/{groupId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Actualizar un grupo de puertas

Parámetros

facilityId `string` (obligatorio) groupId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

PATCH /api/door-access/door-groups/{facilityId}/{groupId}

Solicitud de ejemplo

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

Respuesta

{}

Eliminación lógica de un grupo de puertas

Parámetros

facilityId `string` (obligatorio) groupId `string` (obligatorio)

Endpoint

DELETE /api/door-access/door-groups/{facilityId}/{groupId}

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Listar las integraciones con socios configuradas en una instalación

Devuelve las integraciones con socios de la instalación (id, nombre, logotipo, habilitada) uniendo ph-facility-partner-config con el catálogo ph-partners. Con alcance de door-gate-access (para que los administradores sin acceso a external-integrations puedan mostrar las insignias de socios y la lista de sincronización por socio).

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/door-access/partners/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Leer la configuración de sincronización de User Access de una instalación

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/door-access/sync-config/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Actualizar la configuración de sincronización de User Access de una instalación

Solo se aceptan los campos que controla el administrador (`enabled`, `requireIdentifier` y el mapa `partners` del socio); `lastRunAt` y `lastRunCounts` los escribe el propio motor de sincronización. `partner.partners` es un mapa de habilitación por socio con partnerId como clave (exclusión voluntaria): cuando el `partner.enabled` principal está activado, un socio se sincroniza a menos que tenga aquí una entrada explícita `{ enabled: false }`.

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

PUT /api/door-access/sync-config/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Leer la configuración de mensajería automatizada por usuario de una instalación

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/door-access/auto-messages/{facilityId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Actualizar la configuración de mensajería automatizada por usuario de una instalación

Guarda las reglas y luego vuelve a evaluar de inmediato cada fila de User Access de la instalación, para que los usuarios existentes reciban o pierdan su mensaje automatizado al instante. Los mensajes manuales y las filas desvinculadas no se modifican.

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

PUT /api/door-access/auto-messages/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Estado de la reevaluación en segundo plano de los mensajes automáticos

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/door-access/auto-messages/{facilityId}/sweep-status

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId}/sweep-status \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Ejecutar a demanda una sincronización de User Access en una instalación

Recorre de forma síncrona cada origen habilitado (socio / CCTV) de la instalación y consolida las filas de ph-door-access-users mediante la cascada de deduplicación. Devuelve recuentos por origen. Los orígenes deshabilitados aparecen como `skippedSyncDisabled: 1` en lugar de omitirse, para que la interfaz pueda mostrar ambas filas de forma coherente.

Parámetros

facilityId `string` (obligatorio)

Endpoint

POST /api/door-access/sync/{facilityId}/run

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/run \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Vista previa de prueba de una eliminación masiva de usuarios sincronizados desde socios

Devuelve el recuento y una muestra de las filas de acceso de usuario que se eliminarían de forma lógica, además de un confirmToken que debe devolverse al endpoint de ejecución. No se modifica ningún dato. Los registros de acceso nunca se ven afectados.

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/door-access/sync/{facilityId}/bulk-delete/preview

Solicitud de ejemplo

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

Respuesta

{}

Ejecutar una eliminación masiva de usuarios sincronizados desde socios (eliminación lógica)

Elimina de forma lógica todas las filas de acceso de usuario sincronizadas desde socios dentro del alcance. Requiere el confirmToken devuelto por la vista previa; si el conjunto actual cambió desde la vista previa, el token no coincidirá y la solicitud se rechaza (409) para que el administrador vuelva a revisarla. Los registros de acceso se conservan.

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/door-access/sync/{facilityId}/bulk-delete

Solicitud de ejemplo

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

Respuesta

{}

Actividad reciente de sincronización de User Access (registro para solución de problemas)

Devuelve los resultados de sincronización más recientes de una instalación (creado / omitido / deshabilitado) con el motivo, para que los administradores vean por qué un miembro se sincronizó o no. Del más reciente al más antiguo.

Parámetros

facilityId `string` (obligatorio) limit `integer` (opcional)

Endpoint

GET /api/door-access/sync/{facilityId}/log

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/log \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Listar los eventos de Door & Gate Access de una instalación

Devuelve los eventos de desbloqueo móvil, de anulación del administrador y de la API externa de socios en un solo feed en orden cronológico inverso.

Parámetros

facilityId `string` (obligatorio) from `integer` (opcional) to `integer` (opcional) limit `integer` (opcional)

Endpoint

GET /api/door-access/events/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Simular una evaluación de geovalla para el pin del modo de prueba del administrador

Cuerpo de la solicitud

Endpoint

POST /api/door-access/geofence/test

Solicitud de ejemplo

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

Respuesta

{}

Obtener el estado de incorporación y activación de una instalación

Controla la página de inicio "Get Started" y el banner de progreso de configuración de la aplicación. Devuelve los recuentos en vivo de puertas y usuarios, los dos pasos principales derivados (existe un usuario, existe una puerta), las marcas opcionales de "revisado" guardadas y si la instalación está activada (ambos pasos principales completados). La primera vez que se activa una instalación, se registra la marca de tiempo activatedAt.

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/door-access/onboarding/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Actualizar las marcas opcionales de "revisado" de la incorporación de una instalación

Guarda las marcas opcionales de la lista de configuración que marca un administrador (reglas de acceso, configuración de sincronización, geovallas). Los pasos principales y la activación se derivan en vivo de los recuentos de datos y no se pueden establecer aquí. Devuelve el estado de incorporación completo y actualizado.

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

PUT /api/door-access/onboarding/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una respuesta JSON con los datos de análisis de la instalación.

Parámetros

clubId `string` (opcional) El ID de la instalación cuyos datos de análisis se obtendrán. fromDate `string` (opcional) La fecha de inicio de los datos de análisis que se obtendrán. toDate `string` (opcional) La fecha de fin de los datos de análisis que se obtendrán.

Endpoint

GET /clubs/{clubId}/lead-events

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una respuesta JSON con los datos de análisis de la instalación.

Parámetros

clubId `string` (opcional) El ID de la instalación cuyos datos de análisis se obtendrán. fromDate `string` (opcional) La fecha de inicio de los datos de análisis que se obtendrán. toDate `string` (opcional) La fecha de fin de los datos de análisis que se obtendrán.

Endpoint

GET /clubs/{clubId}/analytics/page-views

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una respuesta JSON con los datos de análisis de la instalación.

Parámetros

clubId `string` (opcional) El ID de la instalación cuyos datos de análisis se obtendrán. fromDate `string` (opcional) La fecha de inicio de los datos de análisis que se obtendrán. toDate `string` (opcional) La fecha de fin de los datos de análisis que se obtendrán.

Endpoint

GET /clubs/{clubId}/analytics/referrers

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una respuesta JSON con los datos de análisis de la instalación.

Parámetros

clubId `string` (opcional) El ID de la instalación cuyos datos de análisis se obtendrán. fromDate `string` (opcional) La fecha de inicio de los datos de análisis que se obtendrán. toDate `string` (opcional) La fecha de fin de los datos de análisis que se obtendrán.

Endpoint

GET /clubs/{clubId}/analytics/socials

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una respuesta JSON con los datos de análisis de la instalación.

Parámetros

clubId `string` (opcional) El ID de la instalación cuyos datos de análisis se obtendrán. fromDate `string` (opcional) La fecha de inicio de los datos de análisis que se obtendrán. toDate `string` (opcional) La fecha de fin de los datos de análisis que se obtendrán.

Endpoint

GET /clubs/{clubId}/analytics/top-cities

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una respuesta JSON con los datos de análisis de la instalación.

Parámetros

clubId `string` (opcional) El ID de la instalación cuyos datos de análisis se obtendrán. fromDate `string` (opcional) La fecha de inicio de los datos de análisis que se obtendrán. toDate `string` (opcional) La fecha de fin de los datos de análisis que se obtendrán.

Endpoint

GET /clubs/{clubId}/analytics/total-page-views

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una respuesta JSON con los datos de análisis de la instalación.

Parámetros

clubId `string` (opcional) El ID de la instalación cuyos datos de análisis se obtendrán. fromDate `string` (opcional) La fecha de inicio de los datos de análisis que se obtendrán. toDate `string` (opcional) La fecha de fin de los datos de análisis que se obtendrán.

Endpoint

GET /clubs/{clubId}/analytics/traffic

Solicitud de ejemplo

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

Respuesta

{}

Genera un JWT (JSON Web Token) temporal de front-end para los gráficos integrables de Google Analytics en la página 'analytics' del front-end.

Endpoint

GET /api/ga/onetimetoken

Solicitud de ejemplo

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

Respuesta

{}

Devuelve los widgets del panel de 'The Training Camp' si la instalación tiene miembros activos.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/reporting/apps/widgets/{club}

Solicitud de ejemplo

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

Respuesta

{}

Devuelve todos los feriados de la instalación sin revisar.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/reporting/club/{club}/unreviewed-holidays

Solicitud de ejemplo

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

Respuesta

{}

Marcar como revisados todos los feriados de la instalación sin revisar.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

PUT /api/reporting/club/{club}/review-holidays

Solicitud de ejemplo

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

Respuesta

{}

Devuelve el informe de KPI en formato CSV, desglosado mes a mes durante los últimos 12 meses. *NOTA* Esto crea un único informe para TODAS las instalaciones del sistema. No lo ejecutes varias veces en paralelo o sobrecargarás GymMaster.

Parámetros

months `string` (opcional) Número de meses (desde la fecha actual) que se obtendrán (12 de forma predeterminada)

Endpoint

GET /api/reporting/gymmaster/all-clubs-kpi-report

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/reporting/gymmaster/all-clubs-kpi-report \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve los gráficos de ingresos del MMS de una instalación.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. range `string` (opcional) Rango en días (contando hacia atrás desde la fecha actual) que se quiere obtener

Endpoint

GET /api/reporting/gymmaster/revenuegraph/{club}

Solicitud de ejemplo

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

Respuesta

{}

Devuelve los datos y análisis del MMS (Member Management System) del panel para una instalación. Los datos incluyen estadísticas de GymMaster/Perfect Gym y otras métricas internas que recopila nuestro sistema.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. range `string` (opcional) Rango en días (contando hacia atrás desde la fecha actual) que se quiere obtener

Endpoint

GET /api/reporting/gymmaster/widgets/{club}

Solicitud de ejemplo

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

Respuesta

{}

Devuelve los datos del widget de Myzone del panel para una instalación.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/reporting/myzone/widgets/{club}

Solicitud de ejemplo

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

Respuesta

{}

Devuelve un objeto con los servicios que se consideran sin conexión según uno o más de nuestros endpoints de página de estado o supervisión, configurados mediante la herramienta interna 'Uptime Kuma'.

Endpoint

GET /api/reporting/statuspage/events

Solicitud de ejemplo

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

Respuesta

{}

Devuelve las próximas reservas de entrenamiento de los siguientes 7 días.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/reporting/clubs/{club}/workout-bookings

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/reporting/clubs/{club}/workout-bookings \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista histórica de feriados de una instalación.

Parámetros

clubId `string` (opcional) ID del club fromDate `string` (opcional) Marca de tiempo Unix de la fecha de inicio del rango de feriados que se devolverán. toDate `string` (opcional) Marca de tiempo Unix de la fecha de fin del rango de feriados que se devolverán.

Endpoint

GET /api/clubs/{clubId}/historical-holidays

Solicitud de ejemplo

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

Respuesta

{}

Devuelve las automatizaciones de dispositivos asociadas a la instalación.

Parámetros

club `string` (obligatorio) ID interno del club cuyos dispositivos quieres ver.

Endpoint

GET /api/ics/automations/list/{club}

Solicitud de ejemplo

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

Respuesta

{}

Actualiza la configuración de dispositivo de una pantalla o un dispositivo existente.

Parámetros

club `string` (obligatorio) ID interno de la instalación cuyo dispositivo quieres actualizar. body `string` (obligatorio) Objeto JSON con los parámetros de actualización.

Endpoint

POST /api/ics/automations/update/{club}

Solicitud de ejemplo

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

Respuesta

{}

Agrega o asocia una pantalla o computadora física a tu instalación.

Parámetros

club `string` (obligatorio) ID interno del club en el que quieres agregar el dispositivo. body `string` (obligatorio) Objeto JSON de la nueva pantalla que se asociará.

Endpoint

POST /api/ics/devices/add/{club}

Solicitud de ejemplo

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

Respuesta

{}

Indica al dispositivo que se conecte a un nuevo SSID según los parámetros.

Parámetros

club `string` (obligatorio) ID interno de la instalación cuyo dispositivo quieres actualizar. body `string` (obligatorio) Objeto JSON con los parámetros de actualización.

Endpoint

POST /api/ics/devices/changewifi/{club}

Solicitud de ejemplo

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

Respuesta

{}

Actualiza la configuración de dispositivo de una pantalla o un dispositivo existente.

Parámetros

club `string` (obligatorio) ID interno de la instalación cuyo dispositivo quieres actualizar. body `string` (obligatorio) Objeto JSON con los parámetros de actualización.

Endpoint

POST /api/ics/devices/command/{club}

Solicitud de ejemplo

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

Respuesta

{}

Carga una URL o página web en la pantalla de un dispositivo específico.

Parámetros

club `string` (obligatorio) ID interno de la instalación cuyo dispositivo quieres actualizar. body `string` (obligatorio) Objeto JSON con los parámetros de actualización.

Endpoint

POST /api/ics/devices/loadurl/{club}

Solicitud de ejemplo

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

Respuesta

{}

Actualiza la configuración de dispositivo de una pantalla o un dispositivo existente.

Parámetros

club `string` (obligatorio) ID interno de la instalación cuyo dispositivo quieres actualizar. body `string` (obligatorio) Objeto JSON con los parámetros de actualización.

Endpoint

PUT /api/ics/devices/update/{club}

Solicitud de ejemplo

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

Respuesta

{}

Cambia el nombre de una pantalla o un dispositivo. Solo afecta al registro: a diferencia del endpoint de actualización, no envía nada al dispositivo, por lo que también está disponible para pantallas con una versión de software al final de su vida útil.

Parámetros

club `string` (obligatorio) ID interno de la instalación a la que pertenece el dispositivo. body `string` (obligatorio) Objeto JSON con los parámetros del cambio de nombre.

Endpoint

PUT /api/ics/devices/rename/{club}

Solicitud de ejemplo

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

Respuesta

{}

Obtiene los widgets y los enlaces a contenido multimedia sin conexión de una instalación, según la fecha proporcionada.

Parámetros

club `string` (obligatorio) ID interno de la instalación cuyo programa de contenido con plantilla quieres cambiar. date `string` (obligatorio) Fecha para la que se devuelven las URL de los widgets. Usa el formato `YYYY-MM-DD`.

Endpoint

GET /api/ics/external-resources/{club}

Solicitud de ejemplo

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

Respuesta

{}

Obtiene los widgets y los enlaces a contenido multimedia sin conexión de una instalación, según la fecha proporcionada.

Parámetros

club `string` (obligatorio) ID interno de la instalación cuyo programa de contenido con plantilla quieres cambiar.

Endpoint

GET /api/ics/list-scheduled-workouts/{club}

Solicitud de ejemplo

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

Respuesta

{}

Cambia el programa de contenido con plantilla de una instalación.

Parámetros

club `string` (obligatorio) ID interno de la instalación cuyo programa de contenido con plantilla quieres cambiar. body `string` (obligatorio) Objeto JSON con el nuevo programa que se aplicará.

Endpoint

POST /api/ics/loadprogram/{club}

Solicitud de ejemplo

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

Respuesta

{}

Obtiene la configuración del programa de una pantalla o un dispositivo existente.

Parámetros

club `string` (obligatorio) ID interno de la instalación cuyos datos de programa quieres obtener.

Endpoint

GET /api/ics/programs/{club}

Solicitud de ejemplo

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

Respuesta

{}

Actualiza la configuración del programa de una pantalla o un dispositivo existente.

Parámetros

club `string` (obligatorio) ID interno de la instalación cuyo dispositivo quieres actualizar. body `string` (obligatorio) Objeto JSON con los parámetros de actualización.

Endpoint

PUT /api/ics/programs/{club}

Solicitud de ejemplo

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

Respuesta

{}

Obtiene las opciones de configuración del programa.

Endpoint

GET /api/ics/programs/options/{facilityID}

Solicitud de ejemplo

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

Respuesta

{}

Chat con contexto RAG. No tiene acceso a herramientas, solo a una herramienta sencilla de solicitud y respuesta de API que te permite obtener conocimiento directamente de la base de conocimiento.

Parámetros

organisationId `string` (opcional) El ID de la organización (se detecta automáticamente si no se proporciona)

Cuerpo de la solicitud

Endpoint

POST /api/llm/chat

Solicitud de ejemplo

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

Respuesta

{}

Eliminar los embeddings de artículos del almacén de vectores y actualizar el estado de seguimiento de embeddings

Cuerpo de la solicitud

Endpoint

DELETE /api/llm/delete-article

Solicitud de ejemplo

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

Respuesta

{}

Listar los registros del seguimiento de embeddings por organización y estado

Parámetros

organisationId `string` (opcional) ID de la organización (se resuelve automáticamente si se omite) status `string` (obligatorio) Estado por el que se filtrará (debe ser in_queue, done, anomaly, fail o deleted) Limit `string` (opcional) Máximo de elementos por página LastEvaluatedKey `string` (opcional) JSON del LastEvaluatedKey de DynamoDB para la paginación

Endpoint

GET /api/llm/embedding-track/by-org-and-status

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/llm/embedding-track/by-org-and-status \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Listar los registros del seguimiento de embeddings por organización (con filtro opcional por tipo de recurso)

Parámetros

organisationId `string` (opcional) ID de la organización (se resuelve automáticamente si se omite) resourceType `string` (opcional) Tipo de recurso opcional (p. ej., "article"). Si se proporciona, filtra los registros cuyo resourceTypeId empieza por "{type}#". Limit `string` (opcional) Máximo de elementos por página LastEvaluatedKey `string` (opcional) JSON del LastEvaluatedKey de DynamoDB para la paginación

Endpoint

GET /api/llm/embedding-track/by-org

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/llm/embedding-track/by-org \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Inicializar la colección de la base de datos vectorial de la organización

Parámetros

organisationId `string` (opcional) El ID de la organización (se detecta automáticamente si no se proporciona)

Endpoint

POST /api/llm/init-org

Solicitud de ejemplo

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

Respuesta

{}

Búsqueda semántica en la base de conocimiento

Parámetros

organisationId `string` (opcional) El ID de la organización (se detecta automáticamente si no se proporciona)

Cuerpo de la solicitud

Endpoint

POST /api/llm/semantic-search

Solicitud de ejemplo

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

Respuesta

{}

Iniciar el procesamiento en streaming de los artículos en cola para generar embeddings, con actualizaciones de progreso en tiempo real

Parámetros

organisationId `string` (opcional) El ID de la organización (se detecta automáticamente si no se proporciona)

Endpoint

POST /api/llm/start-embedding-stream

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/llm/start-embedding-stream \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Insertar o actualizar los embeddings de artículos en la base de datos vectorial

Gestiona los embeddings de artículos según su estado actual: - Si el artículo no está publicado O es privado: elimina los embeddings - Si el artículo está publicado Y es público: vuelve a generar los embeddings con el contenido completo Siempre requiere el cuerpo completo del artículo.

Parámetros

organisationId `string` (opcional) El ID de la organización (se detecta automáticamente si no se proporciona)

Cuerpo de la solicitud

Endpoint

POST /api/llm/upsert-embeddings

Solicitud de ejemplo

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

Respuesta

{}

Endpoint de prueba para eliminar en lote los embeddings de artículos por organización y estado opcional

Parámetros

organisationId `string` (opcional) ID de la organización (se resuelve automáticamente a partir del contexto del usuario si se omite) status `string` (opcional) Estado por el que se filtrará (opcional; si se omite, elimina TODOS los artículos de la organización sin importar su estado) hardDelete `string` (opcional) Si se eliminan definitivamente los registros de seguimiento de embeddings (true) o de forma lógica actualizando su estado (false)

Endpoint

DELETE /api/llm/test/batch-delete-by-status

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/llm/test/batch-delete-by-status \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Transformar y fragmentar texto con estadísticas detalladas

Endpoint de prueba que transforma el texto y lo divide en fragmentos, y luego ofrece estadísticas detalladas sobre la distribución de los fragmentos, incluidos recuentos de caracteres, porcentajes y métricas de calidad, para ayudar a evaluar la eficacia de la fragmentación.

Cuerpo de la solicitud

Endpoint

POST /api/llm/test/transform-chunk

Solicitud de ejemplo

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

Respuesta

{}

Obtener el recuento total de vectores del índice vectorial de la organización

Endpoint de prueba para contar todos los vectores del índice vectorial de la organización del usuario actual

Parámetros

organisationId `string` (opcional) El ID de la organización (se detecta automáticamente si no se proporciona)

Endpoint

GET /api/llm/test/vector-count

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-count \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Eliminar del índice vectorial todos los vectores de un articleId específico

Endpoint de prueba para eliminar todos los vectores asociados a un articleId específico del índice vectorial de la organización del usuario actual.

Parámetros

organisationId `string` (opcional) El ID de la organización (se detecta automáticamente si no se proporciona) articleId `string` (obligatorio) El articleId cuyos vectores se eliminarán dryRun `string` (opcional) Si es true, solo muestra lo que se eliminaría sin eliminarlo realmente

Endpoint

DELETE /api/llm/test/vector-delete-article

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/llm/test/vector-delete-article \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Probar el Vector SDK listando todos los índices

Endpoint de prueba para verificar la conectividad del Vector SDK y listar todos los índices del bucket de vectores

Endpoint

GET /api/llm/test/vector-indices

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-indices \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Inicializar el índice vectorial de una organización

Crea el bucket y el índice vectoriales de la organización del usuario actual

Parámetros

organisationId `string` (opcional) El ID de la organización (se detecta automáticamente si no se proporciona)

Endpoint

POST /api/llm/test/vector-init-index

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/llm/test/vector-init-index \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Obtener todos los metadatos de vectores de un articleId específico

Endpoint de prueba para obtener del índice vectorial todos los fragmentos de vectores y sus metadatos de un articleId específico. Es útil para revisar cómo se fragmenta y almacena un artículo. El filtrado lo realiza el servicio del almacén de vectores.

Parámetros

organisationId `string` (opcional) El ID de la organización (se detecta automáticamente si no se proporciona) articleId `string` (obligatorio) El ID del artículo cuyos metadatos de vectores se obtendrán

Endpoint

GET /api/llm/test/vector-metadata-by-article

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-metadata-by-article \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Obtener los vectores recientes con metadatos del índice vectorial

Endpoint de prueba para obtener del índice vectorial los 10 vectores más recientes con metadatos (pero sin los datos del vector) de la organización del usuario actual. Es útil para revisar la estructura de los metadatos.

Parámetros

organisationId `string` (opcional) El ID de la organización (se detecta automáticamente si no se proporciona) limit `string` (opcional) Número de vectores recientes que se devolverán (máximo 100)

Endpoint

GET /api/llm/test/vector-recent

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-recent \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Carga un recurso para el Marketing Manager/Designer en el almacenamiento S3.

Parámetros

file `string` (opcional) Nombre del archivo o recurso que se cargará.

Endpoint

POST /api/marketing/design/static/download

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/marketing/design/static/download \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve el recurso individual en formato JSON para cargarlo en el administrador de recursos.

Parámetros

id `string` (obligatorio) ID del recurso que se obtendrá. organisationId `string` (obligatorio) El ID de la organización de la instalación a la que pertenece el recurso.

Endpoint

GET /api/marketing/assets/get/{id}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets/get/{id} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve todos los recursos de diseño.

Parámetros

body `string` (obligatorio) Objeto JSON con los datos de la instalación que quieres guardar. organisationId `string` (obligatorio) El ID de la organización de la instalación a la que pertenece el recurso. useCache `string` (opcional) search `string` (opcional) La consulta de búsqueda para filtrar los recursos por nombre o etiquetas. brand `string` (opcional) La marca por la que se filtrarán los recursos. tag `string` (opcional) La etiqueta por la que se filtrarán los recursos.

Endpoint

GET /api/marketing/assets/get

Solicitud de ejemplo

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

Respuesta

{}

Devuelve una sola página de recursos de marketing impresos de una organización. Usa Algolia para la búsqueda por relevancia y la paginación por páginas (con recuentos totales), y recurre a DynamoDB cuando Algolia no está disponible.

Parámetros

organisationId `string` (obligatorio) El ID de la organización de la instalación a la que pertenecen los recursos. search `string` (opcional) La consulta de búsqueda para filtrar los recursos por nombre o etiquetas. brand `string` (opcional) La marca por la que se filtrarán los recursos. tag `string` (opcional) La etiqueta por la que se filtrarán los recursos. page `string` (opcional) Número de página (empezando en cero) que se obtendrá. limit `string` (opcional) Número de recursos por página (máximo 300). useCache `string` (opcional) Si es false, omite Algolia y consulta DynamoDB directamente.

Endpoint

GET /api/marketing/assets

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la lista de recursos disponibles que se cargaron mediante el administrador de recursos.

Parámetros

organisationId `string` (obligatorio)

Endpoint

GET /api/marketing/assets/list

Solicitud de ejemplo

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

Respuesta

{}

Agrega o guarda un recurso.

Parámetros

body `string` (obligatorio) Objeto JSON con los datos de la instalación que quieres guardar. organisationId `string` (obligatorio) El ID de la organización de la instalación a la que pertenece el recurso.

Endpoint

PUT /api/marketing/assets/save

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/assets/save \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Carga un recurso para el Marketing Manager/Designer en el almacenamiento S3.

Parámetros

file `string` (opcional) Nombre del archivo o recurso que se cargará. organisationId `string` (opcional) El ID de la organización a la que pertenece el recurso.

Endpoint

POST /api/marketing/assets/upload

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la lista de todas las páginas personalizadas de una organización.

Parámetros

organisationId `string` (obligatorio) ID interno de la organización cuyas páginas personalizadas se devolverán.

Endpoint

GET /api/marketing/custom-pages

Solicitud de ejemplo

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

Respuesta

{}

Inserta o actualiza una página personalizada de una organización.

Parámetros

organisationId `string` (obligatorio) ID interno de la organización cuyas páginas personalizadas se devolverán. body `object` (obligatorio) Datos de la página personalizada que se insertarán o actualizarán.

Endpoint

PUT /api/marketing/custom-pages

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/custom-pages \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista de todas las páginas personalizadas de una instalación.

Parámetros

facilityId `string` (obligatorio) ID interno de la instalación cuyas páginas personalizadas se devolverán.

Endpoint

GET /api/facilities/{facilityId}/marketing/custom-pages

Solicitud de ejemplo

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

Respuesta

{}

Devuelve todos los diseños exportados o renderizados de un ID de instalación específico.

Parámetros

club `string` (obligatorio) ID interno de la instalación que hace la solicitud. sort `string` (opcional) Criterio para ordenar los diseños; se admiten 'oldest', 'newest' o 'design'.

Endpoint

GET /api/marketing/designs/{club}/exports

Solicitud de ejemplo

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

Respuesta

{}

Devuelve el contenido HTML individual de un diseño en formato JSON para cargarlo en el editor.

Parámetros

id `string` (obligatorio) ID del diseño que se obtendrá.

Endpoint

GET /api/marketing/designs/get/{id}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/get/{id} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista de asignaciones de entradas de los diseños de marketing e impresión y de las plantillas de diseño

Parámetros

clubId `string` (obligatorio) ID interno de la instalación que hace la solicitud. availableFeatures `string` (opcional) Devolver todos los elementos con funciones específicas brand `string` (opcional) Filtra los diseños por marca features `string` (opcional) Filtrar los resultados según las funciones

Endpoint

GET /api/marketing/designs/input-mapping/{clubId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/input-mapping/{clubId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista de diseños disponibles para una instalación, que pueden usarse en los diseños (Print Designs) creados en el editor de marketing e impresión del hub.

Parámetros

club `string` (obligatorio) ID interno de la instalación que hace la solicitud. designAdmin `string` (opcional) Devolver todos los datos de diseño (vista de administrador; requiere que el usuario sea administrador). brand `string` (opcional) Filtra los diseños por marca

Endpoint

GET /api/marketing/designs/{club}/list

Solicitud de ejemplo

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

Respuesta

{}

Obliga al sistema a renderizar o volver a renderizar todas las miniaturas y vistas previas de los diseños (se usa principalmente si cambiamos recursos 'upstream' en S3, etc.)... **NOTA** Solo puedes llamar a esta función una vez cada X minutos (y no puedes llamarla si ya hay un renderizado en curso). Esto evita una carga excesiva en nuestros servidores al renderizar todos los diseños...

Endpoint

GET /api/marketing/designs/render-all-thumbnails

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/render-all-thumbnails \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Inicia el renderizado de un diseño dinámico

Parámetros

body `string` (obligatorio) Objeto JSON con los datos de la instalación que quieres enviar al procesador de renderizado de diseños...

Endpoint

POST /api/marketing/designs/dynamic/render-design

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/marketing/designs/dynamic/render-design \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Agrega, guarda o actualiza un diseño.

Parámetros

body `string` (obligatorio) Objeto JSON con los datos de la instalación que quieres guardar.

Endpoint

PUT /api/marketing/designs/{club}/save

Solicitud de ejemplo

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

Respuesta

{}

Devuelve el diseño estático individual en formato JSON para cargarlo

Parámetros

id `string` (obligatorio) ID del diseño estático que se obtendrá.

Endpoint

GET /api/marketing/designs/static/get/{id}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/static/get/{id} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Agrega, guarda o actualiza una plantilla de diseño estático.

Parámetros

body `string` (obligatorio) Objeto JSON con los datos de la instalación que quieres guardar.

Endpoint

PUT /api/marketing/designs/static/{club}/save

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/marketing/designs/static/{club}/save \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Quita del sistema una variable definida por el usuario.

Parámetros

club `string` (obligatorio) ID interno de la instalación que hace la solicitud. body `string` (obligatorio) JSON con el ID de la variable que se quitará.

Endpoint

DELETE /api/marketing/variables/{club}/delete

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/marketing/variables/{club}/delete \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista de variables disponibles para una instalación, que pueden usarse en los diseños (Print Designs) creados en el editor de marketing e impresión del hub.

Parámetros

club `string` (obligatorio) ID interno de la instalación que hace la solicitud.

Endpoint

GET /api/marketing/variables/{club}/list

Solicitud de ejemplo

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

Respuesta

{}

Crea una nueva 'variable' de usuario para la instalación indicada.

Parámetros

club `string` (obligatorio) ID interno de la instalación que hace la solicitud. body `string` (obligatorio) Objeto JSON de la nueva variable.

Endpoint

POST /api/marketing/variables/{club}/new

Solicitud de ejemplo

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

Respuesta

{}

Agrega, guarda o actualiza una o más variables de diseño en el sistema mediante un array de objetos.

Parámetros

club `string` (obligatorio) ID interno de la instalación que hace la solicitud. body `string` (obligatorio) Array de uno o más objetos JSON que se agregarán o actualizarán (permite guardar varios elementos u objetos en una sola solicitud a la API).

Endpoint

PUT /api/marketing/variables/{club}/save

Solicitud de ejemplo

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

Respuesta

{}

Devuelve el manifiesto de la documentación de MCP para el usuario que inició sesión

Alimenta la página `/mcp-docs` de la aplicación. Devuelve la URL del servidor MCP, los encabezados de autenticación admitidos, la identidad y la marca de administrador de quien llama, y la lista de herramientas filtrada (con el mismo filtro que `/mcp/tools/list`, para que la página de documentación nunca muestre una herramienta que quien llama no pueda usar realmente).

Endpoint

GET /api/mcp/docs-manifest

Solicitud de ejemplo

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

Respuesta

{}

Crear un acuerdo de usuario.

Parámetros

body `object` (obligatorio) Objeto JSON con los datos de la instalación que quieres guardar.

Endpoint

POST /api/member-agreements/contracts-tna/:club

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista de acuerdos.

Endpoint

GET /api/member-agreements/contracts-tna/:club

Solicitud de ejemplo

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

Respuesta

{}

Eliminar un acuerdo de usuario.

Endpoint

DELETE /api/member-agreements/contracts-tna/:club/:id

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve un acuerdo específico.

Endpoint

GET /api/member-agreements/contracts-tna/:club/:id

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Actualizar un acuerdo de usuario.

Parámetros

body `object` (obligatorio) Objeto JSON con los datos de la instalación que quieres guardar.

Endpoint

PATCH /api/member-agreements/contracts-tna/:club/:id

Solicitud de ejemplo

curl -X PATCH https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Obtener los acuerdos predeterminados de la instalación.

Parámetros

body `object` (obligatorio) Objeto JSON con los datos de la instalación que quieres guardar.

Endpoint

GET /api/member-agreements/default-tna/:club

Solicitud de ejemplo

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

Respuesta

{}

Establecer el acuerdo predeterminado de la instalación.

Parámetros

body `object` (obligatorio) Objeto JSON con los datos de la instalación que quieres guardar.

Endpoint

POST /api/member-agreements/default-tna/:club

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/member-agreements/default-tna/:club \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista de acuerdos globales o regionales.

Endpoint

GET /api/member-agreements/global-tna/:club

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la lista de miembros con acuerdo.

Endpoint

GET /api/member-agreements/:club

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la lista de miembros de la instalación por temporada para la aplicación del campamento de entrenamiento.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. season `string` (opcional) Temporada del campamento de entrenamiento por la que quieres filtrar. userIds `string` (opcional) Array de ID de usuario por los que se filtrará. useCache `string` (opcional) Si se usa la caché. isUserMemberInfo `string` (opcional) Si está habilitado, filtra los datos según los userIds (se recomienda usar un solo ID de usuario) e incluye los datos necesarios, como la tabla de clasificación y las preferencias del usuario.

Endpoint

GET /api/members-leads/trainingcamp/club/season-members/{club}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/members-leads/trainingcamp/club/season-members/{club} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Elimina varios prospectos de reservas de entrenamiento.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. body `string` (obligatorio)

Endpoint

DELETE /api/members-leads/workout-booking/club/leads/{club}

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista de prospectos de reservas de entrenamiento de una instalación.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. all `string` (opcional) Si se muestran todos los prospectos o solo los próximos.

Endpoint

GET /api/members-leads/workout-booking/club/leads/{club}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Actualiza un prospecto de reserva de entrenamiento.

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder. body `string` (obligatorio)

Endpoint

PUT /api/members-leads/workout-booking/club/leads/{club}

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Activa o desactiva la marca de un prospecto de reserva de entrenamiento.

Parámetros

club `string` (obligatorio) ID interno del club. body `string` (obligatorio)

Endpoint

PATCH /api/members-leads/workout-booking/club/leads/{club}/flag

Solicitud de ejemplo

curl -X PATCH https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club}/flag \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Obtener los módulos efectivos de una instalación

Devuelve todos los módulos disponibles para una instalación resolviendo la jerarquía: preferencias de la instalación → módulos de la marca → módulos de la organización. Los resultados se guardan en caché en Redis para mejorar el rendimiento.

Parámetros

facilityId `string` (obligatorio) El ID de la instalación cuyos módulos se resolverán

Endpoint

GET /api/facilities/{facilityId}/modules

Solicitud de ejemplo

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

Respuesta

[]

Devuelve el catálogo de módulos y la configuración para mostrar el menú lateral. Se devuelve la lista completa de módulos para que el front-end decida la visibilidad por usuario; la ACL se sigue aplicando en el servidor mediante `auth.checkModuleAccess()`.

Endpoint

GET /api/modules

Solicitud de ejemplo

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

Respuesta

{}

Obtener las categorías de notificaciones.

Endpoint

GET /api/notification/categories

Solicitud de ejemplo

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

Respuesta

{}

Eliminar las notificaciones consumidas.

Endpoint

DELETE /api/club/notification/consumed/:club

Solicitud de ejemplo

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

Respuesta

{}

Crea un mensaje de notificación.

Endpoint

POST /api/club/notification/consumed/:club

Solicitud de ejemplo

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

Respuesta

{}

Devuelve un array de notificaciones consumidas.

Endpoint

GET /api/club/notification/consumed/:club

Solicitud de ejemplo

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

Respuesta

{}

Eliminar un mensaje de notificación.

Endpoint

DELETE /api/club/notification/messages/:club

Solicitud de ejemplo

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

Respuesta

{}

Devuelve un array de mensajes de notificación.

Endpoint

GET /api/club/notification/messages/:club

Solicitud de ejemplo

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

Respuesta

{}

Actualiza un mensaje de notificación.

Endpoint

PATCH /api/club/notification/messages/:club

Solicitud de ejemplo

curl -X PATCH https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Crea un mensaje de notificación.

Parámetros

body `string` (obligatorio)

Endpoint

POST /api/club/notification/messages/:club

Solicitud de ejemplo

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

Respuesta

{}

Obtener quiénes vieron una notificación, por instalación.

Endpoint

POST /api/club/notification/viewers/:club

Solicitud de ejemplo

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

Respuesta

{}

Obtener las categorías de notificaciones por usuario.

Endpoint

GET /api/club/notification/user-categories/:club

Solicitud de ejemplo

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

Respuesta

{}

Crea un mensaje de notificación.

Endpoint

POST /api/notification/webhook

Solicitud de ejemplo

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

Respuesta

{}

Obtener la clave pública VAPID para las notificaciones push de HTML5

Devuelve la clave pública VAPID que se usa para crear suscripciones push del navegador.

Endpoint

GET /html5-push/vapid-public-key

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/html5-push/vapid-public-key \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Guardar o actualizar una suscripción push de HTML5

Guarda una suscripción push del navegador para el usuario actual.

Cuerpo de la solicitud

Endpoint

POST /html5-push/subscribe

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/html5-push/subscribe \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Respuesta

{}

Eliminar una suscripción push de HTML5

Quita una suscripción push del navegador del usuario actual.

Cuerpo de la solicitud

Endpoint

POST /html5-push/unsubscribe

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/html5-push/unsubscribe \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Respuesta

{}

Obtener el estado de incorporación de la ubicación para el usuario que llama

Devuelve las dos partes de la incorporación de una instalación: configuración (detalles + selección de productos, guardados en las preferencias de la instalación) y pago (derivado en vivo del registro de configuración de pago de la facturación SaaS), además de una marca `required` personalizada para quien llama, de la que depende el shell de la aplicación. Solo para ubicaciones con pila tecnológica; las ubicaciones con pila de negocio siempre devuelven required=false.

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/onboarding/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Guardar el progreso en curso del asistente de incorporación de una instalación

Guarda el estado parcial del asistente (selección de productos, texto libre de "Other", detalles del negocio revisados, paso actual) para que, al actualizar o abandonar, se retome donde el usuario lo dejó. Nunca marca la finalización: consulta el endpoint de finalización.

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

PUT /api/onboarding/{facilityId}

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/onboarding/{facilityId} \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Respuesta

{}

Generar sugerencias de autocompletado con IA para el asistente de incorporación

Usa el contexto existente de la instalación, la marca y la organización para proponer detalles de la instalación (texto descriptivo, campos de contacto ordenados), selecciones de productos sugeridas y consejos breves personalizados. Los resultados se guardan en caché en Redis durante 7 días. Las sugerencias son solo orientativas: el cliente las muestra en un formulario de revisión editable. Siempre responde 200; `suggestions` es null cuando la IA no está disponible, para que el asistente siga funcionando sin ella.

Parámetros

facilityId `string` (obligatorio)

Endpoint

POST /api/onboarding/{facilityId}/ai-prefill

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/onboarding/{facilityId}/ai-prefill \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Completar la parte de configuración de la incorporación de la ubicación

Valida las selecciones y los detalles confirmados, guarda los detalles del negocio en el registro de la instalación, crea la distribución del menú técnico de la instalación a partir de la selección de productos (salvo que ya exista una distribución personalizada) y marca la configuración como completada. La parte de pago intencionalmente NO se puede completar aquí: se deriva en vivo del registro de configuración de pago de la facturación SaaS, por lo que el requisito obligatorio de la tarjeta no se puede omitir llamando a este endpoint. Devuelve el estado actualizado.

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/onboarding/{facilityId}/complete

Solicitud de ejemplo

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

Respuesta

{}

Ejecutar una acción declarada de integración con un socio en una instalación

Ejecuta una acción "Run integration" declarada en el registro del socio (ph-partners.actions[]), con alcance de una instalación. Un bloqueo de ejecución única en Redis impide ejecuciones manuales simultáneas de la misma acción e instalación.

Parámetros

partnerId `string` (obligatorio) actionId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/partners/{partnerId}/actions/{actionId}/run

Solicitud de ejemplo

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

Leer el estado de ejecución de una acción de integración con un socio

Devuelve si hay una ejecución manual en curso (bloqueo de ejecución única activo) y la última ejecución solicitada, para que el botón de configuración la consulte periódicamente.

Parámetros

partnerId `string` (obligatorio) actionId `string` (obligatorio) facilityId `string` (obligatorio)

Endpoint

GET /api/partners/{partnerId}/actions/{actionId}/status

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/partners/{partnerId}/actions/{actionId}/status \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Obtener todas las configuraciones de socios de una marca

Parámetros

brandId `string` (obligatorio) El ID de la marca

Endpoint

GET /api/partners/brand-config/{brandId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/partners/brand-config/{brandId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

[]

Crear o actualizar la configuración de un socio para una marca

Parámetros

body `object` (obligatorio)

Endpoint

PUT /api/partners/brand-config

Solicitud de ejemplo

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

Respuesta

{}

Migrar los datos de la integración de GymMaster a facility-partner-config

Consulta todas las instalaciones con los campos gymMasterAPI y gymMasterDomain y crea o actualiza los registros de facility-partner-config correspondientes. Es un endpoint de migración de un solo uso.

Parámetros

partnerId `string` (obligatorio) El ID de socio de GymMaster que se usará en todos los registros migrados dryRun `boolean` (opcional) Si es true, solo informa lo que se migraría, sin escribir en la base de datos

Endpoint

GET /api/partners/migrate-gymmaster

Solicitud de ejemplo

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

Respuesta

{}

Habilitar un socio para una organización.

Parámetros

partnerId `string` (obligatorio) ID del socio

Endpoint

POST /api/partners/organisation/enable

Solicitud de ejemplo

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

Respuesta

{}

Listar los socios de la organización. Los administradores de la organización solo ven los socios de su organización.

Endpoint

GET /api/partners/organisation

Solicitud de ejemplo

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

Respuesta

{}

Quitar un socio de la organización.

Parámetros

keyId `string` (obligatorio) ID de clave del socio de la organización organisationId `string` (obligatorio) ID de la organización del socio

Endpoint

DELETE /api/partners/organisation/{keyId}

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/partners/organisation/{keyId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Actualizar el modo de acceso y los módulos de un socio de la organización.

Parámetros

keyId `string` (obligatorio) ID de clave del socio de la organización organisationId `string` (obligatorio) ID de la organización del socio partnerId `string` (obligatorio) ID del socio accessMode `string` (obligatorio) Modo de acceso del socio modules `string` (opcional) Lista de módulos para el modo de acceso LIMITED

Endpoint

PUT /api/partners/organisation/update-access

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/partners/organisation/update-access \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Crear registros de entrada para una instalación

Acepta un array de objetos de registro de entrada y los reenvía a la API de socios para su procesamiento. Máximo de 25 registros de entrada por solicitud.

Cuerpo de la solicitud

Endpoint

POST /api/partners/check-ins

Solicitud de ejemplo

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

Respuesta

{}

Eliminar la configuración de un socio en una instalación

Quita la configuración de una integración con un socio en una instalación

Parámetros

facilityId `string` (obligatorio) ID de la instalación (ID del club) partnerId `string` (obligatorio) ID del socio

Endpoint

DELETE /api/partners/facility-config/{facilityId}/{partnerId}

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/partners/facility-config/{facilityId}/{partnerId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Listar todas las configuraciones de socios de una instalación

Devuelve todas las integraciones con socios configuradas para la instalación indicada

Parámetros

facilityId `string` (obligatorio) ID de la instalación (ID del club)

Endpoint

GET /api/partners/facility-config/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Crear o actualizar la configuración de un socio en una instalación

Inserta o actualiza la configuración de una integración con un socio en una instalación

Cuerpo de la solicitud

Endpoint

POST /api/partners/facility-config

Solicitud de ejemplo

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

Respuesta

{}

Eliminar un miembro por memberId

Elimina un registro de miembro existente mediante el memberId.

Parámetros

memberId `string` (obligatorio) Identificador único del miembro

Endpoint

DELETE /api/partners/members/{memberId}

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/partners/members/{memberId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Actualizar un miembro por memberId

Actualiza un registro de miembro existente mediante el memberId.

Parámetros

memberId `string` (obligatorio) Identificador único del miembro

Cuerpo de la solicitud

Endpoint

PUT /api/partners/members/{memberId}

Solicitud de ejemplo

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

Respuesta

{}

Obtener el estado de una operación de sincronización de miembros

Devuelve el estado actual de una operación asíncrona de creación o eliminación de miembros iniciada mediante POST /api/partners/members o DELETE /api/partners/members/{memberId}. El front-end consulta periódicamente este endpoint en lugar del flujo heredado de sondeo de la lista y coincidencia por nombre. NOTA: Las reglas de aislamiento multiinquilino exigen limitar cada fila por partnerId/facilityId, pero eso se aplaza a un PR de refuerzo de la Fase 3a.1: los operationIds son UUID de 128 bits y la ruta ya está controlada por el acceso al módulo `external-integrations`. Cualquier persona con un operationId válido y acceso al módulo de administración puede consultar su estado.

Parámetros

operationId `string` (obligatorio) UUID devuelto por POST/DELETE

Endpoint

GET /api/partners/members/operations/{operationId}

Solicitud de ejemplo

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

Respuesta

{}

Crear o actualizar miembros de una instalación

Acepta un array de objetos de miembro y los reenvía a la API de socios para su procesamiento. Máximo de 25 miembros por solicitud.

Cuerpo de la solicitud

Endpoint

POST /api/partners/members

Solicitud de ejemplo

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

Respuesta

{}

Crear o actualizar planes de membresía de una instalación

Acepta un array de objetos de plan de membresía y los reenvía a la API de socios para su procesamiento. Máximo de 25 planes de membresía por solicitud.

Cuerpo de la solicitud

Endpoint

POST /api/partners/membership-plans

Solicitud de ejemplo

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

Respuesta

{}

Crea un nuevo rol

Parámetros

body `string` (obligatorio) Objeto de rol

Endpoint

POST /api/roles

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la lista de todos los roles

Endpoint

GET /api/roles

Solicitud de ejemplo

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

Respuesta

{}

Elimina un rol por ID

Endpoint

DELETE /api/roles/{roleId}

Solicitud de ejemplo

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

Respuesta

{}

Actualiza un rol por ID

Parámetros

body `string` (obligatorio) Objeto de rol

Endpoint

PUT /api/roles/{roleId}

Solicitud de ejemplo

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

Respuesta

{}

Crear una nueva partida adicional para la factura de facturación SaaS

Parámetros

organisationId `string` (opcional) El ID de la organización para la que se creará la partida adicional body `string` (opcional) Cuerpo de la solicitud

Endpoint

POST /api/saas-billing/additional-line-items

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista de partidas adicionales de la factura de facturación SaaS

Parámetros

organisationId `string` (obligatorio) El ID de la organización

Endpoint

GET /api/saas-billing/additional-line-items

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista de partidas adicionales de la factura de facturación SaaS de la instalación

Endpoint

GET /api/clubs/{clubId}/saas-billing/additional-line-items

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/saas-billing/additional-line-items \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Actualiza una partida adicional de la factura de facturación SaaS

Parámetros

itemId `string` (obligatorio) El ID de la partida adicional que se actualizará body `string` (obligatorio) El cuerpo de la solicitud

Endpoint

PUT /api/saas-billing/additional-line-items/{itemId}

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items/{itemId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Tarifas por hora combinadas de Cloud Agent para Your Rates

Devuelve los tamaños de Cloud Agent ofrecidos con un único precio por hora combinado (alojamiento + software). No se incluye el desglose. usedPlans son los SKU que esta instalación ejecutó en los últimos 30 días.

Parámetros

clubID `string` (obligatorio)

Endpoint

GET /api/clubs/{clubID}/saas-billing/cloud-agent-rates

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/cloud-agent-rates \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Eliminar un informe mensual importado

Parámetros

club `string` (opcional) ID del club reportId `string` (opcional) ID del informe

Endpoint

DELETE /api/saas-billing/extended-access/monthly-usage-report/{reportId}

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/{reportId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Obtener el informe de almacenamiento de CCTV más reciente de una instalación

Devuelve la instantánea diaria más reciente del almacenamiento de CCTV de la instalación a partir de los registros de facturación guardados (hasta los últimos 31 días). Incluye totalStorage, la fecha y los cargos relacionados con el almacenamiento.

Parámetros

club `string` (obligatorio) ID del club

Endpoint

GET /api/saas-billing/extended-access/latest-cctv-storage-report/{club}

Solicitud de ejemplo

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"

Respuesta

{}

Devuelve una factura en PDF de la instalación para el período indicado.

Parámetros

club `string` (opcional) ID del club month `string` (opcional) Mes del informe en formato numérico. 1 = enero, 2 = febrero, etc. year `string` (opcional) Año del informe en formato numérico, p. ej., 2021

Endpoint

GET /api/saas-billing/extended-access/monthly-usage-report/:club/invoice

Solicitud de ejemplo

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"

Respuesta

{}

Paquete ZIP con los PDF de las facturas de la plataforma de los meses de uso seleccionados. Es la versión masiva del endpoint individual .../invoice y permite la descarga con selección múltiple en la pestaña Invoices & Receipts de la aplicación Billing & Cost Management.

Parámetros

club `string` (opcional) ID del club months `string` (opcional) Meses de uso o de informe separados por comas en formato YYYY-MM (máximo 24)

Endpoint

GET /api/saas-billing/extended-access/monthly-usage-report/{club}/invoices.zip

Solicitud de ejemplo

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"

Respuesta

{}

Devuelve los informes de uso mensual de varios meses en una sola llamada. Alimenta el gráfico del historial de costos y las variaciones mes a mes de la aplicación Billing & Cost Management. Los meses que aún no tienen uso devuelven report: null (igual que el 404 → $0 del endpoint de un solo mes en la interfaz).

Parámetros

club `string` (opcional) ID del club months `string` (opcional) Meses de uso separados por comas en formato YYYY-MM (máximo 12)

Endpoint

GET /api/saas-billing/extended-access/monthly-usage-report/{club}/batch

Solicitud de ejemplo

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"

Respuesta

{}

Importar los informes mensuales de la instalación.

Parámetros

club `string` (opcional) ID del club

Endpoint

PUT /api/saas-billing/extended-access/usage-report/:club

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve un informe CSV del uso de CCTV de los últimos 30 días de todas las instalaciones.

Endpoint

GET /api/saas-billing/extended-access/usage-report/:club

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Lista todos los informes diarios del mes de la instalación.

Parámetros

club `string` (opcional) ID del club month `string` (opcional) Mes del informe en formato numérico. 1 = enero, 2 = febrero, etc. year `string` (opcional) Año del informe en formato numérico, p. ej., 2021

Endpoint

GET /api/saas-billing/extended-access/monthly-usage-report/{club}/daily-reports

Solicitud de ejemplo

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"

Respuesta

{}

Devuelve la lista de informes mensuales importados para el administrador

Parámetros

organisationId `string` (obligatorio) ID de la organización

Endpoint

GET /api/saas-billing/extended-access/usage-report/imported

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/imported \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve un informe CSV del uso de CCTV de los últimos 30 días de todas las instalaciones.

Parámetros

club `string` (opcional) ID del club month `string` (opcional) Mes del informe en formato numérico. 1 = enero, 2 = febrero, etc. year `string` (opcional) Año del informe en formato numérico, p. ej., 2021

Endpoint

GET /api/saas-billing/extended-access/monthly-usage-report/:club

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve el informe de uso periódico de la instalación.

Parámetros

club `string` (opcional) ID del club periodStart `string` (opcional) Inicio del período en formato YYYY-MM-DD periodEnd `string` (opcional) Fin del período en formato YYYY-MM-DD

Endpoint

GET /api/saas-billing/extended-access/periodical-usage-report/:club

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/periodical-usage-report/:club \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Paquete ZIP único con los PDF de documentos de facturación de varios tipos: facturas de la plataforma (por mes de uso), recibos de recarga del monedero SaaS y recibos de recarga de Model Router. Es la versión masiva de los endpoints invoices.zip / receipts.zip por tipo para la pestaña unificada Invoices & Receipts. Cada mes o ID solicitado debe corresponder a un documento de la instalación; cualquier valor incorrecto hace fallar todo el paquete.

Parámetros

clubID `string` (obligatorio) invoiceMonths `string` (opcional) Meses de uso separados por comas en formato YYYY-MM walletIds `string` (opcional) ID de transacciones de recarga del monedero SaaS separados por comas aiIds `string` (opcional) ID de transacciones de recarga de Model Router separados por comas

Endpoint

GET /api/clubs/{clubID}/saas-billing/documents.zip

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/documents.zip \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Agregar una nota a un registro mensual

Parámetros

recordID `string` (opcional) El ID del registro que se obtendrá note `string` (opcional) La nota que se agregará al registro

Endpoint

POST /api/saas-billing/monthly-records/{recordID}/notes

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{recordID}/notes \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista de registros mensuales de facturación SaaS

Parámetros

club `string` (opcional) El ID de la instalación que se obtendrá month `string` (opcional) El mes de facturación en formato YYYY-MM

Endpoint

GET /api/saas-billing/monthly-records/{club}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{club} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista de registros mensuales de facturación SaaS que fallaron o requieren 3D Secure

Parámetros

clubID `string` (opcional) El ID de la instalación cuyos registros mensuales fallidos se obtendrán

Endpoint

GET /api/clubs/:clubID/saas-billing/flagged

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/clubs/:clubID/saas-billing/flagged \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve TODOS los registros mensuales de facturación SaaS (el libro de facturas) de una instalación, empezando por el mes de facturación más reciente. Es la versión con alcance de instalación del endpoint paginate-monthly-records, exclusivo para administradores, y alimenta la pestaña "Invoices & Receipts" para clientes de la aplicación Billing & Cost Management.

Parámetros

clubID `string` (opcional) El ID de la instalación cuyos registros mensuales se listarán

Endpoint

GET /api/clubs/{clubID}/saas-billing/monthly-records

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/monthly-records \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista de registros mensuales de facturación SaaS

Parámetros

organisationId `string` (opcional) ID de la organización month `string` (opcional) Mes en formato MM. year `string` (opcional) Año en formato YYYY. filters `string` (opcional) Filtros de cadena de consulta creados por la tabla de datos. order `string` (opcional) Cadena de consulta creada por la tabla de datos.

Endpoint

GET /api/saas-billing/monthly-records

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/monthly-records \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Reintentar los pagos fallidos de una instalación

Parámetros

clubID `string` (opcional) El ID de la instalación cuyos registros mensuales fallidos se obtendrán

Endpoint

PUT /api/clubs/:clubID/saas-billing/retry-failed-payments

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/:clubID/saas-billing/retry-failed-payments \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Actualizar un registro mensual

Parámetros

recordID `string` (opcional) El ID del registro que se obtendrá status `string` (opcional) El estado al que se actualizará el registro

Endpoint

PUT /api/saas-billing/monthly-records/{recordID}

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{recordID} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Comprueba si los pagos se realizaron correctamente y actualiza el estado del registro

Parámetros

clubID `string` (opcional) recordID `string` (opcional) El ID del registro que se obtendrá

Endpoint

PUT /api/clubs/{clubID}/saas-billing/monthly-records/{recordID}/validate

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/monthly-records/{recordID}/validate \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Agregar un método de pago para una instalación.

Parámetros

clubID `string` (opcional)

Endpoint

POST /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Sincroniza con Stripe los métodos de pago de una instalación.

Parámetros

clubID `string` (opcional)

Endpoint

PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve el presupuesto de gasto de la instalación junto con el gasto acumulado del mes y la previsión calculados.

Parámetros

clubID `string` (opcional)

Endpoint

GET /api/clubs/{clubID}/saas-billing/budget

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/budget \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Crear, actualizar o borrar el presupuesto de gasto de la instalación.

Parámetros

clubID `string` (opcional) body `object` (opcional)

Endpoint

PUT /api/clubs/{clubID}/saas-billing/budget

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/budget \
  -H "x-api-key: YOUR_API_KEY"

Eliminar un método de pago de la configuración de pago de la instalación.

Parámetros

clubID `string` (opcional) paymentMethodID `string` (opcional)

Endpoint

DELETE /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}

Solicitud de ejemplo

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"

Respuesta

{}

Obtener la configuración de pago de una instalación.

Parámetros

clubID `string` (opcional)

Endpoint

GET /api/clubs/{clubID}/saas-billing/payment-settings

Solicitud de ejemplo

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

Respuesta

{}

Actualizar la configuración de pago de una instalación.

Parámetros

clubID `string` (opcional) lockedOut `boolean` (opcional) Si se bloqueará el acceso de la instalación al sistema. pauseBilling `boolean` (opcional) Si se pausará la facturación automática de la instalación. customerID `string` (opcional) Si se agrega, se actualizará el ID de cliente de Stripe de la instalación. deleteSourceID `string` (opcional) Si se elimina el cliente de origen en Stripe.

Endpoint

PUT /api/clubs/{clubID}/saas-billing/payment-settings

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Obtener el primer mes facturado de todas las instalaciones.

Parámetros

clubID `string` (opcional)

Endpoint

GET /api/saas-billing/payment-settings/earliest-billed-month

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/payment-settings/earliest-billed-month \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Listar las cuentas que pueden levantar un bloqueo por facturación de una instalación, por niveles: primero los usuarios que tienen el módulo de facturación y, solo si no hay ninguno, los administradores de la organización.

Parámetros

clubID `string` (obligatorio)

Endpoint

GET /api/clubs/{clubID}/saas-billing/lockout-contacts

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/lockout-contacts \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Recorrer con paginación todas las instalaciones del sistema y devolver los ID de cliente de cada una.

Parámetros

clubID `string` (opcional) organisationId `string` (opcional) ID de la organización

Endpoint

GET /api/saas-billing/payment-settings/customer-ids

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/payment-settings/customer-ids \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Establecer el método de pago principal de una instalación.

Parámetros

clubID `string` (opcional)

Endpoint

PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}/primary

Solicitud de ejemplo

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"

Respuesta

{}

Actualizar el perfil de facturación de una instalación.

Parámetros

clubID `string` (opcional) invoiceEntity `string` (opcional) billingContacts `string` (opcional) Lista de UUID de los contactos de KYC ccEmails `string` (opcional) Lista de correos electrónicos que se incluirán en copia en las facturas

Endpoint

PUT /api/clubs/{clubID}/saas-billing/payment-settings/billing-profile

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/billing-profile \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Actualizar un método de pago de una instalación.

Parámetros

clubID `string` (opcional) cardID `string` (opcional)

Endpoint

PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{cardID}

Solicitud de ejemplo

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"

Respuesta

{}

Devuelve un desglose por instalación de todos los cargos de productos aplicables y las partidas adicionales para exportarlo en CSV. Resuelve la jerarquía de anulaciones global, regional y de instalación para cada instalación a la que tiene acceso el usuario.

Parámetros

organisationId `string` (obligatorio) ID de la organización para la ACL

Endpoint

GET /api/saas-billing/charges-config/export

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/charges-config/export \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la configuración de cargos de un destino específico

Parámetros

clubId `string` (opcional) El ID de la instalación cuya configuración de cargos se obtendrá

Endpoint

GET /api/saas-billing/charges-config/{clubId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/charges-config/{clubId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Resumen de facturación de la organización de esta instalación: el alcance efectivo de quien paga, cualquier cambio de consolidación programado y si quien llama puede administrar el interruptor de consolidación.

Parámetros

clubID `string` (obligatorio)

Endpoint

GET /api/clubs/{clubID}/saas-billing/org/summary

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/org/summary \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Registros mensuales consolidados de la organización (estados de cuenta) con el desglose por instalación, del más reciente al más antiguo. Está vacío hasta que se liquida el primer mes consolidado de la organización.

Parámetros

clubID `string` (obligatorio)

Endpoint

GET /api/clubs/{clubID}/saas-billing/org/monthly-records

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/org/monthly-records \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Resumen del monedero prepago: saldo, débitos de uso del mes en curso, configuración de recarga automática y método de facturación.

Parámetros

clubID `string` (obligatorio)

Endpoint

GET /api/clubs/{clubID}/saas-billing/wallet

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Libro del monedero, del más reciente al más antiguo. Los monederos con alcance de organización incluyen las filas de todas las instalaciones (cada una lleva el clubID de origen).

Parámetros

clubID `string` (obligatorio) limit `string` (opcional) types `string` (opcional) Tipos de transacción separados por comas from `string` (opcional) to `string` (opcional) cursor `string` (opcional) nextCursor de una página anterior

Endpoint

GET /api/clubs/{clubID}/saas-billing/wallet/transactions

Solicitud de ejemplo

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

Respuesta

{}

Recibo en PDF con la marca para una sola transacción del monedero (recargas y créditos).

Parámetros

clubID `string` (obligatorio) txId `string` (obligatorio)

Endpoint

GET /api/clubs/{clubID}/saas-billing/wallet/transactions/{txId}/receipt.pdf

Solicitud de ejemplo

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"

Respuesta

{}

Paquete ZIP con los recibos en PDF con la marca de las transacciones de recarga del monedero seleccionadas. Cada ID debe ser una recarga (con tarjeta o factura) del monedero de esta instalación; los débitos por uso y los ajustes no tienen recibos y se rechazan.

Parámetros

clubID `string` (obligatorio) ids `string` (obligatorio) IDs de transacción separados por comas (máximo 50)

Endpoint

GET /api/clubs/{clubID}/saas-billing/wallet/transactions/receipts.zip

Solicitud de ejemplo

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

Respuesta

{}

Cobrar en una tarjeta guardada de facturación SaaS para agregar saldo prepago. Devuelve requires_action + clientSecret cuando se necesita 3DS.

Parámetros

clubID `string` (obligatorio) body `object` (opcional)

Endpoint

POST /api/clubs/{clubID}/saas-billing/wallet/topup

Solicitud de ejemplo

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

Respuesta

{}

Finalizar una recarga del monedero después de que la aplicación complete la autenticación 3DS. Es idempotente.

Parámetros

clubID `string` (obligatorio)

Endpoint

POST /api/clubs/{clubID}/saas-billing/wallet/topup/confirm

Solicitud de ejemplo

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

Respuesta

{}

Actualizar la regla de recarga automática de la instalación (guardada en su fila de anulación del perfil de facturación).

Parámetros

clubID `string` (obligatorio) body `object` (opcional)

Endpoint

PATCH /api/clubs/{clubID}/saas-billing/wallet/auto-topup

Solicitud de ejemplo

curl -X PATCH https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/auto-topup \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Facturas de recarga del monedero de esta instalación (método de pago por factura), de la más reciente a la más antigua.

Parámetros

clubID `string` (obligatorio)

Endpoint

GET /api/clubs/{clubID}/saas-billing/wallet/invoices

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/invoices \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Solicitar una factura de recarga para pagar con referencia (solo método de pago por factura). Como máximo hay una factura pendiente por monedero: una segunda solicitud devuelve la existente con alreadyPending=true.

Parámetros

clubID `string` (obligatorio) body `string` (opcional) { amountCents: number }

Endpoint

POST /api/clubs/{clubID}/saas-billing/wallet/topup-invoice

Solicitud de ejemplo

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

Respuesta

{}

Devuelve la lista de pedidos de la instalación.

Parámetros

facilityID `string` (opcional)

Endpoint

GET /api/store/facilities/:facilityID/orders

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/store/facilities/:facilityID/orders \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve la lista de productos disponibles para la instalación.

Parámetros

clubID `string` (obligatorio) search `string` (opcional) limit `string` (opcional) page `string` (opcional) El número de página para la paginación (empieza en 1).

Endpoint

GET /api/store/clubs/{clubID}/products

Solicitud de ejemplo

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

Respuesta

{}

Listar los registros de Stripe de la instalación.

Parámetros

club `string` (obligatorio) fromDate `string` (opcional) Marca de tiempo Unix toDate `string` (opcional) Marca de tiempo Unix socketID `string` (obligatorio) Identificador único de la solicitud de socket

Endpoint

GET /api/club/{club}/stripe/records

Solicitud de ejemplo

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

Respuesta

{}

Cancelar una intención de pago

Parámetros

club `string` (obligatorio) paymentIntent `string` (opcional)

Endpoint

GET /api/club/{club}/stripe/payment-intent/:paymentIntent/cancel

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/payment-intent/:paymentIntent/cancel \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Crear una sesión de cuenta de Stripe para componentes integrados

Crea una sesión de cuenta de Stripe para una cuenta conectada. Devuelve un client_secret que se usa para inicializar los componentes integrados de Connect (disputas, pagos, administración de la cuenta, documentos).

Cuerpo de la solicitud

Endpoint

POST /api/stripe/account-session

Solicitud de ejemplo

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

Respuesta

{}

Genera un enlace de un solo uso a la página de KYC de Stripe para una cuenta conectada.

Parámetros

club `string` (obligatorio)

Endpoint

GET /api/club/{club}/stripe/generate-kyc-token

Solicitud de ejemplo

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

Respuesta

{}

Obtiene los detalles de una cuenta conectada de Stripe como parte del proceso de KYC.

Parámetros

club `string` (obligatorio)

Endpoint

GET /api/club/{club}/stripe/connect-account-details

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/connect-account-details \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devuelve todo el historial de tickets según el ID de la instalación

Parámetros

club `string` (obligatorio) ID interno del club al que quieres acceder.

Endpoint

GET /api/ticketing/clubtickets/{club}

Solicitud de ejemplo

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

Respuesta

{}

Obtiene los departamentos

Endpoint

GET /api/ticketing/departments

Solicitud de ejemplo

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

Respuesta

{}

Obtiene los detalles de un solo ticket

Parámetros

user `string` (obligatorio) Correo electrónico del usuario. ticketNumber `string` (obligatorio) ID de 6 dígitos del ticket al que quieres acceder. club `string` (obligatorio) El ID de la instalación seleccionada.

Endpoint

GET /api/ticketing/ticket-details/:ticketNumber/:club

Solicitud de ejemplo

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

Respuesta

{}

Obtiene los temas

Endpoint

GET /api/ticketing/topics

Solicitud de ejemplo

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

Respuesta

{}

Obtiene todos los tickets creados por el usuario que inició sesión. Nota: se determina a partir de los encabezados que proporciona nuestro servicio de SSO de Google.

Parámetros

user `string` (obligatorio) Correo electrónico del usuario que inició sesión

Endpoint

GET /api/ticketing/usertickets

Solicitud de ejemplo

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

Respuesta

{}

Crea un nuevo ticket

Parámetros

club `string` (obligatorio) El ID de la instalación seleccionada.

Endpoint

POST /api/ticketing/clubticket/:club

Solicitud de ejemplo

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

Respuesta

{}

Crea un nuevo ticket

Parámetros

subject `string` (obligatorio) Asunto del ticket. message `string` (obligatorio) Mensaje completo del ticket.

Endpoint

POST /api/ticketing/userticket

Solicitud de ejemplo

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

Respuesta

{}

Crea una respuesta a un ticket existente

Parámetros

subject `string` (obligatorio) Asunto del ticket. message `string` (obligatorio) Mensaje completo del ticket.

Endpoint

POST /api/ticketing/user-reply

Solicitud de ejemplo

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

Respuesta

{}

Obtiene las preferencias de un usuario

Endpoint

GET /api/user-preferences

Solicitud de ejemplo

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

Respuesta

{}

Actualiza las preferencias de un usuario

Parámetros

body `string` (obligatorio)

Endpoint

PUT /api/user-preferences

Solicitud de ejemplo

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

Respuesta

{}

Cambiar la contraseña del usuario

Cambia la contraseña del usuario. Requiere verificación por OTP si el usuario tiene un número de teléfono, o que agregue uno si no lo tiene.

Cuerpo de la solicitud

Endpoint

POST /api/user/change-password

Solicitud de ejemplo

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

Respuesta

{}

Comprobar el estado de 2FA del usuario

Devuelve si la 2FA está habilitada para el usuario y si alguno de sus roles la exige

Endpoint

GET /api/user/check-2fa-status

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/user/check-2fa-status \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Listar las organizaciones, instalaciones y regiones a las que el usuario tiene acceso para un módulo específico.

Parámetros

moduleId `string` (obligatorio)

Endpoint

POST /api/user/me/modules/{moduleId}/org-access

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/user/me/modules/{moduleId}/org-access \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Crea una 'solicitud de vinculación' de un usuario final para 'unirse' a una instalación.

Parámetros

body `string` (obligatorio) Objeto JSON del club nuevo que se agregará al sistema.

Endpoint

POST /api/user/linkclub

Solicitud de ejemplo

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

Respuesta

{}

Lista todas las instalaciones autorizadas para el usuario.

Endpoint

GET /api/user/listauthorised

Solicitud de ejemplo

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

Respuesta

{}

Enviar un OTP por dos canales (correo electrónico + SMS)

Envía códigos OTP tanto a la dirección de correo electrónico del usuario como a un número de teléfono especificado. Se usa para operaciones de alta seguridad, como la primera verificación de un número de teléfono. Este endpoint solo envía los OTP y no modifica ningún dato del usuario.

Cuerpo de la solicitud

Endpoint

POST /api/user/send-dual-otp

Solicitud de ejemplo

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

Respuesta

{}

Enviar un OTP a un número de teléfono o correo electrónico

Envía un código OTP al número de teléfono (SMS) o a la dirección de correo electrónico del usuario para su verificación

Cuerpo de la solicitud

Endpoint

POST /api/user/send-otp

Solicitud de ejemplo

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

Respuesta

{}

Comprobar si el usuario tiene acceso válido a páginas confidenciales

Devuelve si el usuario tiene una sesión válida verificada por OTP para acceder a páginas confidenciales

Endpoint

GET /api/user/sensitive-page-access

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/user/sensitive-page-access \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Verificar el OTP y conceder acceso a páginas confidenciales

Verifica el código OTP y, si es válido, concede acceso durante 1 hora a las páginas confidenciales

Cuerpo de la solicitud

Endpoint

POST /api/user/sensitive-page-access/verify

Solicitud de ejemplo

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

Respuesta

{}

Revocar el acceso a páginas confidenciales (cerrar sesión en páginas confidenciales)

Revoca la sesión actual de acceso a páginas confidenciales del usuario

Endpoint

POST /api/user/sensitive-page-access/revoke

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/user/sensitive-page-access/revoke \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Habilitar o deshabilitar la 2FA

Habilita o deshabilita la autenticación de dos factores del usuario. Requiere un número de teléfono y verificación por OTP.

Cuerpo de la solicitud

Endpoint

POST /api/user/toggle-2fa

Solicitud de ejemplo

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

Respuesta

{}

Actualizar el perfil propio del usuario

Permite que un usuario actualice la información de su propio perfil (nombre, apellido, número de teléfono). Al agregar un número de teléfono por primera vez, se requiere verificación por OTP en dos canales (códigos por correo electrónico y SMS). Al cambiar un número de teléfono existente, solo se requiere el OTP por correo electrónico.

Cuerpo de la solicitud

Endpoint

PATCH /api/user/update-profile

Solicitud de ejemplo

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

Respuesta

{}

Obtener un icono a partir de la URL.

Endpoint

GET /api/website-icon

Solicitud de ejemplo

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

Respuesta

{}

Listar las plantillas de entradas del almacén de contraseñas

Parámetros

organisationId `string` (opcional) Contexto de la organización para las comprobaciones de acceso al módulo

Endpoint

GET /api/vault/templates

Solicitud de ejemplo

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

Respuesta

{}

Listar las entradas visibles del almacén de contraseñas

Parámetros

organisationId `string` (obligatorio) scope `string` (opcional)

Endpoint

GET /api/vault/entries

Solicitud de ejemplo

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

Respuesta

{}

Crear una entrada en el almacén de contraseñas

Endpoint

POST /api/vault/entries

Solicitud de ejemplo

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

Obtener una entrada del almacén de contraseñas sin mostrar los valores secretos

Parámetros

entryId `string` (obligatorio) organisationId `string` (obligatorio)

Endpoint

GET /api/vault/entries/{entryId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Actualizar una entrada del almacén de contraseñas

Endpoint

PUT /api/vault/entries/{entryId}

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Eliminar una entrada del almacén de contraseñas

Endpoint

DELETE /api/vault/entries/{entryId}

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Mostrar los campos ocultos o secretos seleccionados

Endpoint

POST /api/vault/entries/{entryId}/reveal

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/vault/entries/{entryId}/reveal \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Listar los resúmenes de carpetas del almacén de contraseñas

Endpoint

GET /api/vault/folders

Solicitud de ejemplo

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

Respuesta

{}

Listar las entradas con códigos de autenticador

Endpoint

GET /api/vault/authenticator

Solicitud de ejemplo

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

Respuesta

{}

Listar los tipos de nodos de flujo de trabajo registrados

Endpoint

GET /api/workflow-engine/node-types

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/node-types \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Obtener la proyección del horario de la instalación que usan los bloques de flujo de trabajo

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/workflow-engine/facility-hours/{facilityId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/facility-hours/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Vista previa del remitente de correo electrónico del flujo de trabajo con la marca de la instalación

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/workflow-engine/email-branding/{facilityId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/email-branding/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Listar los recursos de la instalación para configurar desencadenadores

Parámetros

facilityId `string` (obligatorio) resourceType `string` (obligatorio)

Endpoint

GET /api/workflow-engine/resources/{facilityId}/{resourceType}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/resources/{facilityId}/{resourceType} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Listar los flujos de trabajo de una instalación

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/workflow-engine/workflows/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Crear un borrador de flujo de trabajo a partir de un grafo no vacío

El editor mantiene un nuevo flujo de trabajo de forma local hasta que tenga al menos un bloque, por lo que el primer guardado lo crea junto con su grafo en una sola llamada. Un cuerpo sin `nodes` se rechaza en lugar de guardarse.

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/workflow-engine/workflows/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Listar las credenciales que pueden usar los flujos de trabajo de una instalación

Devuelve las credenciales propias de la instalación y las compartidas en su marca u organización. Los secretos nunca se devuelven; `hasValue` solo indica que hay uno guardado.

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/workflow-engine/credentials/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Crear una credencial de flujo de trabajo

El nivel de alcance proviene de `scopeType`; los ID de la marca y la organización se resuelven a partir de la instalación en lugar de aceptarse de quien llama.

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/workflow-engine/credentials/{facilityId}

Solicitud de ejemplo

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

Configuración de flujos de trabajo de toda la instalación (destinatarios de las notificaciones de errores)

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/workflow-engine/facility-settings/{facilityId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/facility-settings/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Guardar los destinatarios de las notificaciones de errores de toda la instalación

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

PUT /api/workflow-engine/facility-settings/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Reemplazar una credencial de flujo de trabajo

Un `secret` vacío conserva el guardado, de modo que se puede cambiar el nombre de una credencial sin volver a ingresarlo. No hay forma de volver a leer un secreto.

Parámetros

facilityId `string` (obligatorio) credentialId `string` (obligatorio)

Endpoint

PUT /api/workflow-engine/credentials/{facilityId}/{credentialId}

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId}/{credentialId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Eliminar una credencial de flujo de trabajo

Los nodos que la usan fallan de forma segura en la siguiente llamada, incluso en flujos de trabajo ya publicados, porque una instantánea solo guarda la referencia.

Parámetros

facilityId `string` (obligatorio) credentialId `string` (obligatorio)

Endpoint

DELETE /api/workflow-engine/credentials/{facilityId}/{credentialId}

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId}/{credentialId} \
  -H "x-api-key: YOUR_API_KEY"

Obtener la URL del webhook del desencadenador de un flujo de trabajo

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio) nodeId `string` (obligatorio)

Endpoint

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Rotar la URL del webhook del desencadenador de un flujo de trabajo

Invalida de inmediato la URL anterior.

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio) nodeId `string` (obligatorio)

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook/rotate

Solicitud de ejemplo

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"

Respuesta

{}

Obtener un flujo de trabajo por ID

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio)

Endpoint

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Crear o actualizar un borrador de flujo de trabajo

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

PUT /api/workflow-engine/workflows/{facilityId}/{workflowId}

Solicitud de ejemplo

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

Respuesta

{}

Actualizar el nombre o la descripción de un flujo de trabajo

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

PATCH /api/workflow-engine/workflows/{facilityId}/{workflowId}

Solicitud de ejemplo

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

Respuesta

{}

Eliminar un flujo de trabajo y sus versiones

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio)

Endpoint

DELETE /api/workflow-engine/workflows/{facilityId}/{workflowId}

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Duplicar un flujo de trabajo como un nuevo borrador inactivo

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio)

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/duplicate

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/duplicate \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Publicar el borrador actual (instantánea de versión inmutable)

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/publish

Solicitud de ejemplo

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

Respuesta

{}

Restablecer el borrador a la última versión publicada

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio)

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/discard

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/discard \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Habilitar o deshabilitar un flujo de trabajo

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

PATCH /api/workflow-engine/workflows/{facilityId}/{workflowId}/active

Solicitud de ejemplo

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

Respuesta

{}

Generar o revisar el grafo de un flujo de trabajo con IA

Parámetros

facilityId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/workflow-engine/generate/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Listar los modelos en los que puede ejecutarse un nodo Agent en esta instalación

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/workflow-engine/agent-models/{facilityId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-models/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Listar las herramientas MCP que un nodo Agent puede incorporar en esta instalación

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/workflow-engine/agent-tools/{facilityId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-tools/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Buscar las conversaciones guardadas del agente en esta instalación (vinculaciones de Conversation key)

Parámetros

facilityId `string` (obligatorio) deviceId `string` (opcional) Limitar a las conversaciones de un dispositivo de agente (el deviceId configurado en el nodo) q `string` (opcional) Coincidencia de subcadena sin distinguir mayúsculas y minúsculas en la Conversation key, el ID de sesión o el nombre del dispositivo limit `integer` (opcional) offset `integer` (opcional)

Endpoint

GET /api/workflow-engine/agent-conversations/{facilityId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-conversations/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Buscar las conversaciones guardadas en el propio dispositivo de agente de la instalación

Lista las sesiones del propio dispositivo (las conversaciones de la barra lateral de la interfaz del agente) para que un flujo de trabajo pueda continuar una conversación existente con su contexto. El historial pertenece al dispositivo; cuando la instalación tiene varios dispositivos, `deviceId` elige cuál (el dispositivo configurado en el nodo). Dispositivo inaccesible → 502.

Parámetros

facilityId `string` (obligatorio) deviceId `string` (opcional) El dispositivo de agente configurado en el nodo; omítelo para resolver el único dispositivo de la instalación q `string` (opcional) Coincidencia de subcadena sin distinguir mayúsculas y minúsculas en el título o el ID de la sesión limit `integer` (opcional) offset `integer` (opcional)

Endpoint

GET /api/workflow-engine/agent-device-sessions/{facilityId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-device-sessions/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Buscar los tableros del kanban del dispositivo de agente de la instalación

Alimenta el selector de Board ID del bloque Agent: Kanban. Coincidencia de subcadena sin distinguir mayúsculas y minúsculas en el nombre o el slug del tablero; `current` es el slug del tablero activo del dispositivo, para que el selector de tareas pueda usar ese alcance de forma predeterminada. Cuando la instalación tiene varios dispositivos, `deviceId` elige cuál. Dispositivo inaccesible → 502.

Parámetros

facilityId `string` (obligatorio) deviceId `string` (opcional) El dispositivo de agente configurado en el nodo; omítelo para resolver el único dispositivo de la instalación q `string` (opcional) Coincidencia de subcadena sin distinguir mayúsculas y minúsculas en el nombre o el slug del tablero limit `integer` (opcional) offset `integer` (opcional)

Endpoint

GET /api/workflow-engine/kanban-boards/{facilityId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/kanban-boards/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Buscar las tareas de un tablero del kanban del dispositivo de agente de la instalación

Alimenta el selector de Task ID del bloque Agent: Kanban. Coincidencia de subcadena sin distinguir mayúsculas y minúsculas en el ID, el título o el cuerpo de la tarea; las tareas pertenecen a cada tablero (el dispositivo no permite buscar entre tableros), por lo que `board` limita la consulta: omítelo para usar el tablero activo del dispositivo. Dispositivo inaccesible → 502.

Parámetros

facilityId `string` (obligatorio) deviceId `string` (opcional) El dispositivo de agente configurado en el nodo; omítelo para resolver el único dispositivo de la instalación board `string` (opcional) El slug del tablero que se listará; omítelo para usar el tablero activo del dispositivo q `string` (opcional) Coincidencia de subcadena sin distinguir mayúsculas y minúsculas en el ID, el título o el cuerpo de la tarea limit `integer` (opcional) offset `integer` (opcional)

Endpoint

GET /api/workflow-engine/kanban-tasks/{facilityId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/kanban-tasks/{facilityId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Listar las plantillas de flujo de trabajo seleccionadas, filtradas para esta instalación

Parámetros

facilityId `string` (obligatorio)

Endpoint

GET /api/workflow-engine/templates/{facilityId}

Solicitud de ejemplo

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

Respuesta

{}

Crear un fragmento de grafo a partir de una plantilla para el borrador abierto

Parámetros

facilityId `string` (obligatorio) templateId `string` (obligatorio)

Endpoint

POST /api/workflow-engine/templates/{facilityId}/{templateId}

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/templates/{facilityId}/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Contexto del selector de alcance para la página de administración de plantillas (niveles de administración)

Endpoint

GET /api/workflow-engine/template-admin/context

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/context \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Listar las plantillas que quien llama puede administrar, con marcas de permisos

Endpoint

GET /api/workflow-engine/template-admin

Solicitud de ejemplo

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

Respuesta

{}

Crear una plantilla (niveles de administración)

Cuerpo de la solicitud

Endpoint

POST /api/workflow-engine/template-admin

Solicitud de ejemplo

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

Detalle de la plantilla, incluido el grafo, para el editor de administración

Endpoint

GET /api/workflow-engine/template-admin/{templateId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Reemplazar una plantilla (organización propietaria)

Endpoint

PUT /api/workflow-engine/template-admin/{templateId}

Solicitud de ejemplo

curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Eliminación lógica de una plantilla (organización propietaria)

Endpoint

DELETE /api/workflow-engine/template-admin/{templateId}

Solicitud de ejemplo

curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Duplicar una plantilla visible en un alcance de destino que quien llama puede usar

Cuerpo de la solicitud

Endpoint

POST /api/workflow-engine/template-admin/{templateId}/duplicate

Solicitud de ejemplo

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

Ejecutar el grafo publicado de un flujo de trabajo desde un desencadenador manual

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/run

Solicitud de ejemplo

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

Respuesta

{}

Probar el borrador guardado sin publicarlo

Ejecuta el grafo del borrador actual y registra el resultado con `mode: test` y sin `versionId`. La publicación, la marca de activo y `publishedVersionId` nunca se modifican. Los efectos secundarios se simulan de forma predeterminada; `sideEffects: live` requiere además `confirmLiveSideEffects: true`.

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/test

Solicitud de ejemplo

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

Respuesta

{}

Probar un nodo de flujo de trabajo de la lista de permitidos

Ejecuta un nodo del borrador guardado que se puede probar de forma independiente. Los valores de las variables pueden tomarse de los pasos de ejecuciones registradas. Los métodos HTTP que modifican datos requieren confirmación explícita.

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/test-node

Solicitud de ejemplo

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

Respuesta

{}

Listar las ejecuciones recientes de un flujo de trabajo

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio)

Endpoint

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Leer una ejecución (estado + pasos en orden)

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio) executionId `string` (obligatorio)

Endpoint

GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Cancelar el retraso pendiente en el que está esperando una ejecución

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio) executionId `string` (obligatorio)

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/cancel

Solicitud de ejemplo

curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/cancel \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Volver a ejecutar una ejecución terminada a partir de la carga útil registrada de su desencadenador

`mode: published` vuelve a ejecutar exactamente la versión a la que estaba fijada la ejecución original, con efectos secundarios reales. `mode: draft-test` vuelve a ejecutar el borrador actual como una prueba simulada. Una ejecución cuya carga útil del desencadenador se truncó al escribirse no se puede volver a ejecutar.

Parámetros

facilityId `string` (obligatorio) workflowId `string` (obligatorio) executionId `string` (obligatorio)

Cuerpo de la solicitud

Endpoint

POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/retry

Solicitud de ejemplo

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

Respuesta

{}

Búsqueda indexada de los flujos de trabajo que contienen un tipo de nodo

Parámetros

nodeType `string` (obligatorio) facilityId `string` (opcional) organisationId `string` (opcional)

Endpoint

GET /api/workflow-engine/master-view/{nodeType}

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/master-view/{nodeType} \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Proxy de redirección de OAuth de marca blanca (Connected Apps)

Redirección 302 pública y sin autenticación que reenvía la devolución de llamada de un proveedor de OAuth a la devolución de llamada de autenticación de la plataforma de herramientas de origen, conservando la cadena de consulta. Permite que las aplicaciones OAuth propias de PH registren un URI de redirección de performancehub.co para que el dominio del proveedor de origen nunca aparezca en la barra de direcciones (necesario para el futuro proyecto de aplicaciones OAuth personalizadas; no afecta a la autenticación administrada).

Endpoint

GET /guest/connected-apps/oauth-callback

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/oauth-callback \
  -H "x-api-key: YOUR_API_KEY"

Página de finalización de la cadena de conexión (Connected Apps)

Página ligera de "ya puedes cerrar esta ventana" para la pestaña de OAuth en la que se ejecutó una cadena de conexión. Envía el resultado (suite o toolkit conectado + ID de las nuevas cuentas, o el toolkit que falló) a la pestaña del marketplace mediante window.opener.postMessage del mismo origen; si se perdió la referencia a la ventana de origen, recurre a un enlace profundo a la aplicación ph-ai-agent que reproduce la página de destino de la aplicación. Es solo informativa: no guarda secretos ni realiza escrituras.

Parámetros

connected `string` (opcional) ID de la suite o slug del toolkit que terminó de conectarse (caso de éxito). accounts `string` (opcional) ID de las cuentas conectadas que creó la cadena, separados por comas. connectError `string` (opcional) Slug del toolkit cuyo paso falló (caso de error).

Endpoint

GET /guest/connected-apps/finish

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/finish \
  -H "x-api-key: YOUR_API_KEY"

Respuesta

{}

Devolución de llamada del encadenamiento de conexión de la suite (Connected Apps)

Paso de devolución de llamada de OAuth para el flujo de conexión de la suite con un solo clic. El JWT de estado firmado (HS256, TTL de 30 min) codifica { clubID, deviceId, suite, toolkits, step, caids }: las cuentas se conectan a ese único dispositivo de agente y caids acumula los ID de las cuentas que creó cada paso (la redirección final a la aplicación los incluye para que el marketplace pueda ofrecer etiquetar las nuevas cuentas). Marca como conectado el toolkit del paso y luego redirige con 302 al Connect Link del siguiente toolkit, o a la página de la aplicación ph-ai-agent (con enlace profundo al agente) cuando la suite termina. Las conexiones de un solo toolkit usan el mismo controlador con una suite de un solo toolkit.

Parámetros

state `string` (obligatorio) JWT firmado con el estado de la cadena de conexión.

Endpoint

GET /guest/connected-apps/connect-next

Solicitud de ejemplo

curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/connect-next \
  -H "x-api-key: YOUR_API_KEY"

Activar el correo electrónico para configurar la contraseña

Valida el enlace firmado de un correo electrónico de bienvenida, envía un correo para restablecer la contraseña y muestra una página de confirmación. No requiere autenticación.

Parámetros

email `string` (obligatorio) Dirección de correo electrónico del usuario sig `string` (obligatorio) Firma HMAC del correo electrónico

Endpoint

GET /guest/setup-password

Solicitud de ejemplo

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

Respuesta

{}