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 actualEndpoint
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ánEndpoint
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/
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
{}
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
{}
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ónEndpoint
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 dispositivoEndpoint
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 dispositivoEndpoint
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 trasladoEndpoint
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
{}
Empezar a conectar una aplicación a un agente (flujo OAuth de Connect Link)
Inicia un flujo alojado de Connect Link para un toolkit y devuelve la URL a la que se debe enviar al usuario. Un alias opcional identifica la cuenta nueva (varias cuentas: conectar una aplicación ya conectada agrega OTRA cuenta, hasta 10 por aplicación). Usa el mismo callback encadenado que las conexiones de suites (una suite de un solo toolkit), por lo que al terminar se vuelve a la página del applet ph-ai-agent.
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
Solicitud de ejemplo
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
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
{}
Iniciar la conexión de una suite con un clic para un agente (flujos de Connect Link encadenados)
Inicia el flujo de conexión encadenado de una suite completa (p. ej., google-workspace). La URL devuelta abre la pantalla de consentimiento del primer toolkit; cada finalización redirige con un 302 directamente al flujo del siguiente toolkit y termina en la página del applet ph-ai-agent. Las aplicaciones que ya tienen una cuenta conectada se OMITEN, así que reintentar después de un error a mitad de la cadena continúa con las aplicaciones que faltan en lugar de crear cuentas duplicadas. Si todas ya están conectadas, se vuelve a ejecutar la cadena completa: ese es el flujo explícito "agregar 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-suite
Solicitud de ejemplo
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-suite \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
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 escaneadoEndpoint
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 UniFiEndpoint
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 siguienteEndpoint
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 facialEndpoint
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
{}
Vincular manualmente una persona sin coincidencia con un miembro
Asocia un personId del CCTV a un miembro específico y establece la coincidencia en confirmada.
Parámetros
club `string` (obligatorio) matchId `string` (obligatorio)Cuerpo de la solicitud
Endpoint
POST /api/cctv/matching/{club}/detail/{matchId}/link
Solicitud de ejemplo
curl -X POST https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId}/link \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
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ónEndpoint
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
{}
Desvincular una coincidencia de perfil aprendida automáticamente
Devuelve una coincidencia vinculada al estado rechazado y borra autoLearnedFrom del registro del miembro.
Parámetros
club `string` (obligatorio) matchId `string` (obligatorio)Cuerpo de la solicitud
Endpoint
POST /api/cctv/matching/{club}/detail/{matchId}/unlink
Solicitud de ejemplo
curl -X POST https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId}/unlink \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
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 personaEndpoint
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 CCTVEndpoint
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ónCuerpo 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ónCuerpo 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.
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 clubEndpoint
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ónEndpoint
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ónEndpoint
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 AlgoliaEndpoint
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 cargaEndpoint
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 predeterminadoEndpoint
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 respuestaEndpoint
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ánEndpoint
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
{}
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 accederEndpoint
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 unixEndpoint
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 unixEndpoint
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 unixEndpoint
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 clubEndpoint
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ónEndpoint
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 clubEndpoint
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 clubEndpoint
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 clubEndpoint
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 accederEndpoint
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ónEndpoint
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 clubEndpoint
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 clubEndpoint
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 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 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 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 obtenerEndpoint
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 obtenerEndpoint
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ónEndpoint
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ónEndpoint
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 realmenteEndpoint
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ánEndpoint
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 funcionesEndpoint
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 marcaEndpoint
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ánEndpoint
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 marcaEndpoint
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 datosEndpoint
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 socioEndpoint
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 socioEndpoint
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 LIMITEDEndpoint
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 socioEndpoint
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 miembroEndpoint
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 miembroCuerpo 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/DELETEEndpoint
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 rolEndpoint
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 rolEndpoint
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 solicitudEndpoint
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ónEndpoint
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 solicitudEndpoint
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 informeEndpoint
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 clubEndpoint
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., 2021Endpoint
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 clubEndpoint
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., 2021Endpoint
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ónEndpoint
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., 2021Endpoint
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-DDEndpoint
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 comasEndpoint
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 registroEndpoint
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-MMEndpoint
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ánEndpoint
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ánEndpoint
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ánEndpoint
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 registroEndpoint
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ónEndpoint
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 facturasEndpoint
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 ACLEndpoint
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 anteriorEndpoint
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 socketEndpoint
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ónEndpoint
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óduloEndpoint
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ónicoEndpoint
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
{}