Введение
Добро пожаловать в Performance Hub API. Этот API управляет данными клуба и ключевыми системами, интегрированными с вашим клубом и его внешними системами, и не является общедоступным API. Подробнее об использовании различных систем Performance Hub, которые поддерживает этот API, см. соответствующий раздел [документации Performance Hub](https://docs.performancehub.co) для нужной вам системы.
Базовый URL
https://portal.hub.gymsystems.co
Аутентификация
Данные для аутентификации будут предоставлены после одобрения вашей интеграции.
Событие устройства «ход агента завершён» (триггер веб-push-уведомления)
Вызывается sidecar-процессом сопряжённого устройства ИИ-агента (никогда не браузерами), когда запуск агента, инициированный из веб-интерфейса, завершается и длится дольше порога уведомлений устройства. Аутентификация выполняется кратковременным HS256 JWT устройства (aud 'events'). Дубликаты устраняются по сочетанию устройство+сеанс+начало, частота ограничивается для каждого устройства, затем уведомление доставляется в HTML5 push-подписки инициировавшего пользователя с прямой ссылкой на беседу.
Тело запроса
Конечная точка
POST /ai/events/agent-turn-complete
Пример запроса
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 '{}'
Ответ
{}
Push-уведомление, инициированное агентом (навык ph-notify)
Вызывается sidecar-процессом сопряжённого устройства ИИ-агента от имени агента на устройстве (навык ph-notify), чтобы отправить произвольное уведомление в браузер и на мобильные устройства пользователя. Аутентификация выполняется кратковременным HS256 JWT устройства (aud 'events'). Целевой пользователь должен иметь доступ к устройству (политика доступа для каждого агента); если пользователь не указан, уведомление получает владелец устройства. Частота ограничивается для каждого устройства отдельно от событий завершения хода.
Тело запроса
Конечная точка
POST /ai/events/agent-notify
Пример запроса
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 '{}'
Ответ
{}
Загрузка изображения для уведомления (навык ph-notify)
Принимает необработанное тело изображения от сопряжённого устройства (JWT с aud 'events') и сохраняет его в общедоступном бакете notify-media под неугадываемым ключом UUID. Объекты автоматически удаляются через 7 дней (жизненный цикл S3). Возвращает общедоступный https URL для использования в качестве `imageUrl` в /ai/events/agent-notify. Ограничение 5 МБ; только png/jpeg/gif/webp.
Тело запроса
Конечная точка
POST /ai/media/notify-image
Пример запроса
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 '{}'
Ответ
{}
Ретранслятор MCP устройства для Connected Apps (внешние SaaS-инструменты)
Эндпоинт MCP Streamable HTTP для подключённых устройств ИИ-агента (сервер MCP "connected_apps" на прослушивателе :8790 вспомогательного контейнера устройства). Аутентификация выполняется краткосрочным JWT HS256 для каждого устройства (aud 'mcp' — те же учётные данные, что и для /mcp), а доступ зависит от флага включения Connected Apps у АГЕНТА (подключения относятся к устройству агента, а не к объекту). Запросы передаются потоком на собственный сервер MCP сеанса агента на вышестоящей платформе инструментов, а заголовки сеанса добавляются на стороне сервера; вышестоящие учётные данные никогда не попадают на устройство. Названия инструментов и брендинг поставщика при передаче заменяются в обе стороны. При ответе 401/410 от вышестоящего сервера (сеанс истёк) сеанс один раз создаётся заново и запрос повторяется.
Конечная точка
POST /mcp/apps
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/mcp/apps \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Поиск в журналах аудита API (доступ через модуль IAM & Admin)
Поиск и фильтрация журналов доступа к API с расширенными возможностями фильтрации. Пользователи видят журналы только тех организаций, к которым у них есть доступ.
Параметры
organisationId `string` (необязательно) ID организации для проверки ACL (обязательно)Тело запроса
Конечная точка
POST /api/admin/audit-logs/search
Пример запроса
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 '{}'
Ответ
{}
Получение кешированной статистики журналов аудита из Redis (доступ через модуль IAM & Admin)
Получение агрегированной статистики из кеша Redis для мгновенной загрузки панели
Параметры
timeWindow `string` (необязательно) Временной интервал для статистики (по умолчанию 12h)Конечная точка
GET /api/admin/audit-logs/statistics-cached
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/admin/audit-logs/statistics-cached \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получение статистики журналов аудита (доступ через модуль IAM & Admin)
Получение агрегированной статистики для панели. Ограничено организациями пользователя.
Параметры
startTime `number` (необязательно) Время начала (метка времени Unix), по умолчанию 24 часа назад endTime `number` (необязательно) Время окончания (метка времени Unix), по умолчанию текущее времяКонечная точка
GET /api/admin/audit-logs/statistics
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/admin/audit-logs/statistics \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получение данных временных рядов для журналов аудита (доступ через модуль IAM & Admin)
Получение сгруппированных по интервалам данных временных рядов для визуализации хронологии запросов
Параметры
timeWindow `string` (необязательно) Временной интервал для данных временных рядов: - 1h: последний 1 час (блоки по 10 минут) - 12h: последние 12 часов (блоки по 10 минут) - 24h: последние 24 часа (блоки по 10 минут) - 7d: последние 7 дней (блоки по 1 часу) - 14d: последние 14 дней (блоки по 1 часу)Конечная точка
GET /api/admin/audit-logs/timeseries
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/admin/audit-logs/timeseries \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получение организаций, к журналам аудита которых у пользователя есть доступ (доступ через модуль IAM & Admin)
Возвращает список организаций, журналы аудита которых может просматривать текущий пользователь
Конечная точка
GET /api/admin/audit-logs/user-organisations
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/admin/audit-logs/user-organisations \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Первоначальный вызов для создания нового клуба. Обратите внимание: создаётся только объект клуба-«шаблона», после чего требуется второй запрос API, чтобы дополнить клуб его данными, такими как часы работы, местоположение, ссылки на социальные сети и т. д.
Параметры
body `string` (обязательно) JSON-объект нового клуба для добавления в систему.Конечная точка
POST /api/admin/clubs/addclub
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/admin/clubs/addclub \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Добавляет нового пользователя в систему
Параметры
body `string` (обязательно) JSON-объект с данными пользователя, которые нужно добавить или обновить.Конечная точка
POST /api/users
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/users \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список всех пользователей (учётных записей Google Apps), имеющих доступ к внутренней системе или API
Конечная точка
GET /api/admin/users/listusers
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/admin/users/listusers \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список ключей MCP пользователя (в скрытом виде). Пользователи могут просматривать список собственных ключей.
Параметры
userId `string` (обязательно)Конечная точка
GET /api/users/{userId}/mcp-keys
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/users/{userId}/mcp-keys \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создание нового ключа MCP API для пользователя. Пользователи могут создавать собственные ключи.
Параметры
userId `string` (обязательно) body `object` (необязательно)Конечная точка
POST /api/users/{userId}/mcp-keys
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/users/{userId}/mcp-keys \
-H "x-api-key: YOUR_API_KEY"
Отзыв или удаление ключа MCP API. Пользователи могут удалять собственные ключи.
Параметры
userId `string` (обязательно) keyId `string` (обязательно)Конечная точка
DELETE /api/users/{userId}/mcp-keys/{keyId}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/users/{userId}/mcp-keys/{keyId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удаление роли у пользователя
Параметры
userId `string` (необязательно) Адрес электронной почты пользователя, у которого нужно удалить роль. roleId `string` (необязательно) ID роли, которую нужно удалить у пользователя.Конечная точка
DELETE /api/users/{userId}/roles/{roleId}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/users/{userId}/roles/{roleId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет данные профиля существующего пользователя (firstName, lastName, phoneNumber)
Параметры
userId `string` (обязательно) Адрес электронной почты пользователя body `object` (обязательно) Данные профиля пользователя для обновленияКонечная точка
PATCH /api/users/{userId}
Пример запроса
curl -X PATCH https://portal.hub.gymsystems.co/api/users/{userId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создание или обновление роли пользователя
Параметры
body `object` (необязательно)Конечная точка
PUT /api/users/{userId}/roles
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/users/{userId}/roles \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Live Services, работающие на ИИ-агенте объекта (средство выбора для публикации)
Получает через туннель Live Services устройства, обнаруженные мостом, для средства выбора «Publish to Performance Hub» в апплете. Требуются модуль ph-ai-agent И доступ к устройству уровня 'open' (те же требования, что и для самой публикации). Каждый сервис помечается полем publishedAppId, если для его порта уже существует Custom App.
Параметры
club `string` (обязательно) device `string` (обязательно)Конечная точка
GET /api/agent-apps/services/{club}/{device}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/services/{club}/{device} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Индекс имён значков MDI, встроенный в ИИ-агент объекта (средство выбора значков)
Проксирует через туннель встроенный индекс значков MDI моста устройства (GET /__services/icons/mdi/index.json). Средство выбора при публикации и редактировании использует каталог, входящий в апплет (та же закреплённая версия 7.4.47); SVG опубликованных приложений берутся из локального пакета @mdi/js сервера портала. Требования к доступу те же, что и для средства выбора сервисов (модуль ph-ai-agent + доступ к устройству уровня 'open').
Параметры
club `string` (обязательно) device `string` (обязательно)Конечная точка
GET /api/agent-apps/mdi-index/{club}/{device}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/mdi-index/{club}/{device} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получение пакета SVG-значков MDI с ИИ-агента объекта (предпросмотр в средстве выбора)
За один вызов получает до 60 именованных глифов MDI из встроенного набора значков устройства; на сервере они очищаются по тому же списку разрешённых элементов, что применяется к сохранённым значкам приложений. Используется средством выбора значков для отображения результатов поиска; для неизвестных имён возвращается null.
Параметры
club `string` (обязательно) device `string` (обязательно)Тело запроса
Конечная точка
POST /api/agent-apps/mdi-icons/{club}/{device}
Пример запроса
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 '{}'
Ответ
{}
Области аудитории, для которых инициатор запроса может публиковать с этого объекта
Допустимые границы аудитории публикующего для средства выбора при публикации и редактировании: объекты, к которым дают доступ его роли ph-ai-agent (область из нескольких объектов), а также наличие у него полномочий уровня организации, необходимых для аудитории всего бренда или всей организации для бренда или организации этого объекта. Те же правила повторно применяются на сервере при публикации или обновлении (validatePublishAudience): эта конечная точка только формирует интерфейс.
Параметры
club `string` (обязательно)Конечная точка
GET /api/agent-apps/audience-options/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/audience-options/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Автозаполнение коллег для аудитории приложения из указанных пользователей
Ищет ТОЛЬКО среди пользователей, которых инициатор запроса уже видит, то есть людей, роли которых пересекаются хотя бы с одним объектом, регионом или организацией в собственном доступе ph-ai-agent инициатора. Минимальная длина запроса в 2 символа и ограничение в 10 результатов делают конечную точку бесполезной для сбора данных; тот же набор доступности повторно применяется на сервере при сохранении аудитории.
Параметры
club `string` (обязательно) q `string` (обязательно)Конечная точка
GET /api/agent-apps/user-search/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/user-search/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Публикация Live Service ИИ-агента как Custom App в Performance Hub
Регистрирует веб-приложение, размещённое на ИИ-агенте объекта (Live Service, обнаруженный мостом), как пункт бокового меню «Custom Apps» для выбранной аудитории. Требуются модуль ph-ai-agent на этом объекте И доступ к устройству уровня 'open'; аудитория ограничена областями собственных ролей публикующего (публиковать шире собственного доступа нельзя). Идентификация сервиса выполняется В РЕАЛЬНОМ ВРЕМЕНИ по списку /__services устройства; схема http/https никогда не сохраняется.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/agent-apps/publish/{club}
Пример запроса
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 '{}'
Ответ
{}
Опубликованные Custom Apps, видимые на этом объекте
Возвращает активные опубликованные приложения, аудитория которых охватывает этот объект, в формате, который отображает боковое меню (appId, name, icon, description). Аудитория заново определяется при каждом вызове, поэтому изменения доступа вступают в силу немедленно.
Параметры
club `string` (обязательно)Конечная точка
GET /api/agent-apps/menu/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/menu/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Опубликованные приложения, управляемые с этого объекта (представление публикующего)
Полные строки приложений, ДОМАШНИМ объектом которых является этот клуб, для списка управления «Published Apps» в апплете. Каждая строка помечается полем canManage для запрашивающего пользователя (публикующего).
Параметры
club `string` (обязательно)Конечная точка
GET /api/agent-apps/manage/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/manage/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Выпуск токена просмотра с областью сервиса для опубликованного Custom App
Возвращает кратковременный подписанный URL и токен, с помощью которых браузер открывает ОДНО опубликованное приложение напрямую через региональный ретрансляционный шлюз устройства. Токен содержит утверждение svc с портом сервиса, поэтому шлюз ограничивает сеанс путём /__services/proxy/
Параметры
club `string` (обязательно) appId `string` (обязательно)Конечная точка
POST /api/agent-apps/access/{club}/{appId}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/agent-apps/access/{club}/{appId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Ответственный за поддержку опубликованного Custom App (контакт владельца)
Кто поддерживает это приложение, опубликованное пользователем: адрес электронной почты публикующего (или, если его нет, владельца агента, на котором размещено приложение). Отображается на панелях офлайн-режима и ошибок у зрителя, чтобы запросы в поддержку направлялись владельцу приложения, а не в Performance Hub: опубликованные приложения не входят в основную поддержку Performance Hub. Сначала повторно проверяется аудитория приложения; зрители, которым приложение не было предоставлено, ничего не узнают. Для приостановленных приложений ответ тоже возвращается (владельцы отвечают и на вопросы «почему оно приостановлено?»).
Параметры
club `string` (обязательно) appId `string` (обязательно)Конечная точка
GET /api/agent-apps/support-info/{club}/{appId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/support-info/{club}/{appId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Отправка запроса в поддержку владельцу опубликованного Custom App по электронной почте
Отправляет сообщение зрителя контакту поддержки приложения (публикующему или, если его нет, владельцу агента) в виде фирменного письма: «Кому» — владелец, «Копия» — зритель (для учёта своего запроса), «Ответить» — зритель, чтобы владелец отвечал ему напрямую. Опубликованные приложения поддерживаются пользователями, поэтому такие запросы не попадают в очередь Performance Hub. Аудитория проверяется повторно; не более одного запроса от зрителя по одному приложению за 15 минут (период ожидания в Redis, при сбое запрос пропускается).
Параметры
club `string` (обязательно) appId `string` (обязательно)Тело запроса
Конечная точка
POST /api/agent-apps/support-request/{club}/{appId}
Пример запроса
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 '{}'
Ответ
{}
Обновление опубликованного Custom App (название, значок, описание, статус, аудитория)
Только для публикующего. Изменения аудитории повторно проверяются по областям ролей РЕДАКТОРА с теми же ограничениями, что и при публикации. Статус переключается между active и paused (приостановленные приложения исчезают из меню, и выпуск токенов для них отклоняется).
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/agent-apps/update/{club}
Пример запроса
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 '{}'
Ответ
{}
Отмена публикации Custom App (мягкое удаление)
Только для публикующего. Выполняет мягкое удаление строки реестра: приложение сразу исчезает из меню, и выпуск токенов просмотра отклоняется; уже выданные сеансы шлюза завершаются по истечении срока действия токена.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/agent-apps/unpublish/{club}
Пример запроса
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 '{}'
Ответ
{}
Передача владения опубликованным Custom App
Работает так же, как смена владельца ИИ-агента: текущий публикующий или владелец учётной записи (модуль billing) может передать приложение другому пользователю, который затем управляет им. Новый владелец должен иметь доступ к объекту в домашнем клубе приложения.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/agent-apps/transfer-owner/{club}
Пример запроса
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 '{}'
Ответ
{}
Полный отчёт о проверке (+ проверка LLM) для одной версии навыка
Полный список найденных проблем для версии: только для публикующего и администраторов организации (при рассмотрении на утверждение); устанавливающие пользователи вместо этого видят сводные показатели в сведениях о навыке.
Параметры
club `string` (обязательно) skillId `string` (обязательно) version `string` (обязательно)Конечная точка
GET /api/agent-skills/scan-report/{club}/{skillId}/{version}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/scan-report/{club}/{skillId}/{version} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Отправка черновой версии навыка (публикация или постановка в очередь на утверждение)
Продвигает черновую версию дальше в соответствии с правилами управления организации. Если организация включила проверку LLM, сначала выполняется проверка инструкций (по возможности; вердикт 'fail' отклоняет версию, вердикт 'flag' принудительно отправляет её в очередь на утверждение). Публикации уровня объекта публикуются сразу, если правила управления не требуют утверждения; публикации в библиотеке организации (аудитория бренда или организации) по умолчанию требуют утверждения. Публикация задаёт latestVersion навыка: установки с политикой 'auto' получают её при следующем цикле согласования.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/agent-skills/submit/{club}
Пример запроса
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 '{}'
Ответ
{}
Библиотека навыков, видимая на этом объекте (с фильтром по аудитории)
Активные навыки, у которых есть хотя бы одна опубликованная версия, аудитория которой охватывает этот объект (или включает зрителя), со сводкой последней опубликованной версии и степенью распространения в организации (число разных объектов, а не общее число установок). Аудитория заново определяется при каждом вызове.
Параметры
club `string` (обязательно)Конечная точка
GET /api/agent-skills/library/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/library/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Сведения о навыке (версии, требования, сводка проверки, распространение)
Полные сведения об одном навыке библиотеки: история версий с журналами изменений и сводками проверок (списки конечных точек по версиям используются для сравнения проверок при обновлении), заявленные в манифесте требования, сведения о публикующем и показатель распространения по числу объектов. Аудитория проверяется повторно: зрители, которым навык не был предоставлен, ничего не узнают (публикующий и администраторы организации видят его всегда).
Параметры
club `string` (обязательно) skillId `string` (обязательно)Конечная точка
GET /api/agent-skills/skill/{club}/{skillId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/skill/{club}/{skillId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Навыки, опубликованные с этого объекта (список управления публикующего)
Полные строки навыков, ДОМАШНИМ объектом которых является этот клуб, каждая с полем canManage для запрашивающего пользователя и сводкой последней версии (включая черновики и версии, ожидающие утверждения: это рабочее представление публикующего).
Параметры
club `string` (обязательно)Конечная точка
GET /api/agent-skills/manage/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/manage/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Установка навыка из библиотеки на ИИ-агент объекта
Зависит от правил управления: installSources организации должен это разрешать, аудитория навыка должна охватывать этот объект (или включать инициатора запроса), версия должна быть опубликована, а инициатор запроса должен соответствовать уровню whoCanInstall для целевого устройства (владелец / разрешённый пользователь / администратор объекта / администратор организации; см. правила управления). Записывает строку жизненного цикла установки (источник истины) и сразу выполняет отправку по возможности; задание согласования по расписанию гарантирует доставку, как только устройство станет доступно.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/agent-skills/install/{club}
Пример запроса
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 '{}'
Ответ
{}
Утверждение ожидающего обновления навыка для одной установки
Переводит desiredVersion установки на последнюю опубликованную версию (ручной шаг для политик 'notify' и 'pinned', а также путь, когда правила управления задают updatePosture 'approvalRequired'). Сохраняет текущую версию как цель для отката на один шаг и снимает закрепление обновлений после отката (skipVersion). Тот же уровень разрешений whoCanInstall, что и для установки.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/agent-skills/update-approve/{club}
Пример запроса
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 '{}'
Ответ
{}
Откат установленного навыка к предыдущей версии
Устанавливает desiredVersion равным previousVersion из строки установки (сохраняется при каждой смене версии), после чего обычный путь доставки переустанавливает навык. Откат на один шаг: версии меняются местами, поэтому двойной откат возвращает к исходному состоянию. Также закрепляет обновления (skipVersion = версия, с которой выполнен откат), чтобы политики auto/notify не отменяли откат; закрепление снимается при публикации строго более новой версии, при update-approve или при set-policy.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/agent-skills/rollback/{club}
Пример запроса
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 '{}'
Ответ
{}
Удаление навыка с ИИ-агента объекта
Помечает строку установки как pending-uninstall и отправляет требуемое состояние; строка удаляется, когда устройство подтвердит удаление (обратное чтение при согласовании). Тот же уровень разрешений whoCanInstall, что и для установки.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/agent-skills/uninstall/{club}
Пример запроса
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 '{}'
Ответ
{}
Настройка политики обновления навыка для отдельной установки на одном устройстве
auto (согласование применяет новые опубликованные версии автоматически, если updatePosture организации не требует утверждения), notify (владелец получает одно уведомление о каждой новой версии и применяет её вручную) или pinned (версия не меняется без явного update-approve). Изменение политики снимает закрепление обновлений после отката (skipVersion). Тот же уровень разрешений whoCanInstall, что и для установки.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/agent-skills/set-policy/{club}
Пример запроса
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 '{}'
Ответ
{}
Установки навыков на ИИ-агенте объекта (вкладка Skills)
Строки жизненного цикла установок для одного устройства, каждая с полями карточки навыка и признаком наличия более новой опубликованной версии. Требуется доступ к устройству уровня 'open' (вкладка Skills находится в выдвижной панели агента).
Параметры
club `string` (обязательно) device `string` (обязательно)Конечная точка
GET /api/agent-skills/installs/{club}/{device}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/installs/{club}/{device} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Версии навыков, ожидающие утверждения в организации этого объекта
Очередь утверждения администратора организации: все версии навыков организации, ожидающие утверждения, с карточкой навыка и сводками проверки и LLM. Только для администраторов организации.
Параметры
club `string` (обязательно)Конечная точка
GET /api/agent-skills/approvals/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/approvals/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Утверждение ожидающей версии навыка (публикует её)
Только для администраторов организации. Версия публикуется, latestVersion навыка обновляется, а публикующий получает уведомление. Установки с политикой 'auto' получают версию при следующем цикле согласования.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/agent-skills/approve/{club}
Пример запроса
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 '{}'
Ответ
{}
Отклонение ожидающей версии навыка
Только для администраторов организации. Версия отклоняется с указанием причины проверяющего, а публикующий получает уведомление: он может устранить найденные проблемы и отправить новую версию (версии неизменяемы).
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/agent-skills/reject/{club}
Пример запроса
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 '{}'
Ответ
{}
Действующие правила управления навыками агентов для организации этого объекта
Сохранённая политика организации, наложенная на значения платформы по умолчанию (организация без сохранённой строки видит только значения по умолчанию). Только для администраторов организации.
Параметры
club `string` (обязательно)Конечная точка
GET /api/agent-skills/governance/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/governance/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновление правил управления навыками агентов для организации этого объекта
Частичное обновление: меняются только переданные поля, остальные сохраняют сохранённые значения или значения по умолчанию. Только для администраторов организации. Переопределения для отдельных устройств хранятся в строке регистрации и задаются через существующие маршруты настройки устройств.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/agent-skills/governance/{club}
Пример запроса
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 '{}'
Ответ
{}
Получение данных об окружающей среде для объекта
Возвращает текущие погодные условия, включая время восхода и заката (через Open-Meteo), и температуру в помещении объекта (с датчиков Duress) для указанного клуба. Кешируется в Redis на 30 минут.
Параметры
clubId `string` (обязательно) Внутренний ID клуба или объектаКонечная точка
GET /api/clubs/{clubId}/environment
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/environment \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Добавляет универсальное IoT-устройство и привязывает его к клубу.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно добавить устройство. body `string` (обязательно) JSON-объект нового экрана для привязки.Конечная точка
POST /api/devices/addGenericDevice/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/devices/addGenericDevice/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удаление экрана и сброс к заводским настройкам
Удаляет активную привязку экрана к объекту и назначает устойчивый сброс к заводским настройкам. Выключенный экран выполнит сброс после следующего включения и повторного подключения, а затем вернётся на страницу сопряжения HDMI. Исторические записи о выставлении счетов сохраняются.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/display-screens/reset/{club}
Пример запроса
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 '{}'
Ответ
{}
Привязывает контроллер двери к объекту.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/door-controllers/associate/{club}
Пример запроса
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 '{}'
Ответ
{}
Обновляет настройки контроллера двери для объекта.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/door-controllers/update/{club}
Пример запроса
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 '{}'
Ответ
{}
Выводит контроллер двери объекта из эксплуатации.
Параметры
club `string` (обязательно)Конечная точка
POST /api/devices/door-controllers/decommission/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/devices/door-controllers/decommission/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает конфигурацию реле контроллера двери.
Параметры
uuid `string` (обязательно)Конечная точка
GET /api/devices/door-controllers/config/{uuid}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/door-controllers/config/{uuid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает метаданные устройства
Параметры
uuid `string` (обязательно) Уникальный ID устройстваКонечная точка
GET /api/devices/metadata/{uuid}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/metadata/{uuid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает метаданные устройства. Ответ содержит строку метаданных на верхнем уровне (устаревший формат), а также `detectedType` (camera | ai-edge-processor | door-controller | ph-ai-agent | null) и `online` (true, если данные обновлялись в течение последних 5 минут).
Параметры
deviceSerialNumber `string` (обязательно) Серийный номер устройстваКонечная точка
GET /api/devices/metadata/serial/{serialNo}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/metadata/serial/{serialNo} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает данные Smart Club для клуба.
Параметры
club_id `string` (обязательно) Внутренний ID клуба, к которому нужно добавить устройство.Конечная точка
GET /api/clubs/{club_id}/smart-club-data
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club_id}/smart-club-data \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает все устройства, привязанные к отдельному клубу.
Параметры
club `string` (обязательно) Внутренний ID клуба, для которого нужно получить список устройств.Конечная точка
GET /api/devices/list/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/list/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает все выпуски (версии) приложений для наших устройств balena.
Конечная точка
GET /api/devices/listReleases
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/listReleases \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Перемещает устройство на новый объект (клуб) и обновляет связанные системы.
Параметры
club `string` (обязательно) ID исходного объекта (текущий клуб, в котором находится устройство) body `object` (обязательно) Параметры перемещенияКонечная точка
POST /api/devices/move/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/devices/move/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Пытается установить подключение к маршрутизатору объекта, выбирая наиболее подходящее устройство в клубе и отправляя команду MQTT для создания туннеля.
Параметры
facilityID `string` (обязательно) Внутренний ID объекта, к маршрутизатору которого выполняется попытка подключения.Конечная точка
GET /api/devices/openRouterWebpage/{facilityID}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/openRouterWebpage/{facilityID} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Каталог Cloud Agent (зоны, размеры, текущие цены продажи)
Параметры
club `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/cloud/catalog/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/catalog/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Расчёт стоимости Cloud Agent (программное обеспечение + хостинг)
Конечная точка
POST /api/devices/ph-ai-agent/cloud/quote/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/quote/{club} \
-H "x-api-key: YOUR_API_KEY"
Запуск Cloud Agent (постановка подготовки в очередь + автоматическая привязка)
Конечная точка
POST /api/devices/ph-ai-agent/cloud/launch/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/launch/{club} \
-H "x-api-key: YOUR_API_KEY"
Статус задания Cloud Agent
Конечная точка
GET /api/devices/ph-ai-agent/cloud/jobs/{club}/{jobId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/jobs/{club}/{jobId} \
-H "x-api-key: YOUR_API_KEY"
Полное удаление Cloud Agent (ВМ + balena + регистрация)
Конечная точка
POST /api/devices/ph-ai-agent/cloud/delete/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/delete/{club} \
-H "x-api-key: YOUR_API_KEY"
Решение по отложенному удалению Cloud Agent (повторить резервное копирование, удалить без резервной копии или отменить)
Конечная точка
POST /api/devices/ph-ai-agent/cloud/delete-decision/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/delete-decision/{club} \
-H "x-api-key: YOUR_API_KEY"
Список Connected Apps агента (наборы и приложения с подключёнными учётными записями)
Возвращает состояние Connected Apps агента: флаг включения, сводки по наборам (Google Workspace, Microsoft 365) и отобранный каталог приложений с подключёнными учётными записями каждого приложения (несколько учётных записей: агент может иметь несколько учётных записей в одном приложении, каждую с необязательным псевдонимом), полученными из вышестоящего сеанса агента.
Параметры
facilityId `string` (обязательно) deviceId `string` (обязательно) UUID balena устройства агента.Конечная точка
GET /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Полный каталог магазина Connected Apps для агента
Возвращает все приложения, доступные для подключения (полный каталог наборов инструментов с управляемой аутентификацией, кешируется на сервере примерно на 12 часов), с уровнями «рекомендуемые» и «набор», подключёнными учётными записями агента по каждому приложению, а также сводками по наборам и ожидающими запросами агента на подключение: один ответ для магазина приложений с поиском на стороне клиента.
Параметры
facilityId `string` (обязательно) deviceId `string` (обязательно) UUID balena устройства агента.Конечная точка
GET /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/catalog
Пример запроса
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"
Ответ
{}
Отклонение ожидающего запроса агента на подключение
Помечает ожидающий запрос агента на подключение набора инструментов как отклонённый (он исчезает из раздела магазина "Requested by your agent"). Идемпотентно: отклонение запроса, который не ожидает обработки, ничего не делает.
Параметры
facilityId `string` (обязательно) deviceId `string` (обязательно) UUID balena устройства агента.Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/requests/dismiss
Пример запроса
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 '{}'
Ответ
{}
Включение или отключение Connected Apps для агента
Сохраняет переключатель Connected Apps агента и отправляет переменную устройства Balena PH_APPS_MCP_ENABLED на это устройство (по возможности: строгим ограничением для ретрансляции MCP служит флаг на стороне Performance Hub).
Параметры
facilityId `string` (обязательно) deviceId `string` (обязательно) UUID balena устройства агента.Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/enable
Пример запроса
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 '{}'
Ответ
{}
Начало подключения одного приложения к агенту (процесс OAuth Connect Link)
Запускает размещённый процесс Connect Link для одного набора инструментов и возвращает URL, на который нужно направить пользователя. Необязательный псевдоним обозначает новую учётную запись (несколько учётных записей: повторное подключение уже подключённого приложения добавляет ЕЩЁ ОДНУ учётную запись, не более 10 на приложение). Выполняется через тот же цепочечный обратный вызов, что и подключение наборов (набор из одного инструмента), поэтому по завершении пользователь возвращается на страницу апплета ph-ai-agent.
Параметры
facilityId `string` (обязательно) deviceId `string` (обязательно) UUID balena устройства агента.Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect
Пример запроса
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 '{}'
Ответ
{}
Данные для подготовки подключения одного приложения (режим, поля учётных данных, руководство по настройке)
Всё, что нужно диалоговому окну подключения перед началом подключения: способ подключения приложения (oauth = размещённый процесс согласия, credentials = форма в продукте), поля учётных данных для режима credentials и руководство по настройке в продукте (написанное вручную для приоритетных приложений, в остальных случаях сгенерированное по метаданным полей приложения; никогда не ссылка на внешнюю документацию). Для приложений с собственным OAuth также указывается, зарегистрировано ли уже OAuth-приложение клиента для ЭТОГО агента (byoConfigured), и URL перенаправления для регистрации у поставщика.
Параметры
facilityId `string` (обязательно) deviceId `string` (обязательно) UUID balena устройства агента. toolkit `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-info/{toolkit}
Пример запроса
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"
Ответ
{}
Подключение приложения с учётными данными пользователя (ключ API и т. д., без OAuth)
Создаёт подключённую учётную запись для приложения в режиме credentials прямо из формы в продукте, без размещённого процесса согласия. Поля учётных данных берутся из ответа connect-info приложения; все обязательные поля должны быть заполнены. Учётные данные проверяются у поставщика, если это поддерживается (по возможности: некоторые приложения отклоняют неверный ключ только при первом вызове инструмента агентом). Необязательный псевдоним обозначает новую учётную запись (несколько учётных записей: повторное подключение уже подключённого приложения добавляет ЕЩЁ ОДНУ учётную запись).
Параметры
facilityId `string` (обязательно) deviceId `string` (обязательно) UUID balena устройства агента.Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-credentials
Пример запроса
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 '{}'
Ответ
{}
Регистрация собственного OAuth-приложения клиента для приложения BYO и запуск процесса подключения
Для приложений с собственным OAuth (Xero, Shopify, ...): принимает ID клиента и секрет клиента OAuth-приложения, созданного клиентом у поставщика (по шагам руководства по настройке приложения), регистрирует его для ЭТОГО агента (секрет хранится только на вышестоящей платформе интеграции, но никогда не в Performance Hub) и сразу запускает размещённый процесс входа с ним. Возвращает URL согласия, на который нужно направить пользователя, по тому же контракту, что и конечная точка подключения. Повторная отправка заменяет зарегистрированное приложение агента (например, после смены секрета); существующие подключённые учётные записи продолжают работать.
Параметры
facilityId `string` (обязательно) deviceId `string` (обязательно) UUID balena устройства агента.Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-oauth-app
Пример запроса
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 '{}'
Ответ
{}
Запуск подключения набора одним щелчком для агента (цепочка процессов Connect Link)
Запускает цепочку подключения для целого набора (например, google-workspace). Возвращённый URL открывает экран согласия первого набора инструментов; после каждого завершения выполняется перенаправление 302 сразу в процесс следующего набора инструментов, а в конце — на страницу апплета ph-ai-agent. Элементы, у которых уже есть подключённая учётная запись, ПРОПУСКАЮТСЯ, поэтому повтор после сбоя в середине цепочки продолжается с недостающих приложений, не создавая дублирующих учётных записей. Если все элементы уже подключены, вся цепочка выполняется заново: это явный процесс "add another account".
Параметры
facilityId `string` (обязательно) deviceId `string` (обязательно) UUID balena устройства агента.Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-suite
Пример запроса
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 '{}'
Ответ
{}
Отключение одной подключённой учётной записи от агента
Удаляет одну подключённую учётную запись (несколько учётных записей: другие учётные записи того же приложения остаются подключёнными). Перед удалением проверяется, что учётная запись принадлежит этому агенту; если это была ПОСЛЕДНЯЯ учётная запись приложения, набор инструментов удаляется из подключённых у агента (сеанс отложенно создаётся заново, чтобы обновился список инструментов агента).
Параметры
facilityId `string` (обязательно) deviceId `string` (обязательно) UUID balena устройства агента.Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/disconnect
Пример запроса
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 '{}'
Ответ
{}
Переименование (смена псевдонима) одной из подключённых учётных записей агента
Задаёт отображаемый псевдоним одной подключённой учётной записи. Обычно псевдонимы задаются автоматически после OAuth (по удостоверению вошедшего пользователя); эта конечная точка обеспечивает ручное переименование в диалоговом окне сведений о приложении. Пустой псевдоним очищает метку. Перед вышестоящим обновлением проверяется, что учётная запись принадлежит этому агенту.
Параметры
facilityId `string` (обязательно) deviceId `string` (обязательно) UUID balena устройства агента.Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/rename-account
Пример запроса
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 '{}'
Ответ
{}
Включение или отключение встроенного сервиса Performance Hub для агента
Включает или отключает для этого агента один постоянно доступный встроенный сервис (Smart Search, Weather, ...). Встроенным сервисам не нужны подключение или OAuth: они входят в состав каждого агента и включены по умолчанию; этот переключатель сохраняет переопределение для агента и сразу заново создаёт вышестоящий сеанс агента, чтобы обновился набор инструментов. Обратите внимание, что отдельный переключатель "External apps" (маршрут /enable) полностью отключает весь MCP-сервер приложений: когда он выключен, встроенные сервисы тоже недоступны независимо от их собственных переключателей.
Параметры
facilityId `string` (обязательно) deviceId `string` (обязательно) UUID balena устройства агента. slug `string` (обязательно) Slug встроенного сервиса.Тело запроса
Конечная точка
PATCH /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/built-in/{slug}
Пример запроса
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 '{}'
Ответ
{}
Привязка устройства ИИ-агента к объекту
Привязка в первую очередь по метаданным. Находит устройство по серийному номеру в текущих метаданных устройств, требует, чтобы оно было онлайн, затем отложенно создаёт строку регистрации, назначает регион ретрансляции Chisel, порт туннеля и секрет, регистрирует этот слот на ретрансляторе и отправляет на устройство конфигурацию объекта и туннеля через Balena. Новым устройствам также назначается сервисная учётная запись MCP по умолчанию (включена, ограничена этим объектом, все возможности); при повторном сопряжении существующее разрешение MCP сохраняется. Необязательные расширенные настройки переопределяют значения по умолчанию при сопряжении (конфигурация резервного копирования, включение или отключение MCP, ограничение доступа), а `restoreFrom` заполняет новое устройство из облачной резервной копии другого устройства объекта (активного или выведенного из эксплуатации; ставит в очередь восстановление между репозиториями, которое возвращается как `restoreRequest` для отслеживания хода выполнения).
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/associate/{club}
Пример запроса
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 '{}'
Ответ
{}
Список устройств ИИ-агентов объекта
Возвращает устройства ИИ-агентов объекта с текущим статусом подключения и туннеля (используется переключателем устройств в апплете).
Параметры
club `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/list/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/list/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновление и сетевой статус ИИ-агента
Возвращает, находится ли устройство онлайн, доступно ли или ожидает ли обновление, и предлагаемый выпуск (закреплённый для парка, если парк закреплён; последний успешный, если парк отслеживает последнюю версию).
Параметры
club `string` (обязательно) uuid `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/update-status/{club}/{uuid}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/update-status/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Текущий статус и метрики устройства ИИ-агента
Возвращает подготовленный снимок для полосы метрик и панели управления апплета: поля идентификации и регистрации, активность и подключение, версии ПО и последние метрики сигнала активности (ЦП, температура, память, хранилище по точкам монтирования, время работы, сеть). Объединяет маяк метаданных устройства и статус обновления Balena; при временном сбое любая из частей может отсутствовать.
Параметры
club `string` (обязательно) uuid `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/device-status/{club}/{uuid}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/device-status/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
ИИ-описание для отчёта о состоянии устройства
Возвращает краткое пояснение для оператора о текущих выявленных проблемах с состоянием. Факты и шаги из сценария действий всегда есть в device-status; этот дополнительный абзац формируется по возможности и может быть null.
Параметры
club `string` (обязательно) uuid `string` (обязательно)Конечная точка
POST /api/devices/ph-ai-agent/health/{club}/{uuid}/explain
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/health/{club}/{uuid}/explain \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Выпуск токена прямого доступа к ретранслятору для ИИ-агента
Возвращает кратковременный подписанный URL, с помощью которого браузер подключается НАПРЯМУЮ к региональному ретрансляционному шлюзу устройства (минуя глобальный узел Performance Hub в Сиднее), а также токен HS256. Полномочия остаются за Performance Hub (здесь выполняются Google SSO и проверки модуля и объекта); ретрансляционный шлюз проверяет токен. Прокси /ai-agent-ui остаётся резервным вариантом.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/access/{club}
Пример запроса
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 '{}'
Ответ
{}
Отправка сообщения чата в сеанс ИИ-агента (быстрый ответ из уведомления)
Серверная ретрансляция для действия быстрого ответа в веб-push-уведомлении: service worker отправляет сюда POST-запрос (тот же источник, файлы cookie SSO), поэтому ответ работает без открытой вкладки Performance Hub. Performance Hub определяет цель ретрансляции устройства (так же, как прокси /ai-agent-ui), проставляет x-ph-user для атрибуции хода (итоговое push-уведомление о завершении возвращается этому пользователю) и пересылает запрос на /api/chat/start устройства с id сеанса.
Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/reply
Пример запроса
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 '{}'
Ответ
{}
Чтение настроек управления доступом ИИ-агента (владелец)
Возвращает блок доступа устройства (режим, список разрешённых, видимость, переключатель поддержки Performance Hub), а также ожидающие запросы на доступ. Доступно для чтения владельцу устройства; другие пользователи получают 403.
Параметры
club `string` (обязательно) uuid `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/access-settings/{club}/{uuid}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/access-settings/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновление настроек управления доступом ИИ-агента (владелец)
Запись режима (org/restricted), списка разрешённых для ограниченного режима, видимости списка (all/admins) и переключателя "permit access from Performance Hub Support". Разрешено владельцу устройства. Самого владельца можно сменить только через reallocate-owner. Одобренные запросы на доступ сохраняются: всё ещё одобренные инициаторы запросов снова добавляются в сохранённый список разрешённых; удаление одного из них из отправленного списка отзывает его одобрение (запрос переходит в статус denied, и он может запросить доступ снова).
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/access-settings/{club}
Пример запроса
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 '{}'
Ответ
{}
Смена владельца ИИ-агента
Передаёт владение устройством другому пользователю Performance Hub. Доступно только владельцам учётной записи (доступ к модулю оплаты SaaS): это запасной вариант на случай ухода владельца агента с ограниченным доступом. Уведомления получают и прежний, и новый владелец (в приложении, push-уведомлением и по электронной почте).
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/reallocate-owner/{club}
Пример запроса
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 '{}'
Ответ
{}
Список пользователей объекта для выбора разрешённых пользователей и владельца ИИ-агента
Возвращает адрес электронной почты и имя (+ флаги isOrgAdmin) каждого пользователя, роль которого даёт доступ к ЭТОМУ объекту. Доступно только владельцу устройства и тем, кто может менять владельца (владельцу учётной записи), чтобы обычные пользователи не могли перечислить базу пользователей.
Параметры
club `string` (обязательно) uuid `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/org-users/{club}/{uuid}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/org-users/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Запрос доступа к ИИ-агенту с ограниченным доступом
Создаёт (или повторно открывает) запрос инициатора на доступ к устройству с ограниченным доступом; идемпотентно для сочетания пользователь+устройство. Владелец получает уведомление в приложении, веб-push-уведомлением и по электронной почте с прямой ссылкой на модуль агента.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/access-request/{club}
Пример запроса
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 '{}'
Ответ
{}
Одобрение или отклонение запроса на доступ к ИИ-агенту (владелец)
Рассмотрение ожидающего запроса владельцем устройства. При одобрении инициатор запроса добавляется в список разрешённых устройства; при любом решении инициатор получает уведомление (в приложении, push-уведомлением и по электронной почте).
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/access-request-resolve/{club}
Пример запроса
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 '{}'
Ответ
{}
Разрешение и применение обновления ИИ-агента
Закрепляет на устройстве предлагаемый выпуск (закреплённый для парка или последний успешный, если парк отслеживает последнюю версию) и снимает блокировку обновлений, чтобы супервизор balena применил его. Состояние на томе данных устройства сохраняется после обновления.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/update/{club}
Пример запроса
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 '{}'
Ответ
{}
Планирование обновления ИИ-агента на более позднее время
Сохраняет запланированное время установки в регистрации устройства. Периодическое серверное задание (каждые 5 минут) применяет обновление (закрепление + разблокировка), когда наступает запланированное время. Новое планирование заменяет существующее расписание устройства.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/update-schedule/{club}
Пример запроса
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 '{}'
Ответ
{}
Отмена запланированного обновления ИИ-агента
Удаляет ожидающую запланированную установку для устройства (ничего не делает, если ничего не запланировано).
Параметры
club `string` (обязательно) uuid `string` (обязательно)Конечная точка
DELETE /api/devices/ph-ai-agent/update-schedule/{club}/{uuid}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/update-schedule/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Выполнение удалённой команды на устройстве ИИ-агента
Публикует разрешённую команду MQTT (перезагрузка, перезапуск контейнера, блокировка или разблокировка обновлений, управление Wi-Fi) для device-controller, работающего на ИИ-агенте. Устройство должно быть привязано к объекту.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/command/{club}
Пример запроса
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 '{}'
Ответ
{}
Обновление конфигурации ИИ-агента, относящейся к объекту
Сохраняет настройки связанного ИИ-агента, которые может изменять оператор: имя устройства, его физическое расположение и периодичность плановой перезагрузки. Расписание перезагрузки также передаётся на устройство в переменной среды Balena REBOOT_DEVICE (2:00 по местному времени), как и для Display Screens.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/config/{club}
Пример запроса
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 '{}'
Ответ
{}
Объекты, на которые можно переместить ИИ-агент с этого объекта
Возвращает объекты той же организации, к которым у вошедшего пользователя есть доступ (кроме текущего объекта), для списка выбора «Переместить на другой объект». Само перемещение выполняет POST /api/devices/move/:club, который на стороне сервера применяет те же правила: та же организация и доступ к целевому объекту.
Параметры
club `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/move-targets/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/move-targets/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Допустимые для выдачи права доступа MCP запрашивающего пользователя для ИИ-агентов объекта
Возвращает, что вошедший пользователь может выдать сервисной учётной записи MCP ИИ-агента в организации этого объекта: объекты и регионы в пределах его собственного доступа, может ли он выдавать область на уровне всей организации, набор модулей, которыми он располагает, и полный каталог инструментов MCP (для расширенной маски по инструментам). Интерфейс использует эти данные, чтобы пользователи видели только варианты в пределах своих прав; эндпоинт POST mcp-access применяет то же ограничение на стороне сервера.
Параметры
club `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/mcp-grantable/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/mcp-grantable/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить конфигурацию сервисной учётной записи MCP ИИ-агента
Возвращает конфигурацию доступа MCP устройства (область, модули, маска инструментов, поля аудита).
Параметры
club `string` (обязательно) uuid `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/mcp-access/{club}/{uuid}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/mcp-access/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Настроить сервисную учётную запись MCP ИИ-агента
Сохраняет конфигурацию доступа MCP устройства с ограничением прав в момент выдачи. Запрашивающий может выдать только объекты и регионы в пределах своего доступа, область организации — только при наличии роли на уровне всей организации, а модули — только те, которыми он сам располагает в организации объекта. Флаг включения также передаётся на устройство в переменной среды Balena PH_MCP_ENABLED.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/mcp-access/{club}
Пример запроса
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 '{}'
Ответ
{}
Получить конфигурацию VPN ИИ-агента (со скрытыми данными)
Возвращает флаг поддержки VPN устройства и список подключений. Содержимое профилей и значения учётных данных никогда не возвращаются — только метаданные, полученные при импорте (удалённые узлы, маршруты, DNS), и флаги наличия учётных данных. Текущее состояние каждого подключения возвращает эндпоинт состояния устройства (beacon metadata.vpn).
Параметры
club `string` (обязательно) uuid `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/vpn-config/{club}/{uuid}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/vpn-config/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Включить или выключить поддержку VPN ИИ-агента
Включает или выключает функцию VPN устройства. Передаёт переменную устройства balena PH_VPN_ENABLED и уведомляет устройство (MQTT vpnConfigChanged); при выключении подключения сохраняются (туннели останавливаются, конфигурация остаётся для повторного включения).
Параметры
club `string` (обязательно) uuid `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/vpn-config/{club}/{uuid}
Пример запроса
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 '{}'
Ответ
{}
Импортировать профили OpenVPN на ИИ-агент
Принимает загрузки в кодировке base64: отдельные файлы .ovpn/.conf, наборы из нескольких файлов (конфигурация + сертификаты/ключи) и архивы (.zip, экспорт Pritunl в .tar/.tgz, .tblk Tunnelblick, .visc/.visz Viscosity). Профили приводятся к каноническому встроенному виду; каждый профиль становится одним подключением (импортируется в отключённом состоянии — введите учётные данные, затем подключитесь). Для непригодных загрузок возвращаются ошибки 400 с описанием, что исправить.
Параметры
club `string` (обязательно) uuid `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/vpn-import/{club}/{uuid}
Пример запроса
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 '{}'
Ответ
{}
Обновить VPN-подключение ИИ-агента (имя / учётные данные / split-DNS)
Обновляет сохранённое подключение. Поля учётных данных доступны только для записи (не указано — сохранить текущее значение; пустая строка — очистить). Изменение учётных данных или split-DNS увеличивает ревизию подключения, поэтому активный туннель перезапускается с новыми значениями.
Параметры
club `string` (обязательно) uuid `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/vpn-connection/{club}/{uuid}
Пример запроса
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 '{}'
Ответ
{}
Удалить VPN-подключение ИИ-агента
Удаляет подключение из регистрации и уведомляет устройство, которое закрывает туннель и удаляет кэшированный профиль и учётные данные.
Параметры
club `string` (обязательно) uuid `string` (обязательно) connectionId `string` (обязательно)Конечная точка
DELETE /api/devices/ph-ai-agent/vpn-connection/{club}/{uuid}/{connectionId}
Пример запроса
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"
Ответ
{}
Подключить или отключить VPN-подключение ИИ-агента
Модель желаемого состояния: устанавливает флаг включения подключения в регистрации и уведомляет устройство (MQTT vpnConfigChanged без полезной нагрузки); устройство получает актуальное состояние через вызов universal-api с аутентификацией JWT и согласует свои туннели. Если уведомление не дошло, состояние выравнивается при периодической синхронизации.
Параметры
club `string` (обязательно) uuid `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/vpn-command/{club}/{uuid}
Пример запроса
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 '{}'
Ответ
{}
Получить конфигурацию и состояние облачного резервного копирования ИИ-агента
Возвращает настройки резервного копирования устройства (включено, срок хранения, регион хранилища), текущее состояние резервного копирования (последняя копия, размер, ошибки), автоматически выбранный регион и доступные регионы хранилища для списка выбора. Пароль репозитория restic никогда не возвращается.
Параметры
club `string` (обязательно) uuid `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/backup-config/{club}/{uuid}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-config/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновить конфигурацию облачного резервного копирования ИИ-агента
Сохраняет включение, срок хранения и регион. Изменения вступают в силу при следующем ежечасном резервном копировании (перед каждым запуском устройство запрашивает у PH контекст запуска), поэтому перезапуск устройства не требуется.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/backup-config/{club}
Пример запроса
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 '{}'
Ответ
{}
Список источников восстановления из резервной копии для подключения нового ИИ-агента
Представление на уровне объекта для варианта «восстановить из резервной копии» в диалоге добавления агента: все регистрации на объекте — активные И выведенные из эксплуатации или замененные, — у которых ещё есть расшифровываемый репозиторий резервных копий и хотя бы одна пригодная точка восстановления, с их последними снимками. Также возвращает списки вариантов конфигурации резервного копирования (allowedRetentionDays, availableRegions), чтобы диалогу не требовался UUID устройства для заполнения списков.
Параметры
club `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/backup-sources/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-sources/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список точек восстановления ИИ-агента
Возвращает индекс снимков устройства (сначала новые) из DynamoDB — без обращения к устройству или репозиторию — а также текущее состояние запроса ручного резервного копирования или восстановления для опроса в боковой панели. Устаревшие запросы (так и не принятые или без сигнала о ходе выполнения) отображаются как неудачные, чтобы в интерфейсе всегда можно было отправить новый.
Параметры
club `string` (обязательно) uuid `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/backup-snapshots/{club}/{uuid}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-snapshots/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Запросить ручное резервное копирование ИИ-агента сейчас
Записывает запрос на ручной запуск (с примечанием пользователя) в строку регистрации и уведомляет устройство через MQTT. Устройство получает проверенный запрос через вызов run-context universal-api с аутентификацией JWT — даже без MQTT запрос будет принят при следующем срабатывании планировщика. Отклоняется, пока выполняется другое резервное копирование или восстановление.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/backup-run/{club}
Пример запроса
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 '{}'
Ответ
{}
Закрепить или открепить точку восстановления ИИ-агента
Закреплённые точки восстановления защищены от удаления по сроку хранения — при ночном обслуживании устройство получает идентификаторы закреплённых снимков через вызов run-context и исключает их из restic forget, — а их строки индекса никогда не удаляются по TTL. Открепление возвращает обычное поведение срока хранения.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/backup-pin/{club}
Пример запроса
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 '{}'
Ответ
{}
Восстановить ИИ-агент из точки восстановления
Записывает запрос на восстановление в строку регистрации и уведомляет устройство. Полное восстановление перезаписывает /data и /home/hermeswebui (устройство сначала автоматически создаёт страховочный снимок и останавливает агента на время восстановления) и требует ввести имя устройства для подтверждения. Если передать `paths`, вместо этого выполняется восстановление только указанных путей на уровне файлов без прерывания работы. При необходимости после восстановления данных устройство закрепляется на выпуске ПО из снимка (см. backup-restore-release).
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/backup-restore/{club}
Пример запроса
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 '{}'
Ответ
{}
Применить выпуск ПО, записанный при завершённом восстановлении
Последний шаг восстановления, для которого была запрошена версия ПО из снимка: когда устройство сообщает о завершении восстановления данных, устройство закрепляется на сохранённом выпуске и обновления разблокируются (тот же механизм, что и у эндпоинта обновления). Запускается опросом из боковой панели; идемпотентен — сохранённое закрепление очищается после применения.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/backup-restore-release/{club}
Пример запроса
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 '{}'
Ответ
{}
Просмотр файлов в точке восстановления
Выводит один уровень каталога снимка restic; полностью обслуживается на стороне сервера из репозитория Wasabi (работает, даже если устройство не в сети). Читаются только метаданные дерева — для списков данные файлов не загружаются.
Параметры
club `string` (обязательно) uuid `string` (обязательно) takenAt `number` (обязательно) path `string` (необязательно)Конечная точка
GET /api/devices/ph-ai-agent/backup-files/{club}/{uuid}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-files/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Поиск по именам файлов в точке восстановления
Поиск по имени файла без учёта регистра от указанного каталога вниз, выполняется на стороне сервера по метаданным дерева restic (данные файлов не читаются; работает, даже если устройство не в сети). Список передаётся потоком и останавливается на первых 200 совпадениях.
Параметры
club `string` (обязательно) uuid `string` (обязательно) takenAt `number` (обязательно) q `string` (обязательно) path `string` (необязательно)Конечная точка
GET /api/devices/ph-ai-agent/backup-search/{club}/{uuid}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-search/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Что изменилось между двумя точками восстановления
Выполняет на стороне сервера restic diff между двумя снимками устройства (только метаданные дерева) и возвращает список добавленных, удалённых и изменённых файлов (не более 500 изменений) со сводной статистикой. Результаты кэшируются — снимки неизменяемы.
Параметры
club `string` (обязательно) uuid `string` (обязательно) fromTakenAt `number` (обязательно) toTakenAt `number` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/backup-diff/{club}/{uuid}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-diff/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
История версий одного файла во всех точках восстановления
Один запуск restic find на стороне сервера по всем снимкам в репозитории устройства, сведённый к РАЗЛИЧНЫМ версиям (последовательные совпадения с одинаковыми size+mtime объединяются) и связанный со строками индекса снимков для дат, типов и примечаний.
Параметры
club `string` (обязательно) uuid `string` (обязательно) path `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/backup-file-versions/{club}/{uuid}
Пример запроса
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"
Ответ
{}
Поиск по имени файла во всех точках восстановления резервных копий устройства
Способ восстановить удалённый файл: один запуск restic find на стороне сервера по ВСЕМ снимкам в репозитории (без учёта регистра, по подстроке или шаблону glob) с группировкой по пути и списком точек восстановления, в которых есть каждый файл. Файл, удалённый с устройства, можно найти здесь, пока он есть хотя бы в одной точке восстановления.
Параметры
club `string` (обязательно) uuid `string` (обязательно) q `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/backup-find/{club}/{uuid}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-find/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Скачать один файл из точки восстановления
Передаёт один файл потоком прямо из репозитория restic в браузер (как вложение). Каталоги передаются как архив tar. Размер ограничен; обслуживается на стороне сервера, поэтому работает, даже если устройство не в сети.
Параметры
club `string` (обязательно) uuid `string` (обязательно) takenAt `number` (обязательно) path `string` (обязательно)Конечная точка
GET /api/devices/ph-ai-agent/backup-file-download/{club}/{uuid}
Пример запроса
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"
Ответ
{}
Вывести ИИ-агент из эксплуатации на объекте
Параметры
club `string` (обязательно)Конечная точка
POST /api/devices/ph-ai-agent/decommission/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/decommission/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удалить ИИ-агент с объекта и сбросить оборудование к заводским настройкам
Полностью отвязывает устройство, чтобы его можно было подключить на ЛЮБОМ объекте, и стирает все данные на NUC. Стирание назначается через переменную устройства balena PH_FACTORY_RESET (одноразовый nonce) ДО удаления облачных ресурсов, поэтому оно сработает, даже если устройство не в сети в момент удаления, — стирание выполнится при следующем подключении. Если устройство в сети, уведомление MQTT factoryReset запускает его сразу. Затем при удалении облачных ресурсов отзываются все учётные данные и права, удаляется привязка Balena к объекту (переменные устройства + тег club) и clubID в метаданных, удаляются запросы на доступ и запись LAN DNS. Облачные резервные копии СОХРАНЯЮТСЯ: индекс снимков и пароль репозитория остаются в мягко удалённой регистрации и могут служить источником восстановления при добавлении замены. Требуется ввести имя устройства для подтверждения.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/reset/{club}
Пример запроса
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 '{}'
Ответ
{}
Заменить неисправный ИИ-агент новым NUC (аварийное восстановление)
Замена устройства за один шаг: связывает новый NUC (слот туннеля, секреты, переменные balena, начальные данные резервного копирования), переносит имя, расположение, расписание перезагрузки, настройки резервного копирования, блокировку доступа и права MCP старого устройства, переназначает индекс старых снимков на новое устройство (чтобы вся история резервных копий оставалась доступной для просмотра), выводит из эксплуатации старую регистрацию (с отметками replacedBy / replacedFrom) и — если `restore` не равно false — ставит в очередь полное восстановление выбранной точки восстановления из репозитория СТАРОГО устройства на новое оборудование. Работает, даже если старое устройство неисправно или не в сети; требуется ввести имя старого устройства для подтверждения. Только в пределах одного объекта.
Параметры
club `string` (обязательно)Тело запроса
Конечная точка
POST /api/devices/ph-ai-agent/replace/{club}
Пример запроса
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 '{}'
Ответ
{}
Преобразует короткую ссылку QR-кода устройства Performance Hub в глубокую ссылку, на которую она указывает, чтобы сканер «Добавить устройство» мог определить тип устройства. Переход выполняется только по хостам performancehub.co.
Параметры
url `string` (обязательно) Отсканированная короткая ссылкаКонечная точка
GET /api/devices/resolve-qr
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/resolve-qr \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Проверяет подключение к контроллеру Unifi объекта и правильность учётных данных.
Параметры
facilityID `string` (обязательно) Внутренний идентификатор объекта, для которого нужно проверить подключение к UnifiКонечная точка
GET /api/devices/testUnifiController/{facilityID}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/devices/testUnifiController/{facilityID} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет универсальное IoT-устройство на объекте.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, на котором нужно обновить устройство. body `string` (обязательно) JSON-объект параметров обновления.Конечная точка
PUT /api/devices/updateGenericDevice/{club}
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/devices/updateGenericDevice/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает число невыполненных соглашений, требующих действий, для пользователя и связанных с ним клубов
Конечная точка
GET /api/agreements/agreements-outstanding
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agreements/agreements-outstanding \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список всех соглашений, доступных клубу
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. contracts-sort `string` (необязательно) Сортировка соглашений по date-effective или alphabetical. По умолчанию date-effective. contracts-acknowledgement `string` (необязательно) Фильтрация соглашений по all, acknowledged или unacknowledged. По умолчанию all. contracts-requirement `string` (необязательно) Фильтрация соглашений по all, signature, checkbox, popup или none. По умолчанию all. contracts-status `string` (необязательно) Фильтрация соглашений по all, active или archived. По умолчанию all.Конечная точка
GET /api/agreements/list-agreements/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/agreements/list-agreements/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Подписывает соглашение по его ID.
Параметры
club `string` (обязательно) Внутренний ID клуба, подписывающего соглашение. agreementid `string` (обязательно) ID подписываемого соглашения. body `string` (обязательно) JSON-объект, содержащий соглашение и параметры для добавления или загрузки в систему...Конечная точка
POST /api/agreements/sign/{club}/{agreementid}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/agreements/sign/{club}/{agreementid} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Сводка Model Router объекта (конфигурация, баланс, расходы).
Параметры
clubID `string` (обязательно) tz `string` (необязательно) Часовой пояс IANA зрителя: используется для дневных и месячных периодов расходов, если у объекта нет данных о часовом поясе.Конечная точка
GET /api/clubs/{clubID}/ai-credits/overview
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/overview \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Каталог доступных моделей с состоянием включения для каждого объекта (по умолчанию все включены).
Параметры
clubID `string` (обязательно)Конечная точка
GET /api/clubs/{clubID}/ai-credits/models
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/models \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Доступные guardrails и готовые шаблоны Performance Hub.
Параметры
clubID `string` (обязательно)Конечная точка
GET /api/clubs/{clubID}/ai-credits/guardrails
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/guardrails \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Подключённые сервисы Model Router. Включают сопряжённые устройства ИИ-агентов, внешних агентов с явно указанным типом и сервис Workflow объекта. Конфигурация изменяется через PATCH /keys/{keyHash}.
Параметры
clubID `string` (обязательно) tz `string` (необязательно) Часовой пояс IANA зрителя: используется для дневных и месячных периодов расходов, если у объекта нет данных о часовом поясе.Конечная точка
GET /api/clubs/{clubID}/ai-credits/agents
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/agents \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Включение Model Router для объекта и предоставление ему доступа к инференсу.
Параметры
clubID `string` (обязательно)Конечная точка
POST /api/clubs/{clubID}/ai-credits/enable
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/enable \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновление тарифа, списка разрешённых моделей, guardrails, фильтров контента (скрытие или блокировка по регулярным выражениям на стороне Performance Hub), лимита расходов и настроек автопополнения.
Параметры
clubID `string` (обязательно)Конечная точка
PATCH /api/clubs/{clubID}/ai-credits/config
Пример запроса
curl -X PATCH https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/config \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Сброс счётчика жёсткого лимита за весь срок до 0 (новая точка отсчёта от текущих расходов) и запись закрытого периода в историю.
Параметры
clubID `string` (обязательно)Конечная точка
POST /api/clubs/{clubID}/ai-credits/spend-limit/reset-total
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/spend-limit/reset-total \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
История сбросов жёсткого лимита (сначала новые): лимит, израсходованная сумма и метки времени для каждого закрытого периода.
Параметры
clubID `string` (обязательно)Конечная точка
GET /api/clubs/{clubID}/ai-credits/spend-limit/history
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/spend-limit/history \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создание нового ключа API phk_ для объекта (открытый текст возвращается один раз). Принимает необязательные лимиты расходов, список разрешённых моделей, guardrails, фильтры контента и ограничения частоты rpmLimit/tpmLimit.
Параметры
clubID `string` (обязательно)Конечная точка
POST /api/clubs/{clubID}/ai-credits/keys
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/keys \
-H "x-api-key: YOUR_API_KEY"
Обновление изменяемых полей ключа: метка, лимиты расходов ключа, список разрешённых моделей, guardrails, фильтры контента и ограничения частоты rpmLimit/tpmLimit (синхронизируются с ключом).
Параметры
clubID `string` (обязательно) keyHash `string` (обязательно)Конечная точка
PATCH /api/clubs/{clubID}/ai-credits/keys/{keyHash}
Пример запроса
curl -X PATCH https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/keys/{keyHash} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Журналы инференса объекта по каждому запросу (в реальном времени, только метаданные).
Параметры
clubID `string` (обязательно) page `string` (необязательно) pageSize `string` (необязательно) status `string` (необязательно) model `string` (необязательно) provider `string` (необязательно) source `string` (необязательно) `key` или `agent` keyHash `string` (необязательно) Фильтр по одному ключу или агенту по его keyHash в Performance Hub. q `string` (необязательно) Полнотекстовый поиск по ID запроса, метке ключа или агента, модели, поставщику и конечному пользователю. minutes `string` (необязательно) Интервал короче суток (например, Live=1440); переопределяет startDate/endDate. startTs `string` (необязательно) Начало интервала в секундах эпохи (масштабирование по щелчку); переопределяет минуты и даты. endTs `string` (необязательно) Конец интервала в секундах эпохи (масштабирование по щелчку); переопределяет минуты и даты.Конечная точка
GET /api/clubs/{clubID}/ai-credits/logs
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/logs \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Гистограмма запросов во времени для представления Logs. Те же фильтры, что и у маршрута списка, но данные агрегируются на сервере по временным интервалам (число успешных и неудачных запросов), поэтому ответ остаётся компактным при любом объёме журналов. Размер интервала выбирается автоматически в зависимости от периода.
Параметры
clubID `string` (обязательно) status `string` (необязательно) model `string` (необязательно) provider `string` (необязательно) source `string` (необязательно) keyHash `string` (необязательно) q `string` (необязательно) minutes `string` (необязательно) startDate `string` (необязательно) endDate `string` (необязательно) startTs `string` (необязательно) endTs `string` (необязательно)Конечная точка
GET /api/clubs/{clubID}/ai-credits/logs/histogram
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/logs/histogram \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Интервалы аналитики использования и итоги по моделям за период (в реальном времени).
Параметры
clubID `string` (обязательно) range `string` (необязательно) 24h | 7 | 30 | 90 | year | all (игнорируется, если заданы startDate/endDate) startDate `string` (необязательно) endDate `string` (необязательно) groupBy `string` (необязательно) model (по умолчанию) | key | source | provider | status — измерение для интервалов и групп subgroupBy `string` (необязательно) необязательное второе измерение, вложенное в каждую группу (Explore) keyHash `string` (необязательно) фильтр детального анализа: ограничение одним ключом или агентом model `string` (необязательно) фильтр детального анализа: ограничение одной моделью provider `string` (необязательно) source `string` (необязательно) compare `string` (необязательно) укажите "prev", чтобы также вернуть groupsPrev (непосредственно предшествующий период той же длины)Конечная точка
GET /api/clubs/{clubID}/ai-credits/stats
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/stats \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Календарь ежедневной активности за последний скользящий год (около 53 недель, как в GitHub).
Параметры
clubID `string` (обязательно)Конечная точка
GET /api/clubs/{clubID}/ai-credits/activity
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/activity \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Списание с сохранённой карты для оплаты SaaS для пополнения предоплаченного баланса Model Router.
Параметры
clubID `string` (обязательно) body `object` (необязательно)Конечная точка
POST /api/clubs/{clubID}/ai-credits/topup
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/topup \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Завершение пополнения после прохождения аутентификации 3DS в апплете.
Параметры
clubID `string` (обязательно)Конечная точка
POST /api/clubs/{clubID}/ai-credits/topup/confirm
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/topup/confirm \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Сводка о сохранённой карте для оплаты SaaS, с которой будут списываться пополнения и автопополнения.
Параметры
clubID `string` (обязательно)Конечная точка
GET /api/clubs/{clubID}/ai-credits/payment-method
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/payment-method \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Транзакции в журнале операций объекта, сначала новые. Можно отфильтровать по типу (например, `types=topup,adjustment` для истории движения средств или `types=charge-reconcile` с `from`/`to` для списаний за использование за месяц).
Параметры
clubID `string` (обязательно) limit `integer` (необязательно) Максимальное число строк (по умолчанию 50, не более 200) types `string` (необязательно) Типы транзакций через запятую (topup, charge-reconcile, refund, adjustment, trueup-shortfall) from `integer` (необязательно) Только транзакции с createdAt >= from (секунды Unix) to `integer` (необязательно) Только транзакции с createdAt <= to (секунды Unix)Конечная точка
GET /api/clubs/{clubID}/ai-credits/transactions
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/transactions \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Уникальные месяцы `YYYY-MM` (UTC, сначала новые), в которых есть хотя бы одна транзакция запрошенных типов. Используются для раскрывающихся фильтров года и месяца, чтобы интерфейс предлагал только периоды, за которые действительно есть данные.
Параметры
clubID `string` (обязательно) types `string` (необязательно) Типы транзакций через запятую (topup, charge-reconcile, refund, adjustment, trueup-shortfall)Конечная точка
GET /api/clubs/{clubID}/ai-credits/transactions/available-periods
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/transactions/available-periods \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Фирменная квитанция об оплате в формате PDF для одной транзакции Model Router.
Параметры
clubID `string` (обязательно) txId `string` (обязательно)Конечная точка
GET /api/clubs/{clubID}/ai-credits/transactions/{txId}/receipt.pdf
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/transactions/{txId}/receipt.pdf \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Набор фирменных квитанций об оплате в формате PDF для выбранных транзакций пополнения в виде ZIP-архива. Каждый id должен относиться к пополнению этого объекта: у списаний за использование и корректировок администратора квитанций нет, и такие id отклоняются.
Параметры
clubID `string` (обязательно) ids `string` (обязательно) ID транзакций через запятую (не более 50)Конечная точка
GET /api/clubs/{clubID}/ai-credits/transactions/receipts.zip
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/transactions/receipts.zip \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Сводки списаний за использование по объекту по календарным месяцам (UTC), сначала новые. Текущий месяц всегда включается и помечается `isCurrentMonth` (с начала месяца до текущей даты).
Параметры
clubID `string` (обязательно) months `integer` (необязательно) Период ретроспективы в месяцах (по умолчанию 12, не более 24; игнорируется, если задан `year`) year `integer` (необязательно) Ограничение сводок одним календарным годом по UTC (например, 2026)Конечная точка
GET /api/clubs/{clubID}/ai-credits/usage-statements
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/usage-statements \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Фирменная ежемесячная выписка об использовании в формате PDF: сводка списаний за использование за месяц (промежуточные итоги по дням и общий итог). Не является счётом или квитанцией; списания за использование не являются сбором оплаты.
Параметры
clubID `string` (обязательно) month `string` (обязательно) Календарный месяц по UTC, `YYYY-MM`Конечная точка
GET /api/clubs/{clubID}/ai-credits/usage-statements/{month}/statement.pdf
Пример запроса
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"
Ответ
{}
Исходные строки списаний за использование за месяц в формате CSV (ID транзакции, метка времени UTC, сумма, баланс после операции, снимок расходов за весь срок): подробный экспорт, сверяемый с итогом выписки за месяц.
Параметры
clubID `string` (обязательно) month `string` (обязательно) Календарный месяц по UTC, `YYYY-MM`Конечная точка
GET /api/clubs/{clubID}/ai-credits/usage-statements/{month}/detail.csv
Пример запроса
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"
Ответ
{}
Сводка использования и расходов объекта (данные в реальном времени и сверенный журнал операций).
Параметры
clubID `string` (обязательно) tz `string` (необязательно) Часовой пояс IANA зрителя: используется для дневных и месячных периодов расходов, если у объекта нет данных о часовом поясе.Конечная точка
GET /api/clubs/{clubID}/ai-credits/usage
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/usage \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Привязывает устройство AI Edge Processor к клубу или обновляет привязку
Параметры
body `string` (обязательно) JSON-объект для обновления регистрации устройства AI Edge Processor.Конечная точка
POST /api/ai-edge-processor/devices
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/ai-edge-processor/devices \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Привязывает устройство AI Edge Processor к клубу. Определяет устройство в первую очередь по метаданным (приоритет у текущего сигнала активности), заполняет строку регистрации, если устройство ни разу не зарегистрировалось само, и удаляет устаревшие строки регистрации, оставшиеся после повторной подготовки оборудования.
Параметры
body `string` (обязательно) JSON-объект для обновления регистрации устройства AI Edge Processor.Конечная точка
POST /api/ai-edge-processor/devices/associate
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/ai-edge-processor/devices/associate \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список записей о загрузке bbox в клубе
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/cctv/bbox-timeline/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/bbox-timeline/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Поисковый индекс базы данных камер
Проксирует поисковый индекс camera-db общедоступной документации (производители, серии, модели, псевдонимы), который используется в диалоговом окне Find my camera при добавлении сетевых камер. Кешируется на сервере на 12 часов.
Конечная точка
GET /api/cctv/camera-db/search-index
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/camera-db/search-index \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Шаблоны производителей в базе данных камер
Проксирует шаблоны URL RTSP и значения по умолчанию одного производителя из базы данных камер общедоступной документации. Slug проверяется для предотвращения обхода путей. Кешируется на сервере на 12 часов.
Параметры
slug `string` (обязательно) Slug производителя (например, hikvision)Конечная точка
GET /api/cctv/camera-db/manufacturers/{slug}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/camera-db/manufacturers/{slug} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список данных о регистрациях посещений для объекта
Параметры
club `string` (обязательно) Внутренний ID клуба или объекта, к которому нужно получить доступ. startDate `string` (необязательно) Дата начала в формате YYYY-MM-DD endDate `string` (необязательно) Дата окончания в формате YYYY-MM-DD timezone `string` (необязательно) Часовой пояс для интерпретации дат (по умолчанию Australia/Brisbane) nextToken `string` (необязательно) Токен пагинации для получения следующей страницыКонечная точка
GET /api/cctv/check-ins/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/check-ins/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получение конфигурации клиентской части или интерфейса видеонаблюдения
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/cctv/config/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/config/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получение конфигурации доставки контента видеонаблюдения
Возвращает домен контента, который клиенты видеонаблюдения используют для получения медиаресурсов. Домен задаётся переменной среды CONTENT_DOMAIN, а при её отсутствии используется значение по умолчанию в зависимости от среды (рабочая среда обслуживает /cctv, другие среды — /cctv-stg).
Конечная точка
GET /api/cctv/content-config
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/content-config \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Изменение конфигурации клиентской части или интерфейса видеонаблюдения
Параметры
body `object` (обязательно) JSON-объект нового блока конфигурации для добавления в систему.Конечная точка
PUT /api/cctv/config/:club/:section
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/cctv/config/:club/:section \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список доступных регионов бакетов для настройки поставщика хранилища видеонаблюдения
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/cctv/bucket-region/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/bucket-region/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Сброс коллекции неопознанных лиц
Сбрасывает коллекцию неопознанных лиц CompreFace объекта, удаляя все субъекты. Записи о людях в DynamoDB, обнаружения лиц и блоки хронологии OpenSearch НЕ затрагиваются. Очищаются только исходные данные распознавания лиц. Новые теневые профили будут создаваться автоматически по мере обработки системой новых обнаружений с камер.
Параметры
facilityId `string` (обязательно)Конечная точка
DELETE /api/cctv/config/{facilityId}/unidentified-collection
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/config/{facilityId}/unidentified-collection \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получение сведений о коллекции неопознанных лиц
Возвращает текущее число субъектов в коллекции неопознанных лиц CompreFace объекта.
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/cctv/config/{facilityId}/unidentified-collection-info
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/config/{facilityId}/unidentified-collection-info \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Добавляет сетевую камеру (OEM- или IP-камеру) по URL потока (RTSP, HTTP, HTTPS)
Параметры
body `string` (обязательно) JSON-объект для добавления сетевой камеры.Конечная точка
POST /api/cctv/devices/add-network-camera
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/add-network-camera \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Массовое добавление сетевых камер на Edge Processor
Регистрирует несколько сетевых камер RTSP/HTTP на одном Edge Processor, затем один раз отправляет FEED_CONFIG, чтобы устройство перезагрузило конфигурацию только один раз.
Параметры
body `object` (обязательно)Конечная точка
POST /api/cctv/devices/add-network-cameras
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/add-network-cameras \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Привязывает устройство к клубу или обновляет привязку
Параметры
body `string` (обязательно) JSON-объект для обновления регистрации устройства видеонаблюдения.Конечная точка
POST /api/cctv/devices
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Привязывает устройство к клубу
Параметры
body `string` (обязательно) JSON-объект для обновления регистрации устройства видеонаблюдения.Конечная точка
POST /api/cctv/devices/associate
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/associate \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Отправляет запрос MQTT на устройство с указанным UUID и ожидает ответ (через websocket) со списком доступных возможностей камеры.
Параметры
club `string` (обязательно) Внутренний ID клуба, которому принадлежит запрашиваемое устройство. body `string` (обязательно) JSON-объект параметров обновления.Конечная точка
POST /api/cctv/devices/list-camera-capabilities/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/list-camera-capabilities/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список регистраций устройств
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/cctv/devices/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/devices/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удаляет сетевую камеру, помечая её как удалённую и исключая её из FEED_CONFIG Edge Processor
Параметры
club `string` (обязательно) Внутренний ID клуба, которому принадлежит устройство. balenaUUID `string` (обязательно) UUID удаляемой сетевой камеры.Конечная точка
DELETE /api/cctv/devices/remove-network-camera/{club}/{balenaUUID}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/devices/remove-network-camera/{club}/{balenaUUID} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Сохраняет все настроенные возможности камеры и применяет их к устройству в виде переменной среды (через balena)
Параметры
club `string` (обязательно) Внутренний ID клуба, которому принадлежит запрашиваемое устройство. body `string` (обязательно) JSON-объект параметров обновления.Конечная точка
POST /api/cctv/devices/save-camera-capabilities/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/save-camera-capabilities/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Сохраняет маску движения камеры (если настроена) и применяет её к устройству в виде переменной среды (через balena)
Параметры
club `string` (обязательно) Внутренний ID клуба, которому принадлежит запрашиваемое устройство. body `string` (обязательно) JSON-объект маски камеры.Конечная точка
POST /api/cctv/devices/save-camera-mask/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/save-camera-mask/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Отправляет на физическое устройство определённую команду v4l2 (например, яркость или контрастность)
Параметры
club `string` (обязательно) Внутренний ID клуба, которому принадлежит запрашиваемое устройство. body `string` (обязательно) JSON-объект параметров обновления.Конечная точка
POST /api/cctv/devices/set-camera-capability/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/set-camera-capability/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Проверка URL потока сетевой камеры
Отправляет на Edge Processor тестовую команду для проверки URL потока камеры с помощью ffprobe
Тело запроса
Конечная точка
POST /api/cctv/devices/test-stream
Пример запроса
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 '{}'
Ответ
{}
Безвозвратно удаляет одну запись об обнаружении лица из базы данных. Используется для удаления несовпадающих или неверных записей треков из журнала активности человека.
Параметры
club `string` (обязательно) fdID `string` (обязательно)Конечная точка
DELETE /api/cctv/face-detections/:club/:fdID
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/face-detections/:club/:fdID \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список данных об обнаружениях лица человека
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. personID `string` (обязательно) ID человека в системе идентификации лицКонечная точка
GET /api/cctv/face-detections/:club/:personID
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/face-detections/:club/:personID \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает обнаружения лиц, ссылающиеся на указанное обрезанное изображение человека; запрос выполняется через GSI personCropImage.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. personCropImage `string` (обязательно) URL обрезанного изображения человека, сохранённый в записи об обнаружении лица. limit `string` (необязательно) Максимальное число возвращаемых обнаружений. nextToken `string` (необязательно) Токен пагинации из предыдущего ответа.Конечная точка
GET /api/cctv/face-detections-by-person-crop-image/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/face-detections-by-person-crop-image/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список данных об обнаружениях лиц в клубе, сгруппированных по периоду относительно текущего времени
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/cctv/face-detections/:club/timeline
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/face-detections/:club/timeline \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список данных об обнаружениях лиц в клубе
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/cctv/face-detections/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/face-detections/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Поиск блоков хронологии обнаружений лиц на объекте с помощью OpenSearch
Параметры
facilityId `string` (обязательно) Внутренний ID объекта для поиска timezone `string` (обязательно) Часовой пояс IANA для преобразования дат (например, Pacific/Auckland) startDate `string` (необязательно) Фильтр по дате начала (YYYY-MM-DD), преобразуется в startUnix с учётом часового пояса endDate `string` (необязательно) Фильтр по дате окончания (YYYY-MM-DD), преобразуется в endUnix с учётом часового пояса personId `string` (необязательно) Фильтр по ID определённого человека query `string` (необязательно) Полнотекстовый поиск (например, по имени человека) limit `string` (необязательно) Результатов на странице (по умолчанию 20, не более 100) filters `string` (необязательно) Объект фильтров в формате JSON (например, {"matchType":"identified"}) sortBy `string` (необязательно) Поле для сортировки (startUnix, endUnix, created). По умолчанию endUnix. page `string` (необязательно) Номер страницы для пагинации (по умолчанию 1) sortOrder `string` (необязательно) Направление сортировки (asc или desc). По умолчанию desc.Конечная точка
GET /api/cctv/search/face-detections/timeline-blocks/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/search/face-detections/timeline-blocks/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список отчётов об объекте клуба
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/cctv/facility/:club/reports
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/facility/:club/reports \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Запуск генерации тепловой карты по требованию. Вызывает ту же логику Starter, что и задание cron по расписанию, но позволяет указать определённый объект, дату и время, а также набор периодов. При вызове без тела работает так же, как cron: проверяет все подходящие объекты и ставит в очередь каждое устройство.
Тело запроса
Конечная точка
POST /api/cctv/heatmaps/generate
Пример запроса
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 '{}'
Ответ
{}
Определение расположения составной PNG-тепловой карты за скользящий период для одного устройства. Возвращает только метаданные JSON: байты PNG хранятся в домене контента, а клиентская часть формирует URL так: `${contentDomain}/cctv/${storageService}/${region}/${filePath}?s=${token}` Порядок определения: 1. Найдено в индексе DynamoDB `composed#…` → немедленный возврат (~10 мс). 2. HEAD в Wasabi по детерминированному ключу кеша. Если найдено, записывается строка индекса для дозаполнения, и выполняется возврат. 3. Резерв из устаревших данных: существует любая составная запись для этого кортежа (устройство, диапазон, час), даже за другую дату. Возвращается сразу с `cache: 'HIT-STALE'`, чтобы клиентская часть могла хоть *что-то* отобразить. Новое составление запускается асинхронно. 4. Холодный путь: записи нет совсем. Lambda составления ставится в очередь через `InvocationType: 'Event'`, а конечная точка возвращает `202 { cache: 'PENDING' }`. Клиентская часть опрашивает, пока не появится запись (обычно 3–5 секунд). Обработка текущего дня: если `endDate` — местное «сегодня» объекта, конечная точка вместо этого отдаёт PNG за вчера: срезы за сегодня еще записываются заданием cron Starter, и новое составление было бы неполным. В ответе повторяется запрошенный `endDate` и добавляется `endDateUsed` (= вчера). Перечисление `cache`: - `HIT` — отдано из индекса DDB за запрошенную дату. - `HIT-FALLBACK` — запрошено сегодня; отдана строка индекса за вчера. - `HIT-BACKFILL` — нет в DDB, но PNG был в Wasabi; строка только что записана. - `HIT-FALLBACK-BACKFILL` — дозаполнение при резервном использовании данных за вчера. - `HIT-STALE` — нет записи за запрошенную дату, но есть запись за другую дату для этого кортежа; отдана сразу, а новое составление поставлено в очередь в фоновом режиме. - `PENDING` — записи нет совсем; составление поставлено в очередь. Клиентской части следует выполнять опрос. Ответ — `202 Accepted`, без `filePath`.
Параметры
facilityId `string` (обязательно) deviceUUID `string` (обязательно) Устройство, для которого выполняется составление. Составление выполняется отдельно для каждого устройства. hour `integer` (обязательно) Час суток (0–23), по которому выполняется составление за период ретроспективы. endDate `string` (необязательно) Последняя дата периода (YYYY-MM-DD). По умолчанию сегодня (по часовому поясу объекта). range `string` (необязательно) Период ретроспективы. Должен быть одним из разрешённых диапазонов. nocache `integer` (необязательно) Укажите `1`, чтобы обойти уровни кеша DDB и HEAD и принудительно выполнить новое составление.Конечная точка
GET /api/cctv/heatmaps/hourly/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/heatmaps/hourly/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Определение часов суток, для которых есть записи срезов `1h` для устройства за скользящий период ретроспективы. Клиентская часть использует это, чтобы заполнить список выбора часа рядом со списками выбора даты и диапазона, прежде чем вызвать конечную точку составления (`/api/cctv/heatmaps/hourly/...`). Пример: `GET /api/cctv/heatmaps/query-hourly/Birkdale?deviceUUID=abc123&endDate=2026-04-16&range=30d` Внутренняя реализация: один запрос диапазона DynamoDB к `cctvheatmaps` (`sk BETWEEN 1h#{start}-00 AND 1h#{end}-23`) с группировкой по часам. Возвращает по одной записи на каждый час, в котором есть хотя бы один срез, включая репрезентативный опорный JPEG (из самого последнего дня периода; опорное изображение общее для устройства на каждый день).
Параметры
facilityId `string` (обязательно) deviceUUID `string` (обязательно) Запрашиваемое устройство. Почасовые срезы хранятся отдельно для каждого устройства. endDate `string` (необязательно) Последняя дата периода (YYYY-MM-DD). По умолчанию сегодня (по часовому поясу объекта). range `string` (необязательно) Период ретроспективы. Должен быть одним из разрешённых диапазонов.Конечная точка
GET /api/cctv/heatmaps/query-hourly/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/heatmaps/query-hourly/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Запрос заранее сгенерированных записей тепловых карт для объекта. **Все записи для типа периода:** - `/api/cctv/heatmaps/Birkdale?periodType=1y` - `/api/cctv/heatmaps/Birkdale?deviceUUID=abc123&periodType=1d` **Диапазон дат — один тип периода:** - `/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` **Диапазон дат — все применимые типы периодов (не указывайте periodType):** - `/api/cctv/heatmaps/Birkdale?from=2026-03-01&to=2026-03-31` Возвращает годовые, полугодовые, квартальные и другие записи вплоть до 6h, которые пересекаются с заданным диапазоном. **Момент времени — все 9 типов периодов для одного устройства:** - `/api/cctv/heatmaps/Birkdale?deviceUUID=abc123&date=2026-03-15T14:30` Возвращает до 9 записей (1y, 6m, 3m, 2m, 1m, 1w, 1d, 12h, 6h).
Параметры
facilityId `string` (обязательно) Идентификатор объекта. deviceUUID `string` (необязательно) Запрос к определённому устройству. Если не указано, запрос выполняется по всем устройствам (GSI). periodType `string` (необязательно) Фильтр по одному типу периода. Если не указан при заданных from/to, запрашиваются все типы. from `string` (необязательно) Дата начала (yyyy-mm-dd). Используется вместе с `to`. to `string` (необязательно) Дата окончания (yyyy-mm-dd). Используется вместе с `from`. date `string` (необязательно) Поиск на момент времени (yyyy-mm-dd или yyyy-mm-ddTHH:mm). Требуется deviceUUID. Возвращает по одной записи на каждый тип периода.Конечная точка
GET /api/cctv/heatmaps/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/heatmaps/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получение миниатюры прямой трансляции устройства
Параметры
club `string` (обязательно) Внутренний ID клуба. deviceId `string` (обязательно) Внутренний ID устройства видеонаблюдения.Конечная точка
GET /api/cctv/livestream/:club/thumbnail/:deviceId
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/livestream/:club/thumbnail/:deviceId \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Уведомление системы видеонаблюдения о том, что вы собираетесь смотреть прямую трансляцию
Параметры
club `string` (обязательно) Внутренний ID клуба. deviceId `string` (обязательно) Внутренний ID устройства видеонаблюдения.Конечная точка
POST /api/cctv/livestream/:club/iswatching/:deviceId
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/livestream/:club/iswatching/:deviceId \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Подтверждение совпадения пересечения
Устанавливает статус совпадения confirmed и записывает проверяющего.
Параметры
club `string` (обязательно) matchId `string` (обязательно)Конечная точка
POST /api/cctv/matching/{club}/detail/{matchId}/approve
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId}/approve \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получение одного совпадения пересечения со сведениями о посещениях
Возвращает запись о совпадении и разбивку времени по каждому посещению.
Параметры
club `string` (обязательно) matchId `string` (обязательно)Конечная точка
GET /api/cctv/matching/{club}/detail/{matchId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Ручная привязка несопоставленного человека к участнику
Связывает personId видеонаблюдения с определённым участником и устанавливает для совпадения статус confirmed.
Параметры
club `string` (обязательно) matchId `string` (обязательно)Тело запроса
Конечная точка
POST /api/cctv/matching/{club}/detail/{matchId}/link
Пример запроса
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 '{}'
Ответ
{}
Список совпадений пересечений для объекта
Возвращает постраничный список совпадений, отфильтрованных по статусу.
Параметры
club `string` (обязательно) status `string` (необязательно) limit `integer` (необязательно) nextToken `string` (необязательно)Конечная точка
GET /api/cctv/matching/{club}/list
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/matching/{club}/list \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Отклонение совпадения пересечения
Устанавливает статус совпадения rejected и записывает проверяющего.
Параметры
club `string` (обязательно) matchId `string` (обязательно)Конечная точка
POST /api/cctv/matching/{club}/detail/{matchId}/reject
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId}/reject \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получение сводных показателей сопоставления пересечений
Возвращает число совпадений по объекту, сгруппированное по статусу.
Параметры
club `string` (обязательно) ID объектаКонечная точка
GET /api/cctv/matching/{club}/summary
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/matching/{club}/summary \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Отмена привязки автоматически изученного совпадения профиля
Возвращает привязанное совпадение в статус rejected и очищает autoLearnedFrom в записи участника.
Параметры
club `string` (обязательно) matchId `string` (обязательно)Тело запроса
Конечная точка
POST /api/cctv/matching/{club}/detail/{matchId}/unlink
Пример запроса
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 '{}'
Ответ
{}
Чтение статуса выполняющейся операции "upsert identified person" (охватывает создание и изменение). Строка читается напрямую из таблицы `people-ops`, принадлежащей cctv-rekognition-api, без вызова Lambda. Используется клиентской частью видеонаблюдения для опроса хода выполнения после POST /api/cctv/people/{facility}/identified. Путь находится на одном уровне с `/cctv/people/...` (а не вложен в него), чтобы маршрутизатор express не мог ошибочно сопоставить `operationId` с `:personID` в `/cctv/people/:club/:personID`. См. порядок шаблонов в createAPIRouter. Возвращает заполнитель `pending`, пока Lambda upsertIdentifiedPerson ещё не записала первую запись этапа (период холодного запуска). Обработчик опроса в клиентской части обрабатывает заполнитель и pending одинаково, поэтому контракт для вызывающих остаётся стабильным.
Параметры
operationId `string` (обязательно)Конечная точка
GET /api/cctv/people-operations/{operationId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/people-operations/{operationId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Добавляет изображение лица (из существующего обнаружения в треке) в субъект распознавания CompreFace этого человека и сохраняет ссылку в таблице теневых фотографий. НЕ загружает изображение в Wasabi: оно уже хранится там как снимок обнаружения лица.
Параметры
club `string` (обязательно) personID `string` (обязательно) body `string` (обязательно)Конечная точка
POST /api/cctv/people/:club/:personID/add-face
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/:club/:personID/add-face \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Добавление теневых фотографий в запись о человеке
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. personID `string` (обязательно) ID записи о человеке body `string` (обязательно) JSON-объект нового блока конфигурации для добавления в систему.Конечная точка
POST /api/cctv/people/:club/shadow-photos/:personID
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/:club/shadow-photos/:personID \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Запрос теневых фотографий человека
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. personID `string` (обязательно) ID записи о человекеКонечная точка
GET /api/cctv/people/:club/shadow-photos/:personID
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/:club/shadow-photos/:personID \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Безвозвратно удаляет запись теневой фотографии из CCTVShadowPhotosTable и удаляет соответствующее лицо из CompreFace (если сохранён faceId).
Параметры
club `string` (обязательно) personID `string` (обязательно) id `string` (обязательно) ID записи теневой фотографии (первичный ключ)Конечная точка
DELETE /api/cctv/people/:club/shadow-photos/:personID/:id
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/people/:club/shadow-photos/:personID/:id \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удаляет ссылки и связанные записи rekognition по personID
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. personID `string` (обязательно) Уникальный ID человека в системе видеонаблюдения.Конечная точка
DELETE /api/cctv/people/:club/:personID
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/people/:club/:personID \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает запись о человеке в клубе
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. personID `string` (обязательно) ID человека в базе данных.Конечная точка
GET /api/cctv/people/:club/:personID
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/:club/:personID \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получение зон доступа, соответствующих профилю членства человека
Определяет тип участника, теги и планы членства человека, затем возвращает реальные зоны доступа (origin=membership-plan, не поглощённые), сопоставленные по правилам включения и исключения. accessRestriction каждой зоны сокращается до правил, которым соответствует человек. Камеры дочерних зон объединяются с родительскими зонами.
Параметры
club `string` (обязательно) Внутренний ID объекта personID `string` (обязательно) ID человека из таблицы людей видеонаблюденияКонечная точка
GET /api/cctv/people/{club}/{personID}/allowed-zones
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/{club}/{personID}/allowed-zones \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает текущий статус задания объединения, включая результаты по каждому источнику. Опрашивайте эту конечную точку каждые 3–5 секунд, пока статус равен IN_PROGRESS.
Параметры
club `string` (обязательно) mergeJobID `string` (обязательно)Конечная точка
GET /api/cctv/people/:club/merge-status/:mergeJobID
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/:club/merge-status/:mergeJobID \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Запускает фоновое объединение нескольких профилей неопознанных людей в один сохраняемый профиль. Сразу отвечает 202 с mergeJobID. Ход выполнения отслеживайте через /merge-status/:mergeJobID.
Параметры
club `string` (обязательно) body `string` (обязательно)Конечная точка
POST /api/cctv/people/:club/merge-unidentified
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/:club/merge-unidentified \
-H "x-api-key: YOUR_API_KEY"
Добавление лица в коллекцию чёрного списка объекта
Параметры
facilityId `string` (обязательно) Внутренний ID объектаТело запроса
Конечная точка
POST /api/cctv/people/{facilityId}/blacklist
Пример запроса
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 '{}'
Ответ
{}
Создание или обновление опознанного человека на объекте: создаёт новую запись или обновляет существующую. Проксирует запрос в Lambda upsertIdentifiedPerson, которая записывает данные о человеке, загружает переданную фотографию в Wasabi и повторно индексирует лицо в CompreFace. Если `isNewRecord` равно true (по умолчанию), Lambda выполняет ветвь создания (cctvPeople.save), а `personID` генерируется, если не указан. Если `isNewRecord` равно false, Lambda выполняет ветвь обновления (cctvPeople.update): `personID` обязателен и должен указывать на существующую запись.
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
POST /api/cctv/people/{facilityId}/identified
Пример запроса
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 '{}'
Обновление набора необязательных полей партнёра, синхронизируемых в таблицу людей видеонаблюдения для объекта.
Параметры
facilityId `string` (обязательно) Внутренний ID объектаТело запроса
Конечная точка
PUT /api/cctv/people/{facilityId}/sync-fields
Пример запроса
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 '{}'
Ответ
{}
Возвращает список данных о людях в клубе
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/cctv/people/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Поиск людей на объекте по изображению лица. Вызывает Lambda imageFaceSearch из cctv-rekognition-api с загруженным изображением base64 и ID объекта из пути. Возвращает ранжированные совпадения и сводку атрибутов DeepFace.
Параметры
club `string` (обязательно) ID объекта или клуба body `string` (обязательно)Конечная точка
POST /api/cctv/people/{club}/search-by-face
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/{club}/search-by-face \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Поиск людей на объекте с помощью OpenSearch
Параметры
facilityId `string` (обязательно) Внутренний ID объекта для поиска query `string` (необязательно) Поисковый запрос (например, имя) page `string` (необязательно) Номер страницы (по умолчанию 1) limit `string` (необязательно) Результатов на странице (по умолчанию 20, не более 100) filters `string` (необязательно) Объект фильтров в формате JSON (например, {"membershipStatus":"active"}) sortBy `string` (необязательно) Поле для сортировки (created, lastName, firstName, membershipUpdatedOn). По умолчанию created. sortOrder `string` (необязательно) Направление сортировки (asc или desc). По умолчанию desc.Конечная точка
GET /api/cctv/search/people/:facilityId
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/search/people/:facilityId \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет элементы обнаружения лиц, присваивая новый personID, и связывает записи rekognition
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. body `string` (обязательно) JSON-объект нового блока конфигурации для добавления в систему.Конечная точка
POST /api/cctv/people/:club/validate
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/:club/validate \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает объект со всеми доступными фильтрами для данных записей видеонаблюдения клуба
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/cctv/recordings/filters/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/recordings/filters/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Потоковое воспроизведение записи.
Конечная точка
GET /api/cctv/recordings/:club/:dir/:filename
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/recordings/:club/:dir/:filename \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновление сведений о записи.
Конечная точка
PUT /api/cctv/recordings/:club/:dir/:filename
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/cctv/recordings/:club/:dir/:filename \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает сводку данных записей видеонаблюдения клуба
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/cctv/recordings/:club/summary
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/recordings/:club/summary \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список данных записей видеонаблюдения клуба за период относительно текущего времени
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/cctv/recordings/:club/timeline
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/recordings/:club/timeline \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список данных записей видеонаблюдения клуба
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/cctv/recordings/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/recordings/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Записи автоматически удаляются по истечении заданного периода; используйте эту функцию, чтобы сохранить записи
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
POST /api/cctv/recordings/:club/:action
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/recordings/:club/:action \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Поиск снимков отчётов объекта за диапазон дат
Параметры
facilityId `string` (обязательно) Внутренний ID объекта startDate `string` (обязательно) Фильтр по дате начала (YYYY-MM-DD) endDate `string` (обязательно) Фильтр по дате окончания (YYYY-MM-DD) deviceIds `string` (необязательно) Список ID камер или устройств через запятую для фильтрации view `string` (необязательно) Альтернативное представление отчёта для расчёта (передаётся в Lambda отчётов)Конечная точка
GET /api/cctv/reports/search-report-snapshots/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/reports/search-report-snapshots/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Векторный поиск по проиндексированным медиаданным видеонаблюдения объекта. Отвечает потоком text/event-stream, ретранслируемым из Lambda searchAnything, чтобы клиент мог отображать ход выполнения, пока холодный контейнер загружает кодировщик. События: сначала `status`, затем `result` или `error`. Есть три способа выполнить запрос, два из них — этим методом. Передайте `query` для поиска по произвольному тексту. Передайте `seedIndex` + `seedKey` для поиска по образцу («больше похожих») с использованием вектора строки, уже имеющейся в индексе: так можно найти больше результатов, похожих на тот, который просматривает пользователь. Чтобы выполнить поиск по изображению пользователя, отправьте байты на этот же путь методом `POST`. Передайте слова вместе с изображением, чтобы сузить одно другим: **текст фильтрует, изображение ранжирует**. Кандидаты берутся из образца, слова определяют, какие из них останутся, а визуальное сходство определяет порядок, поэтому результаты по-прежнему похожи на изображение, а слова отсеивают неподходящие. Эти два сигнала никогда не объединяются в один вектор, поэтому для комбинированного поиска `queryKind` остаётся `similar`; о том, что применён текстовый фильтр, говорит наличие `query` в результате. Комбинированный поиск довольно часто ничего не возвращает; рассматривайте это как отдельный результат: `perIndex.
Параметры
facilityId `string` (обязательно) Внутренний ID объекта для поиска query `string` (необязательно) Описание искомого в свободной форме. Обязательно, если не передан warm=1 или образец. Вместе с образцом оно перестаёт быть объектом ранжирования и становится фильтром для кандидатов образца, отбрасывая тех, чья текстовая оценка ниже порога релевантности индекса. seedIndex `string` (необязательно) Поиск по образцу вместо текста: индекс, в котором находится строка образца (person-crops, recording-frames, timelapse-frames). Это `index` совпадения, по которому щёлкнул пользователь. Передаётся вместе с seedKey. seedKey `string` (необязательно) `key` строки образца, взятый из совпадения без изменений. Образец исключается из собственных результатов; для записи это означает весь клип, так как его остальные кадры следуют с интервалом 2 с и почти идентичны. seedFrameId `string` (необязательно) Обязательно, если seedIndex равен recording-frames: этот индекс хранит по одной строке на каждый выбранный кадр, и все они имеют общий ключ клипа, поэтому один ключ указывает на клип, а не на момент. Передайте `frameId` совпадения. У старых строк его нет; вместо этого передайте seedOffsetMs. seedOffsetMs `string` (необязательно) Резервный идентификатор кадра для образцов recording-frames, строки которых созданы до появления `frame_id`. Передайте `offsetMs` совпадения. Игнорируется, если передан seedFrameId. warm `string` (необязательно) Подготовка контейнера Lambda без выполнения поиска. Вызывайте при загрузке страницы. warmTarget `string` (необязательно) Какой кодировщик загружает `warm`: `text` (по умолчанию), `image` или `both`. Визуальная часть модели занимает 355 МБ против 283 МБ у текстовой, поэтому её подготовка включается явно: запрашивайте `image`, только когда пользователь действительно подготовил изображение, а не при загрузке страницы. index `string` (необязательно) Наборы данных для поиска через запятую: person-crops, recording-frames, timelapse-frames. Результаты объединяются в один список, отсортированный по оценке. По умолчанию поиск выполняется по всем трём; чтобы сузить его, передайте явный список. timelapse-frames охватывает камеры, которые ничего не записывают и создают лишь один кадр в минуту; порог релевантности для него ещё не откалиброван. model `string` (необязательно) Кодировщик для запроса. Должен совпадать с кодировщиком, которым проиндексирован набор данных. limit `string` (необязательно) Число возвращаемых результатов на индекс (по умолчанию 50, не более 100); это не общее число, поэтому поиск по всем трём индексам может вернуть до трёх раз больше. Для записей учитываются клипы, а не совпавшие кадры. from `string` (необязательно) Сопоставлять только медиаданные, снятые в это время или позже, в миллисекундах с начала эпохи. Обратите внимание: это время съёмки, а не загрузки. to `string` (необязательно) Сопоставлять только медиаданные, снятые до этого времени (не включительно), в миллисекундах с начала эпохи. cameraId `string` (необязательно) balenaUUID камер через запятую для сужения поиска: поле `balenaUUID` каждой записи, возвращаемой /api/cctv/recordings/filters/:club. Предпочтительный фильтр по камере: все индексы хранят одно и то же значение, поэтому один фильтр сужает их все. Обратите внимание, что это значение есть только у фрагментов, для которых удалось связать обнаружение лица (сейчас ~1%), поэтому сужение фрагментов по камере вернёт мало результатов или ни одного, пока не будет выполнено дозаполнение фрагментов; записи заполнены полностью и фильтруются точно. camera `string` (необязательно) Названия камер через запятую для сужения поиска. Фактически работает только для записей: person-crops хранит пустое название камеры в каждой строке, поэтому любое значение здесь исключает все фрагменты. Предпочтительнее cameraId. cameraGroup `string` (необязательно) Группы камер через запятую для сужения поиска. Заполнены для всех записей, но только для ~1% фрагментов по той же причине, что и cameraId. minScore `string` (необязательно) Переопределение порога косинусного сходства для каждого индекса, отсекающего шум. Не указывайте в рабочей среде: у каждого индекса есть откалиброванное значение по умолчанию (и отдельное, неоткалиброванное, для поиска по образцу). Передайте 0, чтобы при отладке релевантности увидеть ближайших соседей без фильтрации.Конечная точка
GET /api/cctv/search/anything/:facilityId
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/search/anything/:facilityId \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Поиск по изображению пользователя, а не по словам или по результату, уже отображаемому на экране. Во всём остальном идентичен GET (те же параметры запроса, тот же поток событий, та же структура результата), поэтому здесь описаны только отличия. Передайте **исходные байты файла** в теле запроса с Content-Type `image/*`. Не изменяйте размер, не обрезайте и не перекодируйте изображение в браузере заранее: сервер воспроизводит очень специфическое масштабирование (сжатие до 256x256 билинейным ядром со сглаживанием), с которым были построены проиндексированные векторы, а масштабирование canvas использует другое. По измерениям такая замена даёт отклонение примерно на 0,93 по косинусному сходству от правильного ответа, что больше, чем между двумя действительно разными изображениями, поэтому результаты возвращаются ранжированными правдоподобно, но неверно, и без ошибки. Ограничение 4 МБ связано с транспортом, а не с качеством: байты передаются в полезной нагрузке вызова Lambda, которая ограничена 6 МБ, а base64 увеличивает их объём на треть. Результаты оцениваются по сходству изображений, поэтому `queryKind` равен `image`, а оценки находятся на той же значительно более высокой шкале, что и при поиске по образцу, и никогда не сравнимы с текстовыми оценками. Они будут немного *ниже*, чем при эквивалентном поиске по образцу: вектор образца записан самим устройством, а загруженное изображение перекодируется здесь другим движком, из-за чего вектор смещается на несколько сотых от того, что получило бы устройство. По измерениям качество результатов при этом одинаковое; просто наборы не идентичны. Добавление `query` фильтрует результаты по этим словам точно так же, как для образца. Отправка образца *и* изображения отклоняется: оба являются объектом ранжирования, поэтому такая пара не имеет смысла. Это самый ресурсоёмкий запрос, который обслуживает конечная точка. Загруженное изображение загружает визуальную часть модели, а добавление слов загружает и текстовую, причём обе в холодном контейнере. Вызов `warm=1&warmTarget=image`, как только пользователь подготовит изображение, убирает это с критического пути.
Параметры
facilityId `string` (обязательно) Внутренний ID объекта для поиска body `string` (обязательно) Исходные байты изображения без изменений, не более 4 МБ query `string` (необязательно) Необязательные слова для сужения результатов поиска по изображению: отбрасываются совпадения, текстовая оценка которых ниже порога релевантности индекса.Конечная точка
POST /api/cctv/search/anything/:facilityId
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/search/anything/:facilityId \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает сведения о хранилище и другие метрики видеонаблюдения клуба
Конечная точка
GET /api/cctv/storage-details/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/storage-details/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список записей о загрузке таймлапсов клуба
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/cctv/timelapse/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/timelapse/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список действий пользователей с записями в клиентской части или интерфейсе видеонаблюдения
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/cctv/ui/actions/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/ui/actions/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Запись действия пользователя с записями в клиентской части или интерфейсе видеонаблюдения
Параметры
body `string` (обязательно) JSON-объект нового блока конфигурации для добавления в систему.Конечная точка
POST /api/cctv/ui/actions/:club
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/ui/actions/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получение токена пользователя для клиентской части или интерфейса видеонаблюдения
Параметры
club `string` (обязательно) ID клубаКонечная точка
GET /api/cctv/ui/token/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/ui/token/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создание токена для временного или гостевого доступа
Параметры
club `string` (обязательно) Уникальный идентификатор клуба. body `string` (обязательно) JSON-объект с данными выдаваемого токена.Конечная точка
POST /api/cctv/token/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/cctv/token/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{
"accessID": "00000000-0000-0000-0000-000000000014"
}
Возвращает список записей о токенах для временного или гостевого доступа
Параметры
club `string` (обязательно) Уникальный идентификатор клуба.Конечная точка
GET /api/cctv/token/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/cctv/token/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить токен доступа по идентификатору доступа
Параметры
accessID `string` (обязательно) Идентификатор записи токена в базе данных.Конечная точка
POST /guest/cctv/token/:accessID
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/guest/cctv/token/:accessID \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удаление часов доступа объекта
Параметры
facilityId `string` (обязательно) body `object` (обязательно) JSON-объект новых часов доступа.Конечная точка
DELETE /api/ai/computer-vision/access-hours/:facilityId
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/ai/computer-vision/access-hours/:facilityId \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список часов доступа объекта
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/ai/computer-vision/access-hours/:facilityId
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/ai/computer-vision/access-hours/:facilityId \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет или создаёт часы доступа объекта
Параметры
facilityId `string` (обязательно) body `object` (обязательно) JSON-объект новых часов доступа.Конечная точка
POST /api/ai/computer-vision/access-hours/:facilityId
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/ai/computer-vision/access-hours/:facilityId \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удаление зоны доступа объекта
Параметры
facilityId `string` (обязательно) body `object` (обязательно) JSON-объект новой зоны доступа.Конечная точка
DELETE /api/ai/computer-vision/access-zones/:facilityId
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/ai/computer-vision/access-zones/:facilityId \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список зон доступа объекта
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/ai/computer-vision/access-zones/:facilityId
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/ai/computer-vision/access-zones/:facilityId \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет или создаёт зону доступа объекта
Параметры
facilityId `string` (обязательно) body `object` (обязательно) JSON-объект новой зоны доступа.Конечная точка
POST /api/ai/computer-vision/access-zones/:facilityId
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/ai/computer-vision/access-zones/:facilityId \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает объединение всех идентификаторов административных модулей по брендам и объектам организации в виде объектов модулей.
Параметры
organisationId `string` (обязательно) Идентификатор организацииКонечная точка
GET /api/organisations/{organisationId}/admin-modules
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/organisations/{organisationId}/admin-modules \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список всех организаций
Параметры
includeBrands `string` (необязательно) Включить бренды, связанные с организацией includeFacilities `string` (необязательно) Включить объекты, связанные с организацией includeRegions `string` (необязательно) Включить регионы, связанные с организациейКонечная точка
GET /api/organisations
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/organisations \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Простой ИИ-помощник, который анализирует содержимое заявки в поддержку и формирует предложения на основе доступных тем, а также рекомендуемых тем для поиска Algolia...
Параметры
messageBody `string` (обязательно) Текст отправляемого сообщения topicData `string` (обязательно) JSON-объект или массив topicData, возвращённый osTicket (системой заявок и поддержки) facilityId `string` (необязательно) Внутренний ID клуба, необходимый для определения нужного индекса Algolia для поиска.Конечная точка
PUT /api/ai/helpers/analyse-support-ticket
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/ai/helpers/analyse-support-ticket \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Простой API для генерации изображений
Параметры
type `string` (обязательно) Тип генерируемого изображения name `string` (обязательно) Имя изображения maxSize `string` (необязательно) Необязательный максимальный размер ответа, например 200KB, 1MB или просто число байтов. Изображение уменьшается или сжимается до нужного размера.Конечная точка
PUT /api/ai/images/:type/:name
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/ai/images/:type/:name \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Простой запрос к LLM
Облегчённая конечная точка для простых запросов к LLM без сохранения состояния. Использует недорогую модель без рассуждений (gpt-4o-mini) со строгими ограничениями на число токенов. Без истории беседы, инструментов и потоковой передачи: на входе промпт, на выходе текст.
Тело запроса
Конечная точка
POST /api/ai/llm/query
Пример запроса
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 '{}'
Ответ
{}
Возвращает конфигурацию Algolia, включая имя индекса, ID приложения и ключ API.
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/facilities/{facilityId}/algolia/config
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/algolia/config \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Инициализирует индекс Algolia для маркетинговых печатных материалов
Параметры
organisationId `string` (обязательно)Конечная точка
PUT /api/algolia/index
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/algolia/index \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Поиск маркетинговых печатных материалов
Тело запроса
Конечная точка
POST /algolia/search-marketing-print
Пример запроса
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 '{}'
Ответ
{}
Поиск маркетинговых печатных материалов
Параметры
club `string` (необязательно) ID клуба searchTerms `string` (необязательно) Поисковые запросы algoliaArgs `object` (необязательно) Дополнительные аргументы поиска AlgoliaКонечная точка
GET /algolia/search-marketing-print
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/algolia/search-marketing-print \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Массовое обновление объектов маркетинговых печатных материалов для определённого клуба
Конечная точка
POST /algolia/bulk-update-marketing-print
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/algolia/bulk-update-marketing-print \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получает маркетинговые печатные материалы из Algolia.
Параметры
organisationId `string` (обязательно) search `string` (необязательно) limit `string` (необязательно) brand `string` (необязательно) tag `string` (необязательно)Конечная точка
GET /api/algolia/marketing/assets
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/algolia/marketing/assets \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Инициализирует индекс Algolia для маркетинговых печатных материалов с конфигурацией объекта.
Параметры
organisationId `string` (обязательно)Конечная точка
POST /api/algolia/marketing/assets
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/algolia/marketing/assets \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Выполняет поиск в указанном индексе Algolia по поисковым запросам, клубу и/или языковому стандарту. Поиск можно дополнительно настроить с помощью дополнительных аргументов Algolia.
Параметры
searchTerms `string` (обязательно) Поисковые запросы для индекса Algolia. club `string` (необязательно) Внутренний ID клуба, выполняющего запрос. Если указан, результаты поиска фильтруются по региону, связанному с клубом. locale `string` (необязательно) Языковой стандарт для определения региона, если клуб не указан. Определяется по navigator.languages. algoliaArgs `string` (необязательно) Дополнительные или пользовательские аргументы, передаваемые в поисковый запрос Algolia.Конечная точка
POST /api/algolia/search-wiki
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/algolia/search-wiki \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список всех объявлений
Конечная точка
GET /api/announcements/list
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/announcements/list \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Загружает ресурс в ОБЩЕДОСТУПНЫЙ БАКЕТ S3 (через Upload API), после чего файл проходит постобработку и оптимизацию, создаются миниатюры и т. д. *Обратите внимание: ресурсы будут общедоступными*
Параметры
file `string` (необязательно) Имя загружаемого файла или ресурса.Конечная точка
POST /api/asset-upload
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/asset-upload \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает статус загрузки по указанному uuid записи о загрузке
Параметры
uuid `string` (обязательно) UUID записи о загрузкеКонечная точка
GET /api/asset-upload/:uuid
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/asset-upload/:uuid \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Отправка команды на Sonos клуба
Параметры
body `object` (обязательно) JSON-объект с командой и входными данными для отправки на Sonos.Конечная точка
PUT /api/audio-control/command/:club
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/audio-control/command/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получение конфигурации клиентской части управления аудио
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/audio-control/config/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/audio-control/config/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Изменение конфигурации клиентской части управления аудио
Параметры
body `object` (обязательно) JSON-объект нового блока конфигурации для добавления в систему.Конечная точка
PUT /api/audio-control/config/:club/:section
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/audio-control/config/:club/:section \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получает настройки бренда для определённого региона
Параметры
brandId `string` (необязательно) ID бренда regionCode `string` (необязательно) Код ISO региона, для которого нужно получить настройкиКонечная точка
GET /api/brands/{brandId}/regions/{regionCode}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/regions/{regionCode} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет несколько настроек бренда для определённого региона
Параметры
brandId `string` (необязательно) ID обновляемого бренда regionCode `string` (необязательно) Код ISO региона, для которого нужно обновить настройки acceptFreeTrialBookingsVisibility `string` (необязательно) customTrackingCodeVisibility `string` (необязательно) displayDataSources `string` (необязательно) displayDefaultDataSource `string` (необязательно) displayDefaultUI `string` (необязательно) displayUIOptions `string` (необязательно) defaultAboutBusiness `string` (необязательно) defaultAboutBusinessFacebook `string` (необязательно) facilityCoverImage `string` (необязательно) digitalProfileSettingsVisibility `string` (необязательно) facilityHoursVisibility `string` (необязательно) facilityLocationVisibility `string` (необязательно) facilityPaymentMethods `string` (необязательно) facilityPrimaryLogo `string` (необязательно) facilityStatusVisibility `string` (необязательно) landingPagesVisibility `string` (необязательно) lineChatIntegrationVisibility `string` (необязательно) whatsAppIntegrationVisibility `string` (необязательно) defaultWhatsAppMessage `string` (необязательно) socialUrlsVisibility `string` (необязательно) yextApiKey `string` (необязательно) Ключ API, используемый интеграцией Yext для этого сочетания бренда и региона. Учитывается, только если `directorySyncMode` имеет значение `yext`. directorySyncMode `string` (необязательно) Серверная часть синхронизации для объектов этого сочетания бренда и региона. Если значение отсутствует, по умолчанию используется `yext` для обратной совместимости с брендами, созданными до внедрения Directory Publishers. websiteUrl `string` (необязательно) androidAppUrl `string` (необязательно) iosAppUrl `string` (необязательно) featuredMessageDescription `string` (необязательно) yextCategoryIds `string` (необязательно) Устаревший ключ хранения: на самом деле это ID категорий Google Business Profile (например, gcid:gym). Префикс "yext" появился до отказа от Yext и сохранён для обратной совместимости с существующими строками базы данных. customInputFields `string` (необязательно) customInputFieldsToRemove `string` (необязательно)Конечная точка
PUT /api/brands/{brandId}/regions/{regionCode}
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/brands/{brandId}/regions/{regionCode} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получает настройки бренда для определённого объекта
Параметры
facilityId `string` (необязательно) ID объекта, для которого нужно получить настройки брендаКонечная точка
GET /api/facilities/{facilityId}/brand-settings
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/brand-settings \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создаёт новый бренд
Параметры
name `string` (обязательно) Название бренда organisationId `string` (обязательно) ID организации, которой принадлежит бренд redirectDashboard `string` (необязательно) URL для перенаправления после входа вместо панели по умолчаниюКонечная точка
POST /api/brands
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/brands \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список всех брендов
Конечная точка
GET /api/brands
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/brands \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает объект бренда
Параметры
brandId `string` (обязательно) ID получаемого бренда includeOrganisation `boolean` (необязательно) Включать ли данные организации в ответКонечная точка
GET /api/brands/{brandId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет бренд по ID
Параметры
brandId `string` (необязательно) ID обновляемого бренда name `string` (обязательно) Название бренда brandOrganisationId `string` (необязательно) ID организации, которой принадлежит бренд redirectDashboard `string` (необязательно) URL для перенаправления после входа вместо панели по умолчанию yextApiKey `string` (необязательно) Ключ API для доступа к Yext API для этого бренда customMenuLayout `object` (необязательно) Дерево структуры бокового меню бренда (разделы / группы / пункты со ссылками на системные модули или пользовательские URL). Задать его может только администратор организации, которой принадлежит этот бренд.Конечная точка
PUT /api/brands/{brandId}
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/brands/{brandId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список объектов бренда
Возвращает облегчённый список объектов (id, название, код ISO региона), принадлежащих бренду. Используется для заполнения списков выбора объектов в конфигурации бренда.
Параметры
brandId `string` (обязательно) ID бренда, для которого нужно получить список объектовКонечная точка
GET /api/brands/{brandId}/facilities
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/facilities \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список всех брендов, связанных с организацией клуба.
Конечная точка
GET /api/clubs/{club}/brands
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/brands \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список всех типов календарей
Конечная точка
GET /api/programs/calendars/calendar-types
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/programs/calendars/calendar-types \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает ресурс KYC клуба.
Параметры
clubId `string` (обязательно) ID клуба. key `string` (обязательно) Ключ ресурса KYC.Конечная точка
GET /api/clubs/{clubId}/kyc-assets/{key}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/kyc-assets/{key} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает сведения KYC клуба.
Конечная точка
GET /api/clubs/{clubId}/kyc
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/kyc \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет сведения KYC клуба.
Параметры
clubId `string` (обязательно) ID обновляемого клуба. body `object` (обязательно)Конечная точка
PUT /api/clubs/{clubId}/kyc
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubId}/kyc \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Загружает ресурс KYC для клуба.
Параметры
clubId `string` (обязательно) ID клуба. file `string` (обязательно) Загружаемый файл.Конечная точка
POST /api/clubs/{clubId}/kyc-assets
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubId}/kyc-assets \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает настройки клуба.
Конечная точка
GET /api/club/preferences/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/club/preferences/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создаёт или обновляет запись настроек клуба.
Тело запроса
Конечная точка
POST /api/club/preferences/:club
Пример запроса
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 '{}'
Ответ
{}
Возвращает список участников с соглашением.
Конечная точка
GET /api/clubpass/user/email/exist/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubpass/user/email/exist/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список участников с соглашением.
Конечная точка
GET /api/clubpass/user/phone/exist/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubpass/user/phone/exist/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список пользователей, относящихся к указанному клубу
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступКонечная точка
GET /api/clubs/{club}/members
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/members \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает, открыт ли клуб в указанную дату.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. date `string` (обязательно) Проверяемая дата в формате UnixКонечная точка
GET /api/club-busy-hours/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/club-busy-hours/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает все метаданные клуба, отображаемые на веб-сайтах Example Club.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/clubs/clubpage/clubdata/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/clubpage/clubdata/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет метаданные клуба новыми данными, переданными из клиентской части. Поля, отсутствующие в теле запроса, сохраняются (без SET и REMOVE). Поля, переданные как `null` или пустая строка, очищаются. Передайте `updateAll: false`, чтобы использовать отдельный путь частичного слияния; в любом случае вызывающим не нужно передавать поля, которыми они не владеют.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. body `string` (обязательно) JSON-объект с данными клуба, которые нужно обновить.Конечная точка
POST /api/clubs/clubpage/updateclub/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/clubpage/updateclub/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
добавление новой записи пользовательского отслеживания
Параметры
club `string` (обязательно) id клуба body `string` (обязательно) Массив элементов пользовательского отслеживания.Конечная точка
POST /api/clubs/{club}/customtracking
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{club}/customtracking \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает пользовательское отслеживание для определённого клуба
Конечная точка
GET /api/clubs/customtracking/:clubID
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/customtracking/:clubID \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновление записей пользовательского отслеживания
Параметры
club `string` (обязательно) id клуба body `string` (обязательно) JSON-объект с данными клуба, которые нужно обновить.Конечная точка
POST /api/clubs/{club}/customtracking/update
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{club}/customtracking/update \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает изображение фасада клуба по умолчанию.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/clubs/{club}/default-shop-front
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/default-shop-front \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список дверей, доступных на объекте
Параметры
body `object` (обязательно) JSON-объект с данными клуба, которые нужно обновить.Конечная точка
POST /api/clubs/integrations/doors/:facilityId
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/integrations/doors/:facilityId \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Разблокировка определённой двери на объекте
Параметры
body `object` (обязательно) JSON-объект с данными клуба, которые нужно обновить.Конечная точка
POST /api/clubs/integrations/doors/unlock
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/integrations/doors/unlock \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает все интеграции и сведения об их конфигурации для указанного клуба.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/clubs/integrations/list/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/integrations/list/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет метаданные клуба новыми данными, переданными из клиентской части.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. body `object` (обязательно) JSON-объект с данными клуба, которые нужно обновить.Конечная точка
POST /api/clubs/integrations/update/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/integrations/update/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает логическое значение, указывающее, находится ли клуб в европейской стране
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. date `string` (обязательно) Проверяемая дата в формате UnixКонечная точка
GET /api/clubs/is-eu/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/is-eu/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает общий список всех клубов в нашей базе данных.
Конечная точка
GET /api/clubs/listclubs
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/listclubs \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает, открыт ли клуб в указанную дату.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. date `string` (обязательно) Проверяемая дата в формате UnixКонечная точка
GET /api/clubs/{club}/open-on/{date}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/open-on/{date} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получение отзывов о клубе из DynamoDB.
Параметры
club `string` (обязательно) ID клубаКонечная точка
GET /api/clubs/{club}/reviews
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/reviews \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получение настроек отзывов клуба из DynamoDB.
Параметры
facilityId `string` (обязательно) ID объектаКонечная точка
GET /api/clubs/{club}/reviews-settings
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновление настроек отзывов клуба в DynamoDB.
Параметры
club `string` (обязательно) ID клубаКонечная точка
PUT /api/clubs/{club}/reviews-settings
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Повторное включение автоматической публикации в настройках отзывов.
Параметры
club `string` (обязательно) ID клубаКонечная точка
PUT /api/clubs/{club}/reviews/publish-recent-reviews
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/publish-recent-reviews \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Публикует отзыв
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. review `string` (обязательно) Внутренний ID отзыва, который нужно опубликовать.Конечная точка
PUT /api/clubs/{club}/reviews/{review}/publish
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{review}/publish \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Повторное включение автоматической публикации в настройках отзывов.
Параметры
club `string` (обязательно) ID клубаКонечная точка
PUT /api/clubs/{club}/reviews-settings/re-enable-auto-publish
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings/re-enable-auto-publish \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Публикация ответа на отзыв через исходную платформу публикации (Google и т. д.).
Параметры
club `string` (обязательно) ID объекта reviewId `string` (обязательно) ID отзыва в Performance Hub (ищется в таблице club-social-reviews) body `string` (обязательно)Конечная точка
POST /api/clubs/{club}/reviews/{reviewId}/respond
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{reviewId}/respond \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Отменяет публикацию отзыва
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. review `string` (обязательно) Внутренний ID отзыва, публикацию которого нужно отменить.Конечная точка
PUT /api/clubs/{club}/reviews/{review}/un-publish
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{review}/un-publish \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает из базы данных Performance Hub список владельцев, относящихся к указанному клубу
Параметры
clubID `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступКонечная точка
GET /api/clubs/{clubID}/owners
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/owners \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает все планы членства объекта.
Параметры
facilityId `string` (обязательно) Внутренний ID объектаКонечная точка
GET /api/facilities/membership-plans/:facilityId
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/facilities/membership-plans/:facilityId \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет запись плана членства.
Параметры
facilityId `string` (обязательно) Внутренний ID объекта body `object` (обязательно) JSON-объект с данными плана членства, которые нужно обновить.Конечная точка
PUT /api/facilities/membership-plans/:facilityId
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/facilities/membership-plans/:facilityId \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Повторное включение автоматической публикации в настройках отзывов.
Параметры
club `string` (обязательно) ID клубаКонечная точка
PUT /api/clubs/{club}/reviews/publish-recent-reviews
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/publish-recent-reviews \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Повторное включение автоматической публикации в настройках отзывов.
Параметры
club `string` (обязательно) ID клубаКонечная точка
PUT /api/clubs/{club}/reviews-settings/re-enable-auto-publish
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings/re-enable-auto-publish \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список всех доступных валют
Конечная точка
GET /api/currencies
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/currencies \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает географическое местоположение по IP-адресу.
Параметры
ip `string` (обязательно) IP-адрес для поискаКонечная точка
GET /api/geo/ip-location/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/geo/ip-location/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает географическое местоположение текущего пользователя по его IP-адресу.
Конечная точка
GET /api/geo/ip-current
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/geo/ip-current \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает только публичный IP-адрес запрашивающего клиента (без определения местоположения и без вызова сторонних API). Используется приложением AI Agent, чтобы сравнить публичный IP-адрес браузера с WAN IP-адресом, который сообщает устройство, и определить, находятся ли они в одной сети.
Конечная точка
GET /api/geo/client-ip
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/geo/client-ip \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Разбор номера телефона.
Параметры
body `string` (обязательно) Объект JSON с номером, который нужно разобрать.Конечная точка
POST /api/phone/parser
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/phone/parser \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает устройство главных часов
Параметры
club_id `string` (обязательно) Внутренний ID клуба, к которому нужно добавить устройство.Конечная точка
GET /api/clubs/{club_id}/smart-club/health-check/master-clock
Пример запроса
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"
Ответ
{}
Возвращает главное устройство Sonos
Параметры
club_id `string` (обязательно) Внутренний ID клуба, к которому нужно добавить устройство.Конечная точка
GET /api/clubs/{club_id}/smart-club/health-check/sonos-mqtt
Пример запроса
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"
Ответ
{}
получение уведомлений Duress о низком заряде батареи для указанного клуба.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/clubs/{club}/smart-club/health-check/low-battery-duress
Пример запроса
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"
Ответ
{}
Возвращает данные анализа сети
Параметры
club_id `string` (обязательно) Внутренний ID клуба, к которому нужно добавить устройство.Конечная точка
GET /api/clubs/{club_id}/smart-club/health-check/network-analysis
Пример запроса
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"
Ответ
{}
отправка уведомлений Duress о низком заряде батареи для указанного клуба.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/clubs/{club}/smart-club/health-check/send-low-battery-duress-notifs
Пример запроса
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"
Ответ
{}
Возвращает данные проверки скорости устройств для каждого типа устройств
Параметры
club_id `string` (обязательно) Внутренний ID клуба, к которому нужно добавить устройство.Конечная точка
GET /api/clubs/{club_id}/smart-club/health-check/speed-test
Пример запроса
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"
Ответ
{}
Получить аналитику публикаций для объекта. По умолчанию возвращает агрегированные ежедневные итоги по всем площадкам публикации или по одной площадке, если указан `publisherId`.
Параметры
facilityId `string` (обязательно) publisherId `string` (необязательно) startDate `string` (обязательно) endDate `string` (обязательно)Конечная точка
GET /api/facilities/{facilityId}/directory-insights
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/directory-insights \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить агрегированную аналитику публикаций бренда по всем площадкам публикации.
Параметры
brandId `string` (обязательно) startDate `string` (обязательно) endDate `string` (обязательно)Конечная точка
GET /api/brands/{brandId}/directory-insights
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/directory-insights \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Самые частые поисковые запросы (с разделением на брендовые и небрендовые) для объекта; сейчас источником является Google Business Profile.
Параметры
facilityId `string` (обязательно) publisherId `string` (необязательно) По умолчанию "google" — сейчас поддерживается только Google. startDate `string` (обязательно) endDate `string` (обязательно) limit `string` (необязательно)Конечная точка
GET /api/facilities/{facilityId}/directory-search-keywords
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/directory-search-keywords \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Самые частые поисковые запросы для бренда, агрегированные по всем объектам.
Параметры
brandId `string` (обязательно) startDate `string` (обязательно) endDate `string` (обязательно) limit `string` (необязательно)Конечная точка
GET /api/brands/{brandId}/directory-search-keywords
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/directory-search-keywords \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список вопросов и ответов для объекта.
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/facilities/{facilityId}/qna
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Ответить на вопрос.
Конечная точка
POST /api/facilities/{facilityId}/qna/{questionId}/answer
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna/{questionId}/answer \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удалить ответ.
Конечная точка
DELETE /api/facilities/{facilityId}/qna/{questionId}/answer/{answerId}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna/{questionId}/answer/{answerId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает площадки публикации, включённые для организации объекта, с состоянием их подключения.
Параметры
facilityId `string` (обязательно) organisationId `string` (обязательно)Конечная точка
GET /api/facilities/{facilityId}/directory-publishers/resolved
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/directory-publishers/resolved \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить Access Policies для объекта
Существующая конфигурация доступа при первом чтении автоматически преобразуется в эквивалентные действующие политики.
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/door-access/policies/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Заменить Access Policies с оптимистической проверкой ревизии
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
PUT /api/door-access/policies/{facilityId}
Пример запроса
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 '{}'
Ответ
{}
Создать политику доступа (Access Policy)
Параметры
facilityId `string` (обязательно)Конечная точка
POST /api/door-access/policies/{facilityId}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновить одну политику доступа (Access Policy)
Параметры
facilityId `string` (обязательно) policyId `string` (обязательно)Конечная точка
PATCH /api/door-access/policies/{facilityId}/{policyId}
Пример запроса
curl -X PATCH https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удалить одну политику доступа (Access Policy)
Параметры
facilityId `string` (обязательно) policyId `string` (обязательно) revision `integer` (обязательно)Конечная точка
DELETE /api/door-access/policies/{facilityId}/{policyId}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Дублировать политику доступа (Access Policy) с новым постоянным идентификатором
Параметры
facilityId `string` (обязательно) policyId `string` (обязательно)Конечная точка
POST /api/door-access/policies/{facilityId}/{policyId}/duplicate
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId}/duplicate \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Подсчитать затронутых пользователей и двери для всех Access Policies
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/door-access/policies/{facilityId}/impacts
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/impacts \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Подсчитать пользователей и двери, затронутые политикой доступа (Access Policy)
Параметры
facilityId `string` (обязательно) policyId `string` (обязательно)Конечная точка
GET /api/door-access/policies/{facilityId}/{policyId}/impact
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId}/impact \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список контроллеров дверей на объекте с их действующими правилами Door & Gate Access
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/door-access/doors/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Сохранить переопределения для отдельной двери, значок и конфигурацию на стороне устройства
Единая точка записи для всего, что административное приложение DGA изменяет для двери: - `accessRulesOverride` / `geofenceOverride` — передайте `null`, чтобы очистить и вернуться к значению объекта по умолчанию. - `icon` — постоянный ключ (см. services/door-access/door-icons.js); для неизвестных значений возвращается 400. - `holdTimeSeconds` (1–30), `maintenanceMode` (`off` / `force-open` / `force-closed`), `doorLocation` (произвольный текст, ≤64 символов), `playNotificationSoundOnRelayToggle` (boolean), `autoUnlockSchedule` (недельная сетка интервалов). Раньше эти поля были только в Device Management, но теперь приложение записывает их на месте, чтобы администраторам не нужно было покидать боковую панель двери ради повседневных изменений конфигурации. Если затронуто любое из полей на стороне устройства, маршрут также передаёт соответствующие переменные среды Balena (`RELAY_NOTIFICATION_SOUND`, `DOOR_MAINTENANCE_MODE`, `DOOR_AUTO_UNLOCK_SCHEDULE`) и отправляет команду MQTT `unlockUpdates`, чтобы устройство применило новую конфигурацию, не дожидаясь следующего обновления переменных среды Balena. Выполняется по возможности — ответ 200 возвращается, даже если Balena временно недоступна.
Параметры
facilityId `string` (обязательно) doorId `string` (обязательно)Тело запроса
Конечная точка
PUT /api/door-access/doors/{facilityId}/{doorId}/override
Пример запроса
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 '{}'
Ответ
{}
Облегчённая проверка состояния Balena для уведомления о перезагрузке в боковой панели двери
Боковая панель приложения DGA запрашивает эти данные по требованию, когда администратор открывает дверь, чтобы показать нужный текст «сохранение перезагрузит контроллер»: вариант по умолчанию «несколько секунд» или более строгий вариант «несколько минут», если также ожидается обновление выпуска. Возвращает плоский снимок, полученный из `balena.models.device.get()`. При сбое мягко возвращает `data: null` (вместо ошибки 5xx), чтобы при недоступности Balena упрощался только текст уведомления, а открытие боковой панели не блокировалось.
Параметры
facilityId `string` (обязательно) doorId `string` (обязательно)Конечная точка
GET /api/door-access/doors/{facilityId}/{doorId}/device-status
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/device-status \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Административное переопределение — открыть дверь из приложения
Кратковременно переключает реле на текущее значение `holdTimeSeconds` двери, записывая строку аудита `admin-override` в ph-door-app-access-events, чтобы действие можно было отследить в журналах доступа. Всегда выполняется успешно независимо от `maintenanceMode === 'force-closed'` — это аварийный путь для администратора. Возвращает 200 сразу после отправки публикации MQTT; состояния confirmed / failed / timed_out здесь не ожидаются (устаревший поток /api/devices/door-controllers + /api/ics/devices/command также работает по принципу «отправил и забыл»).
Параметры
facilityId `string` (обязательно) doorId `string` (обязательно)Конечная точка
POST /api/door-access/doors/{facilityId}/{doorId}/unlock
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/unlock \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Воспроизвести на контроллере двери звуковой сигнал для поиска
Публикует команду MQTT `beep`, чтобы контроллер подал три сигнала средней длительности (около 500 мс каждый, пауза около 350 мс, всего около 2 с). Используется администраторами, чтобы найти контроллер двери на месте. Устаревшая кнопка в Device Management подаёт серию коротких сигналов около 30 с, но драйвер зуммера в прошивке надёжно воспроизводит только первый, поэтому приложение отправляет более короткий и надёжный сигнал. Строка аудита не создаётся — это диагностическое действие без влияния на управление доступом.
Параметры
facilityId `string` (обязательно) doorId `string` (обязательно)Конечная точка
POST /api/door-access/doors/{facilityId}/{doorId}/identify
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/identify \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удалённо перезагрузить контроллер двери
Публикует ту же команду MQTT `rebootDevice` по принципу «отправил и забыл», что и устаревшая кнопка «Remotely Reboot Device» в Device Management, но с проверкой модуля `door-gate-access`, чтобы администраторы DGA могли перезагрузить контроллер из раздела Advanced боковой панели двери без отдельного права `device-management`. Возвращает 200 сразу после отправки публикации; на время перезагрузки устройство переходит в офлайн.
Параметры
facilityId `string` (обязательно) doorId `string` (обязательно)Конечная точка
POST /api/door-access/doors/{facilityId}/{doorId}/reboot
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/reboot \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список строк User Access на объекте
Возвращает все неудалённые строки доступа пользователей на объекте. Поддерживает фильтры на стороне клиента (source, search, accessEnabled, hasGrants). Вычисление `hideExcluded` на стороне сервера (этап 4) будет добавлено, когда появится гибридный механизм оценки прав; пока параметр принимается, но возвращается полный набор.
Параметры
facilityId `string` (обязательно) search `string` (необязательно) source `string` (необязательно) accessEnabled `string` (необязательно) hasGrants `string` (необязательно) hideExcluded `boolean` (необязательно) Если true, синхронизированные пользователи (source != manual), которые не могут пройти ни через одну дверь этого объекта ни в какое время, скрываются. Ответ содержит обёртку `hidden: { count, sample }`.Конечная точка
GET /api/door-access/users/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/users/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Вручную создать строку User Access на объекте
Создаёт новую строку с `source: 'manual'`. Возвращает 409 с `existingUserId`, если указанный телефон или адрес электронной почты уже соответствует строке на этом объекте.
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
POST /api/door-access/users/{facilityId}
Пример запроса
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 '{}'
Получить одну строку User Access
Параметры
facilityId `string` (обязательно) userId `string` (обязательно)Конечная точка
GET /api/door-access/users/{facilityId}/{userId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Частичное обновление строки User Access
Изменяет любой набор полей идентификации и авторизации. Передайте `null`, чтобы очистить необязательное поле. Возвращает 409, если новый телефон или адрес электронной почты совпадает с другой строкой на том же объекте. `appMessage` принимает ту же структуру, что и сообщение для всего объекта в PUT /api/door-access/rules/{facilityId}: текст, уровень важности, необязательная ссылка, необязательное расписание начала и окончания. Мобильное приложение показывает его на панели только указанному пользователю.
Параметры
facilityId `string` (обязательно) userId `string` (обязательно)Тело запроса
Конечная точка
PATCH /api/door-access/users/{facilityId}/{userId}
Пример запроса
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 '{}'
Ответ
{}
Мягко удалить строку User Access
Помечает строку `deleted: true` и отключает доступ. Связь журнала аудита с userId сохраняется; администраторы могут снова включить доступ вручную.
Параметры
facilityId `string` (обязательно) userId `string` (обязательно)Конечная точка
DELETE /api/door-access/users/{facilityId}/{userId}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Источники доступа пользователя по каждой двери
Для каждой двери возвращает текущую детерминированную авторизацию (`allowedNow`, `allowedVia`, `deniedReason`) и настроенные пути для Access Policies, постоянных прав, расписаний политик, административных прав по временным окнам и актуальных сопоставленных окон из партнёрских источников. Также возвращает текущую и следующую доступность и актуальность источников. Параметры двери blockAllAccess и обслуживание проверяются раньше всех разрешающих путей.
Параметры
facilityId `string` (обязательно) userId `string` (обязательно)Конечная точка
GET /api/door-access/users/{facilityId}/{userId}/effective-access
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/effective-access \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Массово создать строки User Access из импорта CSV
Создаёт несколько строк `source: 'manual'` за один запрос, используя ту же проверку, нормализацию телефона и адреса электронной почты, проверку совпадений в пределах объекта, автоматические сообщения и (необязательно) логику приглашений, что и создание одной строки. Строки обрабатываются по порядку, поэтому более поздняя строка, совпадающая с созданной ранее, отмечается как дубликат. Права передаются как уже определённые идентификаторы дверей и групп (клиент сопоставляет имена с идентификаторами). Права по временным окнам при массовом создании намеренно отклоняются; их нужно добавить через эндпоинт замены для отдельного пользователя после импорта. Никогда не выдаёт исключение для отдельной строки; результат каждой строки сообщается отдельно.
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
POST /api/door-access/users/{facilityId}/bulk
Пример запроса
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 '{}'
Ответ
{}
Заменить дополнительные права Access Time Window в строке User Access
Заменяет только `timeWindowGrants`; постоянные `grants` и `sourceTimeWindows` интеграций не затрагиваются. Для каждого элемента требуется область (`facilityWide`, `doors` или `groups`) и абсолютное или недельное `window`. Отправка пустого массива явно очищает все административные окна.
Параметры
facilityId `string` (обязательно) userId `string` (обязательно)Тело запроса
Конечная точка
PUT /api/door-access/users/{facilityId}/{userId}/time-window-grants
Пример запроса
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 '{}'
Ответ
{}
Заморозить строку User Access от обновлений синхронизации из источника
Устанавливает `decoupledFromSource: true`, очищает все `sourceTimeWindows`, принадлежащие интеграции, и заставляет синхронизацию (cron + потоки) записывать в журнал и пропускать эту строку, пока администратор не сбросит флаг через /recouple.
Параметры
facilityId `string` (обязательно) userId `string` (обязательно)Конечная точка
POST /api/door-access/users/{facilityId}/{userId}/decouple
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/decouple \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Снова подключить строку User Access к обновлениям синхронизации из источника
Параметры
facilityId `string` (обязательно) userId `string` (обязательно)Конечная точка
POST /api/door-access/users/{facilityId}/{userId}/recouple
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/recouple \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Отозвать все токены обновления приложения Door & Gate Access пользователя
Отзыв выполняется по сохранённому телефону или адресу электронной почты пользователя (таблица токенов обновления индексируется по `sha256(plaintext)`; индексы GSI byMobilePhone / byEmail позволяют удалить токены одного пользователя во всех записях). Другие пользователи с тем же телефоном или адресом электронной почты на другом объекте также будут разлогинены.
Параметры
facilityId `string` (обязательно) userId `string` (обязательно)Конечная точка
POST /api/door-access/users/{facilityId}/{userId}/logout
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/logout \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Отправить (повторно) пользователю письмо с приглашением в приложение Door & Gate Access
Принудительно отправляет письмо с приглашением скачать приложение на сохранённый адрес электронной почты пользователя (только электронная почта, без SMS). Игнорирует проверки права на приглашение и уже отправленного письма, используемые при автоматической синхронизации, — это явное действие администратора. Возвращает 400, если у пользователя не указан адрес электронной почты.
Параметры
facilityId `string` (обязательно) userId `string` (обязательно)Конечная точка
POST /api/door-access/users/{facilityId}/{userId}/resend-invite
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/resend-invite \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Предварительный просмотр получателей массовой отправки приглашений в приложение
Вычисляет набор пользователей, которые получат письмо с приглашением в приложение. Базовый набор — все неудалённые пользователи с адресом электронной почты, которые ещё ни разу не пользовались приложением (`appLastSeenAt` пусто). По умолчанию набор сужается до пользователей, у которых сейчас есть доступ (совпадение правила или право), и которых ещё не приглашали; `includeAlreadyInvited` и `includeNoAccess` расширяют его. Письма не отправляются — возвращаются количества, небольшая выборка и userIds кандидатов для эндпоинта выполнения.
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
POST /api/door-access/users/{facilityId}/bulk-invite/preview
Пример запроса
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 '{}'
Ответ
{}
Отправить письма с приглашением в приложение группе пользователей
Отправляет письмо с приглашением скачать приложение каждому из указанных userIds (не более 50 за запрос; клиент разбивает на пакеты полный список кандидатов из предварительного просмотра). Каждый пользователь повторно проверяется в момент отправки: строки, которых больше нет, у которых нет адреса электронной почты или которые воспользовались приложением после предварительного просмотра, пропускаются, а не считаются ошибкой. Результаты сообщаются по каждому пользователю отдельно, чтобы клиент мог подвести итог: отправлено / ошибка / пропущено.
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
POST /api/door-access/users/{facilityId}/bulk-invite
Пример запроса
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 '{}'
Ответ
{}
Список групп дверей на объекте
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/door-access/door-groups/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создать группу дверей
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
POST /api/door-access/door-groups/{facilityId}
Пример запроса
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 '{}'
Получить одну группу дверей
Параметры
facilityId `string` (обязательно) groupId `string` (обязательно)Конечная точка
GET /api/door-access/door-groups/{facilityId}/{groupId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновить группу дверей
Параметры
facilityId `string` (обязательно) groupId `string` (обязательно)Тело запроса
Конечная точка
PATCH /api/door-access/door-groups/{facilityId}/{groupId}
Пример запроса
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 '{}'
Ответ
{}
Мягко удалить группу дверей
Параметры
facilityId `string` (обязательно) groupId `string` (обязательно)Конечная точка
DELETE /api/door-access/door-groups/{facilityId}/{groupId}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список партнёрских интеграций, настроенных на объекте
Возвращает партнёрские интеграции объекта (id, name, logo, enabled), объединяя ph-facility-partner-config с каталогом ph-partners. Ограничено модулем door-gate-access (поэтому администраторы без доступа к external-integrations всё равно могут отображать значки партнёров и список синхронизации по партнёрам).
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/door-access/partners/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/partners/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Прочитать конфигурацию синхронизации User Access для объекта
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/door-access/sync-config/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/sync-config/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновить конфигурацию синхронизации User Access для объекта
Принимаются только поля, которыми управляет администратор (`enabled`, `requireIdentifier` и карта партнёров `partners`); `lastRunAt` и `lastRunCounts` записывает сам механизм синхронизации. `partner.partners` — карта включения по партнёрам с ключом partnerId (по умолчанию включено, отключается явно): когда общий `partner.enabled` включён, партнёр синхронизируется, если для него здесь нет явной записи `{ enabled: false }`.
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
PUT /api/door-access/sync-config/{facilityId}
Пример запроса
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 '{}'
Ответ
{}
Прочитать конфигурацию автоматических сообщений пользователям для объекта
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/door-access/auto-messages/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновить конфигурацию автоматических сообщений пользователям для объекта
Сохраняет правила, а затем сразу заново оценивает все строки User Access на объекте, чтобы существующие пользователи сразу получили или потеряли автоматическое сообщение. Ручные сообщения и отвязанные строки не затрагиваются.
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
PUT /api/door-access/auto-messages/{facilityId}
Пример запроса
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 '{}'
Ответ
{}
Состояние фоновой повторной оценки автоматических сообщений
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/door-access/auto-messages/{facilityId}/sweep-status
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId}/sweep-status \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Запустить синхронизацию User Access для объекта по требованию
Синхронно обходит все включённые источники (partner / cctv) на объекте и согласует строки ph-door-access-users с помощью каскадного устранения дубликатов. Возвращает количества по каждому источнику. Отключённые источники отображаются как `skippedSyncDisabled: 1`, а не отсутствуют, чтобы интерфейс мог единообразно показывать обе строки.
Параметры
facilityId `string` (обязательно)Конечная точка
POST /api/door-access/sync/{facilityId}/run
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/run \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Пробный предварительный просмотр массового удаления синхронизированных с партнёром записей
Возвращает количество и выборку строк доступа пользователей, которые будут мягко удалены, а также confirmToken, который нужно передать обратно в эндпоинт выполнения. Данные не изменяются. Журналы доступа никогда не затрагиваются.
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
POST /api/door-access/sync/{facilityId}/bulk-delete/preview
Пример запроса
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 '{}'
Ответ
{}
Выполнить массовое удаление синхронизированных с партнёром записей (мягкое удаление)
Мягко удаляет все синхронизированные с партнёром строки доступа пользователей в заданной области. Требует confirmToken, полученный при предварительном просмотре; если фактический набор изменился после просмотра, токен не совпадёт и запрос будет отклонён (409), чтобы администратор проверил его заново. Журналы доступа сохраняются.
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
POST /api/door-access/sync/{facilityId}/bulk-delete
Пример запроса
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 '{}'
Ответ
{}
Последние действия синхронизации User Access (журнал для устранения неполадок)
Возвращает последние результаты синхронизации для объекта (создано / пропущено / отключено) с причиной, чтобы администраторы видели, почему участник синхронизировался или нет. Сначала новые.
Параметры
facilityId `string` (обязательно) limit `integer` (необязательно)Конечная точка
GET /api/door-access/sync/{facilityId}/log
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/log \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список событий Door & Gate Access для объекта
Возвращает события открытия из мобильного приложения, административного переопределения и внешнего Partner API в одной ленте в обратном хронологическом порядке.
Параметры
facilityId `string` (обязательно) from `integer` (необязательно) to `integer` (необязательно) limit `integer` (необязательно)Конечная точка
GET /api/door-access/events/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/events/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Пробная оценка геозоны для метки тестового режима администратора
Тело запроса
Конечная точка
POST /api/door-access/geofence/test
Пример запроса
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 '{}'
Ответ
{}
Получить состояние начальной настройки и активации объекта
Используется для начальной страницы «Get Started» приложения и баннера хода настройки. Возвращает текущее количество дверей и пользователей, два вычисляемых основных шага (есть пользователь, есть дверь), сохранённые необязательные флаги «просмотрено» и активирован ли объект (выполнены оба основных шага). Когда объект впервые становится активированным, записывается метка времени activatedAt.
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/door-access/onboarding/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/door-access/onboarding/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновить необязательные флаги «просмотрено» начальной настройки для объекта
Сохраняет необязательные флаги контрольного списка настройки, которые отмечает администратор (правила доступа, настройки синхронизации, геозоны). Основные шаги и активация вычисляются по текущим количествам данных и здесь задать их нельзя. Возвращает полное обновлённое состояние начальной настройки.
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
PUT /api/door-access/onboarding/{facilityId}
Пример запроса
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 '{}'
Ответ
{}
Возвращает ответ JSON с данными аналитики объекта.
Параметры
clubId `string` (необязательно) Идентификатор объекта, для которого нужно получить данные аналитики. fromDate `string` (необязательно) Дата начала периода получаемых данных аналитики. toDate `string` (необязательно) Дата окончания периода получаемых данных аналитики.Конечная точка
GET /clubs/{clubId}/lead-events
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/lead-events \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает ответ JSON с данными аналитики объекта.
Параметры
clubId `string` (необязательно) Идентификатор объекта, для которого нужно получить данные аналитики. fromDate `string` (необязательно) Дата начала периода получаемых данных аналитики. toDate `string` (необязательно) Дата окончания периода получаемых данных аналитики.Конечная точка
GET /clubs/{clubId}/analytics/page-views
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/page-views \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает ответ JSON с данными аналитики объекта.
Параметры
clubId `string` (необязательно) Идентификатор объекта, для которого нужно получить данные аналитики. fromDate `string` (необязательно) Дата начала периода получаемых данных аналитики. toDate `string` (необязательно) Дата окончания периода получаемых данных аналитики.Конечная точка
GET /clubs/{clubId}/analytics/referrers
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/referrers \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает ответ JSON с данными аналитики объекта.
Параметры
clubId `string` (необязательно) Идентификатор объекта, для которого нужно получить данные аналитики. fromDate `string` (необязательно) Дата начала периода получаемых данных аналитики. toDate `string` (необязательно) Дата окончания периода получаемых данных аналитики.Конечная точка
GET /clubs/{clubId}/analytics/socials
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/socials \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает ответ JSON с данными аналитики объекта.
Параметры
clubId `string` (необязательно) Идентификатор объекта, для которого нужно получить данные аналитики. fromDate `string` (необязательно) Дата начала периода получаемых данных аналитики. toDate `string` (необязательно) Дата окончания периода получаемых данных аналитики.Конечная точка
GET /clubs/{clubId}/analytics/top-cities
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/top-cities \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает ответ JSON с данными аналитики объекта.
Параметры
clubId `string` (необязательно) Идентификатор объекта, для которого нужно получить данные аналитики. fromDate `string` (необязательно) Дата начала периода получаемых данных аналитики. toDate `string` (необязательно) Дата окончания периода получаемых данных аналитики.Конечная точка
GET /clubs/{clubId}/analytics/total-page-views
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/total-page-views \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает ответ JSON с данными аналитики объекта.
Параметры
clubId `string` (необязательно) Идентификатор объекта, для которого нужно получить данные аналитики. fromDate `string` (необязательно) Дата начала периода получаемых данных аналитики. toDate `string` (необязательно) Дата окончания периода получаемых данных аналитики.Конечная точка
GET /clubs/{clubId}/analytics/traffic
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/traffic \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создаёт временный JWT (JSON Web Token) для фронтенда, используемый встраиваемыми диаграммами Google Analytics на странице «analytics».
Конечная точка
GET /api/ga/onetimetoken
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/ga/onetimetoken \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает виджеты панели из «The Training Camp», если у объекта есть активные участники.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/reporting/apps/widgets/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/reporting/apps/widgets/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает все непросмотренные праздничные дни объекта.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/reporting/club/{club}/unreviewed-holidays
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/reporting/club/{club}/unreviewed-holidays \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Отметить все непросмотренные праздничные дни объекта как просмотренные.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
PUT /api/reporting/club/{club}/review-holidays
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/reporting/club/{club}/review-holidays \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает отчёт KPI в формате CSV с разбивкой по месяцам за последние 12 месяцев. *NOTE* Создаётся один отчёт по ВСЕМ объектам в системе — не запускайте его несколько раз параллельно, иначе GymMaster будет перегружен!
Параметры
months `string` (необязательно) Количество месяцев (от текущей даты) для получения (по умолчанию 12)Конечная точка
GET /api/reporting/gymmaster/all-clubs-kpi-report
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/reporting/gymmaster/all-clubs-kpi-report \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает графики выручки MMS для указанного объекта.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. range `string` (необязательно) Диапазон в днях (отсчитывается назад от текущей даты), за который нужно получить данныеКонечная точка
GET /api/reporting/gymmaster/revenuegraph/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/reporting/gymmaster/revenuegraph/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает данные и аналитику MMS (Member Management System) для панели указанного объекта. Данные включают статистику GymMaster/Perfect Gym, а также другие внутренние метрики, собираемые нашей системой.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. range `string` (необязательно) Диапазон в днях (отсчитывается назад от текущей даты), за который нужно получить данныеКонечная точка
GET /api/reporting/gymmaster/widgets/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/reporting/gymmaster/widgets/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает данные виджета Myzone для панели указанного объекта.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/reporting/myzone/widgets/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/reporting/myzone/widgets/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает объект со службами, которые считаются недоступными по данным одного или нескольких наших эндпоинтов страницы состояния и мониторинга, настроенных во внутреннем инструменте «Uptime Kuma».
Конечная точка
GET /api/reporting/statuspage/events
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/reporting/statuspage/events \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает предстоящие записи на тренировки на ближайшие 7 дней.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/reporting/clubs/{club}/workout-bookings
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/reporting/clubs/{club}/workout-bookings \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список прошлых праздничных дней объекта.
Параметры
clubId `string` (необязательно) ID клуба fromDate `string` (необязательно) Метка времени Unix для даты начала диапазона возвращаемых праздничных дней. toDate `string` (необязательно) Метка времени Unix для даты окончания диапазона возвращаемых праздничных дней.Конечная точка
GET /api/clubs/{clubId}/historical-holidays
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/historical-holidays \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает автоматизации устройств, связанные с объектом.
Параметры
club `string` (обязательно) Внутренний ID клуба, для которого нужно получить список устройств.Конечная точка
GET /api/ics/automations/list/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/ics/automations/list/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет конфигурацию существующего экрана или устройства.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, на котором нужно обновить устройство. body `string` (обязательно) JSON-объект параметров обновления.Конечная точка
POST /api/ics/automations/update/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/ics/automations/update/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Добавляет или связывает с вашим объектом физический экран или компьютер.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно добавить устройство. body `string` (обязательно) JSON-объект нового экрана для привязки.Конечная точка
POST /api/ics/devices/add/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/ics/devices/add/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Даёт устройству команду подключиться к новому SSID по указанным параметрам.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, на котором нужно обновить устройство. body `string` (обязательно) JSON-объект параметров обновления.Конечная точка
POST /api/ics/devices/changewifi/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/ics/devices/changewifi/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет конфигурацию существующего экрана или устройства.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, на котором нужно обновить устройство. body `string` (обязательно) JSON-объект параметров обновления.Конечная точка
POST /api/ics/devices/command/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/ics/devices/command/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Загружает URL-адрес или веб-страницу на экране определённого устройства.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, на котором нужно обновить устройство. body `string` (обязательно) JSON-объект параметров обновления.Конечная точка
POST /api/ics/devices/loadurl/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/ics/devices/loadurl/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет конфигурацию существующего экрана или устройства.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, на котором нужно обновить устройство. body `string` (обязательно) JSON-объект параметров обновления.Конечная точка
PUT /api/ics/devices/update/{club}
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/ics/devices/update/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Переименовывает экран или устройство. Изменяется только регистрация: в отличие от эндпоинта обновления, на устройство ничего не передаётся, поэтому эндпоинт доступен и для экранов со сборкой ПО, поддержка которой прекращена.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, к которому относится устройство. body `string` (обязательно) Объект JSON с параметрами переименования.Конечная точка
PUT /api/ics/devices/rename/{club}
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/ics/devices/rename/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получает виджеты и ссылки на офлайн-медиа для объекта на указанную дату.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, для которого нужно изменить templated content. date `string` (обязательно) Дата, для которой возвращаются URL-адреса виджетов, в формате `YYYY-MM-DD`.Конечная точка
GET /api/ics/external-resources/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/ics/external-resources/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получает виджеты и ссылки на офлайн-медиа для объекта на указанную дату.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, для которого нужно изменить templated content.Конечная точка
GET /api/ics/list-scheduled-workouts/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/ics/list-scheduled-workouts/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Изменяет templated content для указанного объекта.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, для которого нужно изменить templated content. body `string` (обязательно) Объект JSON с новым templated content.Конечная точка
POST /api/ics/loadprogram/{club}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/ics/loadprogram/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получает конфигурацию контента существующего экрана или устройства.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, данные контента которого нужно получить.Конечная точка
GET /api/ics/programs/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/ics/programs/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет конфигурацию контента существующего экрана или устройства.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, на котором нужно обновить устройство. body `string` (обязательно) Объект JSON с параметрами обновления.Конечная точка
PUT /api/ics/programs/{club}
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/ics/programs/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получает варианты конфигурации контента.
Конечная точка
GET /api/ics/programs/options/{facilityID}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/ics/programs/options/{facilityID} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Чат с контекстом RAG. Доступа к инструментам нет — только простой инструмент запроса и ответа API, который позволяет напрямую получать знания из базы знаний.
Параметры
organisationId `string` (необязательно) Идентификатор организации (определяется автоматически, если не указан)Тело запроса
Конечная точка
POST /api/llm/chat
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/llm/chat \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Ответ
{}
Удалить эмбеддинги статьи из векторного хранилища и обновить состояние отслеживания эмбеддингов
Тело запроса
Конечная точка
DELETE /api/llm/delete-article
Пример запроса
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 '{}'
Ответ
{}
Список записей отслеживания эмбеддингов по организации и состоянию
Параметры
organisationId `string` (необязательно) Идентификатор организации (определяется автоматически, если не указан) status `string` (обязательно) Состояние для фильтрации (одно из in_queue, done, anomaly, fail, deleted) Limit `string` (необязательно) Максимальное количество элементов на странице LastEvaluatedKey `string` (необязательно) LastEvaluatedKey DynamoDB в формате JSON для разбиения на страницыКонечная точка
GET /api/llm/embedding-track/by-org-and-status
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/llm/embedding-track/by-org-and-status \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список записей отслеживания эмбеддингов по организации (с необязательным фильтром по типу ресурса)
Параметры
organisationId `string` (необязательно) Идентификатор организации (определяется автоматически, если не указан) resourceType `string` (необязательно) Необязательный тип ресурса (например, "article"). Если указан, отбираются записи, у которых resourceTypeId начинается с "{type}#". Limit `string` (необязательно) Максимальное количество элементов на странице LastEvaluatedKey `string` (необязательно) LastEvaluatedKey DynamoDB в формате JSON для разбиения на страницыКонечная точка
GET /api/llm/embedding-track/by-org
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/llm/embedding-track/by-org \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Инициализировать коллекцию векторной базы данных организации
Параметры
organisationId `string` (необязательно) Идентификатор организации (определяется автоматически, если не указан)Конечная точка
POST /api/llm/init-org
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/llm/init-org \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Семантический поиск в базе знаний
Параметры
organisationId `string` (необязательно) Идентификатор организации (определяется автоматически, если не указан)Тело запроса
Конечная точка
POST /api/llm/semantic-search
Пример запроса
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 '{}'
Ответ
{}
Запустить потоковую обработку статей из очереди для создания эмбеддингов с обновлением хода выполнения в реальном времени
Параметры
organisationId `string` (необязательно) Идентификатор организации (определяется автоматически, если не указан)Конечная точка
POST /api/llm/start-embedding-stream
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/llm/start-embedding-stream \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Добавить или обновить эмбеддинги статьи в векторной базе данных
Обрабатывает эмбеддинги статьи в зависимости от её текущего состояния: - Если статья не опубликована ИЛИ является частной: эмбеддинги удаляются - Если статья опубликована И является публичной: эмбеддинги создаются заново по полному содержимому Всегда требуется полный текст статьи.
Параметры
organisationId `string` (необязательно) Идентификатор организации (определяется автоматически, если не указан)Тело запроса
Конечная точка
POST /api/llm/upsert-embeddings
Пример запроса
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 '{}'
Ответ
{}
Тестовый эндпоинт для пакетного удаления эмбеддингов статей по организации и (необязательно) состоянию
Параметры
organisationId `string` (необязательно) Идентификатор организации (определяется по контексту пользователя, если не указан) status `string` (необязательно) Состояние для фильтрации (необязательно; если не указано, удаляются ВСЕ статьи организации независимо от состояния) hardDelete `string` (необязательно) Удалить записи отслеживания эмбеддингов безвозвратно (true) или мягко, обновив состояние (false)Конечная точка
DELETE /api/llm/test/batch-delete-by-status
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/llm/test/batch-delete-by-status \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Преобразовать текст и разбить его на фрагменты с подробной статистикой
Тестовый эндпоинт, который преобразует текст и разбивает его на фрагменты, а затем выдаёт подробную статистику распределения фрагментов, включая количество символов, проценты и метрики качества, чтобы помочь оценить эффективность разбиения.
Тело запроса
Конечная точка
POST /api/llm/test/transform-chunk
Пример запроса
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 '{}'
Ответ
{}
Получить общее количество векторов в векторном индексе организации
Тестовый эндпоинт для подсчёта всех векторов в векторном индексе организации текущего пользователя
Параметры
organisationId `string` (необязательно) Идентификатор организации (определяется автоматически, если не указан)Конечная точка
GET /api/llm/test/vector-count
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-count \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удалить из векторного индекса все векторы для указанного articleId
Тестовый эндпоинт для удаления всех векторов, связанных с указанным articleId, из векторного индекса организации текущего пользователя.
Параметры
organisationId `string` (необязательно) Идентификатор организации (определяется автоматически, если не указан) articleId `string` (обязательно) articleId, для которого нужно удалить векторы dryRun `string` (необязательно) Если true, только показывает, что будет удалено, без фактического удаленияКонечная точка
DELETE /api/llm/test/vector-delete-article
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/llm/test/vector-delete-article \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Проверить Vector SDK, получив список всех индексов
Тестовый эндпоинт для проверки подключения Vector SDK и получения списка всех индексов в векторном бакете
Конечная точка
GET /api/llm/test/vector-indices
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-indices \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Инициализировать векторный индекс для организации
Создаёт векторный бакет и индекс для организации текущего пользователя
Параметры
organisationId `string` (необязательно) Идентификатор организации (определяется автоматически, если не указан)Конечная точка
POST /api/llm/test/vector-init-index
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/llm/test/vector-init-index \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить все метаданные векторов для указанного articleId
Тестовый эндпоинт для получения всех векторных фрагментов и их метаданных для указанного articleId из векторного индекса. Полезен, чтобы посмотреть, как статья разбита на фрагменты и сохранена. Фильтрацию выполняет служба векторного хранилища.
Параметры
organisationId `string` (необязательно) Идентификатор организации (определяется автоматически, если не указан) articleId `string` (обязательно) Идентификатор статьи, для которой нужно получить метаданные векторовКонечная точка
GET /api/llm/test/vector-metadata-by-article
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-metadata-by-article \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить последние векторы с метаданными из векторного индекса
Тестовый эндпоинт для получения 10 последних векторов с метаданными (но без векторных данных) из векторного индекса организации текущего пользователя. Полезен для изучения структуры метаданных.
Параметры
organisationId `string` (необязательно) Идентификатор организации (определяется автоматически, если не указан) limit `string` (необязательно) Количество возвращаемых последних векторов (не более 100)Конечная точка
GET /api/llm/test/vector-recent
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-recent \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Загружает ресурс для Marketing Manager/Designer в хранилище S3.
Параметры
file `string` (необязательно) Имя загружаемого файла или ресурса.Конечная точка
POST /api/marketing/design/static/download
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/marketing/design/static/download \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает отдельный ресурс в формате JSON для загрузки в менеджер ресурсов.
Параметры
id `string` (обязательно) Идентификатор получаемого ресурса. organisationId `string` (обязательно) Идентификатор организации объекта, к которому относится ресурс.Конечная точка
GET /api/marketing/assets/get/{id}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets/get/{id} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает все ресурсы для дизайна.
Параметры
body `string` (обязательно) Объект JSON с данными объекта, которые нужно сохранить. organisationId `string` (обязательно) Идентификатор организации объекта, к которому относится ресурс. useCache `string` (необязательно) search `string` (необязательно) Поисковый запрос для фильтрации ресурсов по имени или тегам. brand `string` (необязательно) Бренд для фильтрации ресурсов. tag `string` (необязательно) Тег для фильтрации ресурсов.Конечная точка
GET /api/marketing/assets/get
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets/get \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает одну страницу маркетинговых и печатных ресурсов организации. Использует Algolia для поиска по релевантности и постраничного разбиения (с общим количеством), а если Algolia недоступна, переключается на DynamoDB.
Параметры
organisationId `string` (обязательно) Идентификатор организации объекта, к которому относятся ресурсы. search `string` (необязательно) Поисковый запрос для фильтрации ресурсов по имени или тегам. brand `string` (необязательно) Бренд для фильтрации ресурсов. tag `string` (необязательно) Тег для фильтрации ресурсов. page `string` (необязательно) Номер получаемой страницы (нумерация с нуля). limit `string` (необязательно) Количество ресурсов на странице (не более 300). useCache `string` (необязательно) Если false, Algolia не используется и запрос выполняется напрямую к DynamoDB.Конечная точка
GET /api/marketing/assets
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список доступных ресурсов, загруженных через менеджер ресурсов.
Параметры
organisationId `string` (обязательно)Конечная точка
GET /api/marketing/assets/list
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets/list \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Добавляет или сохраняет ресурс.
Параметры
body `string` (обязательно) Объект JSON с данными объекта, которые нужно сохранить. organisationId `string` (обязательно) Идентификатор организации объекта, к которому относится ресурс.Конечная точка
PUT /api/marketing/assets/save
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/marketing/assets/save \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Загружает ресурс для Marketing Manager/Designer в хранилище S3.
Параметры
file `string` (необязательно) Имя загружаемого файла или ресурса. organisationId `string` (необязательно) Идентификатор организации, к которой относится ресурс.Конечная точка
POST /api/marketing/assets/upload
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/marketing/assets/upload \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список всех пользовательских страниц организации.
Параметры
organisationId `string` (обязательно) Внутренний идентификатор организации, для которой нужно вернуть пользовательские страницы.Конечная точка
GET /api/marketing/custom-pages
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/marketing/custom-pages \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Добавляет или обновляет пользовательскую страницу организации.
Параметры
organisationId `string` (обязательно) Внутренний идентификатор организации, для которой нужно вернуть пользовательские страницы. body `object` (обязательно) Данные пользовательской страницы для добавления или обновления.Конечная точка
PUT /api/marketing/custom-pages
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/marketing/custom-pages \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список всех пользовательских страниц объекта.
Параметры
facilityId `string` (обязательно) Внутренний идентификатор объекта, для которого нужно вернуть пользовательские страницы.Конечная точка
GET /api/facilities/{facilityId}/marketing/custom-pages
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/marketing/custom-pages \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает все экспортированные или отрисованные дизайны для указанного идентификатора объекта.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, выполняющего запрос. sort `string` (необязательно) Фильтр для сортировки дизайнов; поддерживаются значения 'oldest', 'newest' и 'design'.Конечная точка
GET /api/marketing/designs/{club}/exports
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/{club}/exports \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает HTML-содержимое отдельного дизайна в формате JSON для загрузки в редактор.
Параметры
id `string` (обязательно) Идентификатор получаемого дизайна.Конечная точка
GET /api/marketing/designs/get/{id}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/get/{id} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список сопоставлений полей ввода в маркетинговых и печатных дизайнах и шаблонах дизайнов
Параметры
clubId `string` (обязательно) Внутренний идентификатор объекта, выполняющего запрос. availableFeatures `string` (необязательно) Вернуть все элементы с указанными функциями brand `string` (необязательно) Фильтрует дизайны по бренду features `string` (необязательно) Фильтрует результаты по функциямКонечная точка
GET /api/marketing/designs/input-mapping/{clubId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/input-mapping/{clubId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список доступных дизайнов для указанного объекта, которые можно использовать в дизайнах (Print Designs), созданных в маркетинговом и печатном редакторе Performance Hub.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, выполняющего запрос. designAdmin `string` (необязательно) Вернуть все данные дизайнов (представление администратора; пользователь должен быть администратором). brand `string` (необязательно) Фильтрует дизайны по брендуКонечная точка
GET /api/marketing/designs/{club}/list
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/{club}/list \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Принудительно запускает отрисовку или повторную отрисовку всех миниатюр и предпросмотров дизайнов (используется в основном при изменении исходных ресурсов в S3 и т. п.)... **NOTE** Эту функцию можно вызывать только раз в X минут (и нельзя вызвать, пока отрисовка уже выполняется). Это нужно, чтобы отрисовка всех дизайнов не создавала избыточную нагрузку на наши серверы...
Конечная точка
GET /api/marketing/designs/render-all-thumbnails
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/render-all-thumbnails \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Запускает отрисовку динамического дизайна
Параметры
body `string` (обязательно) Объект JSON с данными объекта, которые нужно передать обработчику отрисовки дизайна...Конечная точка
POST /api/marketing/designs/dynamic/render-design
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/marketing/designs/dynamic/render-design \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Добавляет, сохраняет или обновляет дизайн.
Параметры
body `string` (обязательно) Объект JSON с данными объекта, которые нужно сохранить.Конечная точка
PUT /api/marketing/designs/{club}/save
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/marketing/designs/{club}/save \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает отдельный статический дизайн в формате JSON для загрузки
Параметры
id `string` (обязательно) Идентификатор получаемого статического дизайна.Конечная точка
GET /api/marketing/designs/static/get/{id}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/static/get/{id} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Добавляет, сохраняет или обновляет шаблон статического дизайна.
Параметры
body `string` (обязательно) Объект JSON с данными объекта, которые нужно сохранить.Конечная точка
PUT /api/marketing/designs/static/{club}/save
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/marketing/designs/static/{club}/save \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удаляет из системы заданную пользователем переменную.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, выполняющего запрос. body `string` (обязательно) JSON с идентификатором удаляемой переменной.Конечная точка
DELETE /api/marketing/variables/{club}/delete
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/marketing/variables/{club}/delete \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список доступных переменных для указанного объекта, которые можно использовать в дизайнах (Print Designs), созданных в маркетинговом и печатном редакторе Performance Hub.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, выполняющего запрос.Конечная точка
GET /api/marketing/variables/{club}/list
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/marketing/variables/{club}/list \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создаёт одну новую пользовательскую «переменную» для указанного объекта.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, выполняющего запрос. body `string` (обязательно) Объект JSON с новой переменной.Конечная точка
POST /api/marketing/variables/{club}/new
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/marketing/variables/{club}/new \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Добавляет, сохраняет или обновляет одну или несколько переменных дизайна в системе с помощью массива объектов.
Параметры
club `string` (обязательно) Внутренний идентификатор объекта, выполняющего запрос. body `string` (обязательно) Массив из одного или нескольких объектов JSON для добавления или обновления (позволяет сохранить несколько элементов за один запрос API).Конечная точка
PUT /api/marketing/variables/{club}/save
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/marketing/variables/{club}/save \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает манифест документации MCP для вошедшего пользователя
Используется страницей `/mcp-docs` в приложении. Возвращает URL-адрес сервера MCP, поддерживаемые заголовки аутентификации, идентификатор вызывающего пользователя и флаг администратора, а также отфильтрованный список инструментов (фильтруется так же, как `/mcp/tools/list`, поэтому на странице документации никогда не показывается инструмент, который вызывающий не может использовать).
Конечная точка
GET /api/mcp/docs-manifest
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/mcp/docs-manifest \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создать соглашение пользователя.
Параметры
body `object` (обязательно) Объект JSON с данными объекта, которые нужно сохранить.Конечная точка
POST /api/member-agreements/contracts-tna/:club
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список соглашений.
Конечная точка
GET /api/member-agreements/contracts-tna/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удалить соглашение пользователя.
Конечная точка
DELETE /api/member-agreements/contracts-tna/:club/:id
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает сведения о соглашении.
Конечная точка
GET /api/member-agreements/contracts-tna/:club/:id
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновить соглашение пользователя.
Параметры
body `object` (обязательно) Объект JSON с данными объекта, которые нужно сохранить.Конечная точка
PATCH /api/member-agreements/contracts-tna/:club/:id
Пример запроса
curl -X PATCH https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить соглашения объекта по умолчанию.
Параметры
body `object` (обязательно) Объект JSON с данными объекта, которые нужно сохранить.Конечная точка
GET /api/member-agreements/default-tna/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/default-tna/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Задать соглашение объекта по умолчанию.
Параметры
body `object` (обязательно) Объект JSON с данными объекта, которые нужно сохранить.Конечная точка
POST /api/member-agreements/default-tna/:club
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/member-agreements/default-tna/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список глобальных или региональных соглашений.
Конечная точка
GET /api/member-agreements/global-tna/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/global-tna/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список участников с соглашением.
Конечная точка
GET /api/member-agreements/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список участников объекта по сезонам для приложения тренировочного лагеря.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. season `string` (необязательно) Сезон тренировочного лагеря для фильтрации. userIds `string` (необязательно) Массив идентификаторов пользователей для фильтрации. useCache `string` (необязательно) Использовать ли кэш. isUserMemberInfo `string` (необязательно) Если включено, данные фильтруются по userIds (рекомендуется указывать только один идентификатор пользователя) и включают необходимые данные, например таблицу лидеров и настройки пользователя.Конечная точка
GET /api/members-leads/trainingcamp/club/season-members/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/members-leads/trainingcamp/club/season-members/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удаляет несколько лидов записи на тренировку.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. body `string` (обязательно)Конечная точка
DELETE /api/members-leads/workout-booking/club/leads/{club}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список лидов записи на тренировку объекта.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. all `string` (необязательно) Показывать все лиды или только предстоящие.Конечная точка
GET /api/members-leads/workout-booking/club/leads/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет лид записи на тренировку.
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ. body `string` (обязательно)Конечная точка
PUT /api/members-leads/workout-booking/club/leads/{club}
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Переключает отметку лида записи на тренировку.
Параметры
club `string` (обязательно) Внутренний ID клуба. body `string` (обязательно)Конечная точка
PATCH /api/members-leads/workout-booking/club/leads/{club}/flag
Пример запроса
curl -X PATCH https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club}/flag \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить действующие модули объекта
Возвращает все модули, доступные объекту, с учётом иерархии: настройки объекта → модули бренда → модули организации. Результаты кэшируются в Redis для повышения производительности.
Параметры
facilityId `string` (обязательно) Идентификатор объекта, для которого нужно определить модулиКонечная точка
GET /api/facilities/{facilityId}/modules
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/modules \
-H "x-api-key: YOUR_API_KEY"
Ответ
[]
Возвращает каталог модулей и конфигурацию отображения бокового меню. Возвращается полный список модулей, чтобы фронтенд сам определял видимость для каждого пользователя; ACL по-прежнему применяется на стороне сервера через `auth.checkModuleAccess()`.
Конечная точка
GET /api/modules
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/modules \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить категории уведомлений.
Конечная точка
GET /api/notification/categories
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/notification/categories \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удалить отметку о прочтении уведомления.
Конечная точка
DELETE /api/club/notification/consumed/:club
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/club/notification/consumed/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создаёт сообщение уведомления.
Конечная точка
POST /api/club/notification/consumed/:club
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/club/notification/consumed/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает массив отметок о прочтении уведомлений.
Конечная точка
GET /api/club/notification/consumed/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/club/notification/consumed/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удалить сообщение уведомления.
Конечная точка
DELETE /api/club/notification/messages/:club
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает массив сообщений уведомлений.
Конечная точка
GET /api/club/notification/messages/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет сообщение уведомления.
Конечная точка
PATCH /api/club/notification/messages/:club
Пример запроса
curl -X PATCH https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создаёт сообщение уведомления.
Параметры
body `string` (обязательно)Конечная точка
POST /api/club/notification/messages/:club
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить просмотревших уведомление по объекту.
Конечная точка
POST /api/club/notification/viewers/:club
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/club/notification/viewers/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить категории уведомлений по пользователю.
Конечная точка
GET /api/club/notification/user-categories/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/club/notification/user-categories/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создаёт сообщение уведомления.
Конечная точка
POST /api/notification/webhook
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/notification/webhook \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить открытый ключ VAPID для push-уведомлений HTML5
Возвращает открытый ключ VAPID, используемый для создания подписок на push-уведомления в браузере.
Конечная точка
GET /html5-push/vapid-public-key
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/html5-push/vapid-public-key \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Сохранить или обновить подписку на push-уведомления HTML5
Сохраняет подписку на push-уведомления в браузере для текущего пользователя.
Тело запроса
Конечная точка
POST /html5-push/subscribe
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/html5-push/subscribe \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Ответ
{}
Удалить подписку на push-уведомления HTML5
Удаляет подписку на push-уведомления в браузере для текущего пользователя.
Тело запроса
Конечная точка
POST /html5-push/unsubscribe
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/html5-push/unsubscribe \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Ответ
{}
Получить состояние начальной настройки площадки для вызывающего пользователя
Возвращает две части начальной настройки объекта — настройку (сведения + выбор продуктов, хранятся в настройках объекта) и оплату (определяется в реальном времени по записи payment-settings в биллинге SaaS), — а также персональный для вызывающего флаг `required`, по которому оболочка приложения ограничивает доступ. Только для площадок технологического стека; для площадок бизнес-стека всегда возвращается required=false.
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/onboarding/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/onboarding/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Сохранить промежуточный ход мастера начальной настройки для объекта
Сохраняет частичное состояние мастера (выбор продуктов, произвольный текст «Other», проверенные сведения о бизнесе, текущий шаг), чтобы после обновления или ухода со страницы работа продолжилась с того места, где пользователь остановился. Завершение никогда не отмечается — см. эндпоинт завершения.
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
PUT /api/onboarding/{facilityId}
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/onboarding/{facilityId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Ответ
{}
Создать предложения ИИ для предварительного заполнения мастера начальной настройки
Использует существующий контекст объекта, бренда и организации, чтобы предложить сведения об объекте (текст описания, приведённые в порядок контактные поля), рекомендуемый выбор продуктов и короткие персональные советы. Результаты кэшируются в Redis на 7 дней. Предложения носят только рекомендательный характер — клиент выводит их в редактируемую форму проверки. Всегда возвращает 200; `suggestions` равно null, если ИИ недоступен, чтобы мастер продолжал работать без него.
Параметры
facilityId `string` (обязательно)Конечная точка
POST /api/onboarding/{facilityId}/ai-prefill
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/onboarding/{facilityId}/ai-prefill \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Завершить часть настройки в начальной настройке площадки
Проверяет подтверждённый выбор и сведения, сохраняет сведения о бизнесе в записи объекта, создаёт начальный макет технического меню объекта по выбранным продуктам (если настроенный макет ещё не существует) и отмечает завершение настройки. Часть оплаты здесь намеренно НЕЛЬЗЯ завершить — она определяется в реальном времени по записи payment-settings в биллинге SaaS, поэтому обязательное требование карты нельзя обойти вызовом этого эндпоинта. Возвращает обновлённое состояние.
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
POST /api/onboarding/{facilityId}/complete
Пример запроса
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 '{}'
Ответ
{}
Запустить объявленное действие партнёрской интеграции для объекта
Запускает действие «Run integration», объявленное в записи партнёра (ph-partners.actions[]), в пределах объекта. Блокировка single-flight в Redis не допускает одновременных ручных запусков для одной и той же пары действие+объект.
Параметры
partnerId `string` (обязательно) actionId `string` (обязательно)Тело запроса
Конечная точка
POST /api/partners/{partnerId}/actions/{actionId}/run
Пример запроса
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 '{}'
Прочитать состояние выполнения действия партнёрской интеграции
Возвращает, выполняется ли сейчас ручной запуск (удерживается блокировка single-flight), а также последний запрошенный запуск, для опроса кнопкой настроек.
Параметры
partnerId `string` (обязательно) actionId `string` (обязательно) facilityId `string` (обязательно)Конечная точка
GET /api/partners/{partnerId}/actions/{actionId}/status
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/partners/{partnerId}/actions/{actionId}/status \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить все конфигурации партнёров для бренда
Параметры
brandId `string` (обязательно) Идентификатор брендаКонечная точка
GET /api/partners/brand-config/{brandId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/partners/brand-config/{brandId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
[]
Создать или обновить конфигурацию партнёра для бренда
Параметры
body `object` (обязательно)Конечная точка
PUT /api/partners/brand-config
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/partners/brand-config \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Перенести данные интеграции GymMaster в facility-partner-config
Запрашивает все объекты с полями gymMasterAPI и gymMasterDomain и создаёт или обновляет соответствующие записи facility-partner-config. Это эндпоинт для однократной миграции.
Параметры
partnerId `string` (обязательно) Идентификатор партнёра GymMaster для всех перенесённых записей dryRun `boolean` (необязательно) Если true, только сообщает, что будет перенесено, без записи в базу данныхКонечная точка
GET /api/partners/migrate-gymmaster
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/partners/migrate-gymmaster \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Включить партнёра для организации.
Параметры
partnerId `string` (обязательно) Идентификатор партнёраКонечная точка
POST /api/partners/organisation/enable
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/partners/organisation/enable \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список партнёров организации. Администраторы организации видят только партнёров своей организации.
Конечная точка
GET /api/partners/organisation
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/partners/organisation \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удалить партнёра организации.
Параметры
keyId `string` (обязательно) Идентификатор ключа партнёра организации organisationId `string` (обязательно) Идентификатор организации партнёраКонечная точка
DELETE /api/partners/organisation/{keyId}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/partners/organisation/{keyId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновить режим доступа и модули партнёра организации.
Параметры
keyId `string` (обязательно) Идентификатор ключа партнёра организации organisationId `string` (обязательно) Идентификатор организации партнёра partnerId `string` (обязательно) Идентификатор партнёра accessMode `string` (обязательно) Режим доступа партнёра modules `string` (необязательно) Список модулей для режима доступа LIMITEDКонечная точка
PUT /api/partners/organisation/update-access
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/partners/organisation/update-access \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создать отметки о посещении для объекта
Принимает массив объектов отметок о посещении и передаёт их на обработку в Partner API. Не более 25 отметок за запрос.
Тело запроса
Конечная точка
POST /api/partners/check-ins
Пример запроса
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 '{}'
Ответ
{}
Удалить конфигурацию партнёра для объекта
Удаляет конфигурацию партнёрской интеграции на объекте
Параметры
facilityId `string` (обязательно) Идентификатор объекта (club ID) partnerId `string` (обязательно) Идентификатор партнёраКонечная точка
DELETE /api/partners/facility-config/{facilityId}/{partnerId}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/partners/facility-config/{facilityId}/{partnerId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список всех конфигураций партнёров для объекта
Возвращает все партнёрские интеграции, настроенные для указанного объекта
Параметры
facilityId `string` (обязательно) Идентификатор объекта (club ID)Конечная точка
GET /api/partners/facility-config/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/partners/facility-config/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создать или обновить конфигурацию партнёра для объекта
Добавляет или обновляет конфигурацию партнёрской интеграции на объекте
Тело запроса
Конечная точка
POST /api/partners/facility-config
Пример запроса
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 '{}'
Ответ
{}
Удалить участника по memberId
Удаляет существующую запись участника по memberId.
Параметры
memberId `string` (обязательно) Уникальный идентификатор участникаКонечная точка
DELETE /api/partners/members/{memberId}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/partners/members/{memberId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновить участника по memberId
Обновляет существующую запись участника по memberId.
Параметры
memberId `string` (обязательно) Уникальный идентификатор участникаТело запроса
Конечная точка
PUT /api/partners/members/{memberId}
Пример запроса
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 '{}'
Ответ
{}
Получить состояние операции синхронизации участников
Возвращает текущее состояние асинхронной операции создания или удаления участника, запущенной через POST /api/partners/members или DELETE /api/partners/members/{memberId}. Фронтенд опрашивает этот эндпоинт вместо устаревшего опроса списка с сопоставлением по имени. NOTE Ограничение по partnerId/facilityId на уровне строк требуется правилами изоляции между клиентами, но отложено до PR с усилением защиты (этап 3a.1): operationIds — это 128-битные UUID, а маршрут уже защищён доступом к модулю `external-integrations`. Любой, у кого есть действительный operationId и административный доступ к модулю, может запросить его состояние.
Параметры
operationId `string` (обязательно) UUID, возвращённый POST/DELETEКонечная точка
GET /api/partners/members/operations/{operationId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/partners/members/operations/{operationId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создать или обновить участников для объекта
Принимает массив объектов участников и передаёт их на обработку в Partner API. Не более 25 участников за запрос.
Тело запроса
Конечная точка
POST /api/partners/members
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/partners/members \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Ответ
{}
Создать или обновить планы членства для объекта
Принимает массив объектов планов членства и передаёт их на обработку в Partner API. Не более 25 планов членства за запрос.
Тело запроса
Конечная точка
POST /api/partners/membership-plans
Пример запроса
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 '{}'
Ответ
{}
Создаёт новую роль
Параметры
body `string` (обязательно) Объект ролиКонечная точка
POST /api/roles
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/roles \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список всех ролей
Конечная точка
GET /api/roles
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/roles \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удаляет роль по идентификатору
Конечная точка
DELETE /api/roles/{roleId}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/roles/{roleId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет роль по идентификатору
Параметры
body `string` (обязательно) Объект ролиКонечная точка
PUT /api/roles/{roleId}
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/roles/{roleId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создать новую дополнительную позицию для счёта биллинга SaaS
Параметры
organisationId `string` (необязательно) Идентификатор организации, для которой создаётся дополнительная позиция body `string` (необязательно) Тело запросаКонечная точка
POST /api/saas-billing/additional-line-items
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список дополнительных позиций счёта биллинга SaaS
Параметры
organisationId `string` (обязательно) Идентификатор организацииКонечная точка
GET /api/saas-billing/additional-line-items
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список дополнительных позиций счёта биллинга SaaS объекта
Конечная точка
GET /api/clubs/{clubId}/saas-billing/additional-line-items
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/saas-billing/additional-line-items \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет дополнительную позицию счёта биллинга SaaS
Параметры
itemId `string` (обязательно) Идентификатор обновляемой дополнительной позиции body `string` (обязательно) Тело запросаКонечная точка
PUT /api/saas-billing/additional-line-items/{itemId}
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items/{itemId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Общие почасовые тарифы Cloud Agent для Your Rates
Возвращает предлагаемые размеры Cloud Agent с единой общей почасовой ценой (хостинг + ПО). Разбивка не включается. usedPlans — это SKU, которые использовались на этом объекте за последние 30 дней.
Параметры
clubID `string` (обязательно)Конечная точка
GET /api/clubs/{clubID}/saas-billing/cloud-agent-rates
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/cloud-agent-rates \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удалить импортированный ежемесячный отчёт
Параметры
club `string` (необязательно) ID клуба reportId `string` (необязательно) Идентификатор отчётаКонечная точка
DELETE /api/saas-billing/extended-access/monthly-usage-report/{reportId}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/{reportId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить последний отчёт о хранилище видеонаблюдения для объекта
Возвращает последний ежедневный снимок хранилища видеонаблюдения объекта из сохранённых журналов биллинга (за последние 31 день). Включает totalStorage, date и начисления, связанные с хранилищем.
Параметры
club `string` (обязательно) ID клубаКонечная точка
GET /api/saas-billing/extended-access/latest-cctv-storage-report/{club}
Пример запроса
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"
Ответ
{}
Возвращает счёт объекта в формате PDF за указанный период.
Параметры
club `string` (необязательно) ID клуба month `string` (необязательно) Месяц отчёта в числовом формате: 1 = январь, 2 = февраль и т. д. year `string` (необязательно) Год отчёта в числовом формате, например 2021Конечная точка
GET /api/saas-billing/extended-access/monthly-usage-report/:club/invoice
Пример запроса
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"
Ответ
{}
Набор PDF-счетов за платформу для выбранных месяцев использования в виде ZIP-архива. Массовый аналог эндпоинта .../invoice для одного счёта — используется для скачивания нескольких выбранных документов на вкладке Invoices & Receipts приложения Billing & Cost Management.
Параметры
club `string` (необязательно) ID клуба months `string` (необязательно) Месяцы использования или отчётов в формате YYYY-MM через запятую (не более 24)Конечная точка
GET /api/saas-billing/extended-access/monthly-usage-report/{club}/invoices.zip
Пример запроса
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"
Ответ
{}
Возвращает ежемесячные отчёты об использовании за несколько месяцев за один вызов. Используется для диаграммы Cost History и изменений по сравнению с предыдущим месяцем в приложении Billing & Cost Management. Для месяцев, в которых ещё нет использования, возвращается report: null (как 404 → $0 в интерфейсе у эндпоинта для одного месяца).
Параметры
club `string` (необязательно) ID клуба months `string` (необязательно) Месяцы использования в формате YYYY-MM через запятую (не более 12)Конечная точка
GET /api/saas-billing/extended-access/monthly-usage-report/{club}/batch
Пример запроса
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"
Ответ
{}
Импортировать ежемесячные отчёты для объекта.
Параметры
club `string` (необязательно) ID клубаКонечная точка
PUT /api/saas-billing/extended-access/usage-report/:club
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает отчёт CSV об использовании видеонаблюдения за последние 30 дней по всем объектам.
Конечная точка
GET /api/saas-billing/extended-access/usage-report/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Выводит все ежедневные отчёты объекта за месяц.
Параметры
club `string` (необязательно) ID клуба month `string` (необязательно) Месяц отчёта в числовом формате: 1 = январь, 2 = февраль и т. д. year `string` (необязательно) Год отчёта в числовом формате, например 2021Конечная точка
GET /api/saas-billing/extended-access/monthly-usage-report/{club}/daily-reports
Пример запроса
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"
Ответ
{}
Возвращает список импортированных ежемесячных отчётов для администратора
Параметры
organisationId `string` (обязательно) Идентификатор организацииКонечная точка
GET /api/saas-billing/extended-access/usage-report/imported
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/imported \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает отчёт CSV об использовании видеонаблюдения за последние 30 дней по всем объектам.
Параметры
club `string` (необязательно) ID клуба month `string` (необязательно) Месяц отчёта в числовом формате: 1 = январь, 2 = февраль и т. д. year `string` (необязательно) Год отчёта в числовом формате, например 2021Конечная точка
GET /api/saas-billing/extended-access/monthly-usage-report/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает периодический отчёт об использовании для объекта.
Параметры
club `string` (необязательно) ID клуба periodStart `string` (необязательно) Начало периода в формате YYYY-MM-DD periodEnd `string` (необязательно) Конец периода в формате YYYY-MM-DDКонечная точка
GET /api/saas-billing/extended-access/periodical-usage-report/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/periodical-usage-report/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Набор PDF-документов биллинга в одном ZIP-архиве с документами разных типов: счета за платформу (по месяцам использования), квитанции о пополнении кошелька SaaS и квитанции о пополнении Model Router. Массовый аналог эндпоинтов invoices.zip / receipts.zip для отдельных типов, используемый на общей вкладке Invoices & Receipts. Каждый запрошенный месяц или идентификатор должен соответствовать документу, принадлежащему объекту, — любое неверное значение приводит к ошибке для всего набора.
Параметры
clubID `string` (обязательно) invoiceMonths `string` (необязательно) Месяцы использования в формате YYYY-MM через запятую walletIds `string` (необязательно) Идентификаторы транзакций пополнения кошелька SaaS через запятую aiIds `string` (необязательно) Идентификаторы транзакций пополнения Model Router через запятуюКонечная точка
GET /api/clubs/{clubID}/saas-billing/documents.zip
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/documents.zip \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Добавить примечание к ежемесячной записи
Параметры
recordID `string` (необязательно) Идентификатор получаемой записи note `string` (необязательно) Примечание, добавляемое к записиКонечная точка
POST /api/saas-billing/monthly-records/{recordID}/notes
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{recordID}/notes \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список ежемесячных записей биллинга SaaS
Параметры
club `string` (необязательно) Идентификатор получаемого объекта month `string` (необязательно) Месяц биллинга в формате YYYY-MMКонечная точка
GET /api/saas-billing/monthly-records/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список ежемесячных записей биллинга SaaS, по которым платёж не прошёл или требуется 3D Secure
Параметры
clubID `string` (необязательно) Идентификатор объекта, для которого нужно получить ежемесячные записи с неудачными платежамиКонечная точка
GET /api/clubs/:clubID/saas-billing/flagged
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/:clubID/saas-billing/flagged \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает ВСЕ ежемесячные записи биллинга SaaS (реестр счетов) объекта, начиная с последнего месяца биллинга. Аналог доступного только администраторам эндпоинта paginate-monthly-records в пределах объекта — используется для вкладки «Invoices & Receipts» для клиентов в приложении Billing & Cost Management.
Параметры
clubID `string` (необязательно) Идентификатор объекта, для которого нужно вывести ежемесячные записиКонечная точка
GET /api/clubs/{clubID}/saas-billing/monthly-records
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/monthly-records \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список ежемесячных записей биллинга SaaS
Параметры
organisationId `string` (необязательно) Идентификатор организации month `string` (необязательно) Месяц в формате MM. year `string` (необязательно) Год в формате YYYY. filters `string` (необязательно) Фильтры строки запроса, сформированные таблицей данных. order `string` (необязательно) Строка запроса, сформированная таблицей данных.Конечная точка
GET /api/saas-billing/monthly-records
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/monthly-records \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Повторить неудачные платежи для объекта
Параметры
clubID `string` (необязательно) Идентификатор объекта, для которого нужно получить ежемесячные записи с неудачными платежамиКонечная точка
PUT /api/clubs/:clubID/saas-billing/retry-failed-payments
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/:clubID/saas-billing/retry-failed-payments \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновить ежемесячную запись
Параметры
recordID `string` (необязательно) Идентификатор получаемой записи status `string` (необязательно) Новое состояние записиКонечная точка
PUT /api/saas-billing/monthly-records/{recordID}
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{recordID} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Проверяет, прошли ли платежи, и обновляет состояние записи
Параметры
clubID `string` (необязательно) recordID `string` (необязательно) Идентификатор получаемой записиКонечная точка
PUT /api/clubs/{clubID}/saas-billing/monthly-records/{recordID}/validate
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/monthly-records/{recordID}/validate \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Добавить способ оплаты для объекта.
Параметры
clubID `string` (необязательно)Конечная точка
POST /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Синхронизирует способы оплаты объекта со Stripe.
Параметры
clubID `string` (необязательно)Конечная точка
PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает бюджет расходов объекта, а также вычисленные значения с начала месяца и прогноз.
Параметры
clubID `string` (необязательно)Конечная точка
GET /api/clubs/{clubID}/saas-billing/budget
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/budget \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создать, обновить или очистить бюджет расходов объекта.
Параметры
clubID `string` (необязательно) body `object` (необязательно)Конечная точка
PUT /api/clubs/{clubID}/saas-billing/budget
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/budget \
-H "x-api-key: YOUR_API_KEY"
Удалить способ оплаты из настроек оплаты объекта.
Параметры
clubID `string` (необязательно) paymentMethodID `string` (необязательно)Конечная точка
DELETE /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}
Пример запроса
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"
Ответ
{}
Получить настройки оплаты объекта.
Параметры
clubID `string` (необязательно)Конечная точка
GET /api/clubs/{clubID}/saas-billing/payment-settings
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновить настройки оплаты объекта.
Параметры
clubID `string` (необязательно) lockedOut `boolean` (необязательно) Будет ли доступ объекта к системе заблокирован. pauseBilling `boolean` (необязательно) Будет ли приостановлено автоматическое выставление счетов для объекта. customerID `string` (необязательно) Если указать это значение, будет обновлён идентификатор клиента Stripe для объекта. deleteSourceID `string` (необязательно) Удалять ли исходного клиента из Stripe.Конечная точка
PUT /api/clubs/{clubID}/saas-billing/payment-settings
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить самый ранний месяц, за который выставлялись счета, по всем объектам.
Параметры
clubID `string` (необязательно)Конечная точка
GET /api/saas-billing/payment-settings/earliest-billed-month
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/payment-settings/earliest-billed-month \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список учётных записей, которые могут снять блокировку по биллингу для объекта, по уровням: сначала пользователи с модулем биллинга, а администраторы организации — только если таких пользователей нет.
Параметры
clubID `string` (обязательно)Конечная точка
GET /api/clubs/{clubID}/saas-billing/lockout-contacts
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/lockout-contacts \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Постранично перебрать все объекты в системе и вернуть идентификаторы клиентов для каждого объекта.
Параметры
clubID `string` (необязательно) organisationId `string` (необязательно) Идентификатор организацииКонечная точка
GET /api/saas-billing/payment-settings/customer-ids
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/payment-settings/customer-ids \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Задать основной способ оплаты для объекта.
Параметры
clubID `string` (необязательно)Конечная точка
PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}/primary
Пример запроса
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"
Ответ
{}
Обновить профиль биллинга объекта.
Параметры
clubID `string` (необязательно) invoiceEntity `string` (необязательно) billingContacts `string` (необязательно) Список UUID контактов KYC ccEmails `string` (необязательно) Список адресов электронной почты для копии счетовКонечная точка
PUT /api/clubs/{clubID}/saas-billing/payment-settings/billing-profile
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/billing-profile \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновить способ оплаты для объекта.
Параметры
clubID `string` (необязательно) cardID `string` (необязательно)Конечная точка
PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{cardID}
Пример запроса
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"
Ответ
{}
Возвращает разбивку по объектам всех применимых начислений за продукты и дополнительных позиций для экспорта в CSV. Учитывает иерархию переопределений (глобальные, региональные, на уровне объекта) для каждого объекта, к которому у пользователя есть доступ.
Параметры
organisationId `string` (обязательно) Идентификатор организации для ACLКонечная точка
GET /api/saas-billing/charges-config/export
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/charges-config/export \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает конфигурацию начислений для указанной цели
Параметры
clubId `string` (необязательно) Идентификатор объекта, для которого нужно получить конфигурацию начисленийКонечная точка
GET /api/saas-billing/charges-config/{clubId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/charges-config/{clubId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Сводка биллинга организации, к которой относится этот объект: фактический плательщик, запланированное изменение консолидации и может ли вызывающий пользователь управлять переключателем консолидации.
Параметры
clubID `string` (обязательно)Конечная точка
GET /api/clubs/{clubID}/saas-billing/org/summary
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/org/summary \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Консолидированные ежемесячные записи организации (выписки) с разбивкой по объектам, сначала новые. Пусто, пока не будет закрыт первый консолидированный месяц организации.
Параметры
clubID `string` (обязательно)Конечная точка
GET /api/clubs/{clubID}/saas-billing/org/monthly-records
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/org/monthly-records \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Сводка предоплаченного кошелька: баланс, списания за использование с начала месяца, конфигурация автопополнения, способ оплаты.
Параметры
clubID `string` (обязательно)Конечная точка
GET /api/clubs/{clubID}/saas-billing/wallet
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Реестр операций кошелька, сначала новые. Кошельки уровня организации содержат строки всех объектов (в каждой указан clubID объекта-источника).
Параметры
clubID `string` (обязательно) limit `string` (необязательно) types `string` (необязательно) Типы транзакций через запятую from `string` (необязательно) to `string` (необязательно) cursor `string` (необязательно) nextCursor с предыдущей страницыКонечная точка
GET /api/clubs/{clubID}/saas-billing/wallet/transactions
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/transactions \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Фирменная PDF-квитанция по одной транзакции кошелька (пополнения и кредиты).
Параметры
clubID `string` (обязательно) txId `string` (обязательно)Конечная точка
GET /api/clubs/{clubID}/saas-billing/wallet/transactions/{txId}/receipt.pdf
Пример запроса
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"
Ответ
{}
Набор фирменных PDF-квитанций по выбранным транзакциям пополнения кошелька в виде ZIP-архива. Каждый идентификатор должен соответствовать пополнению (картой или по счёту) кошелька этого объекта — для списаний за использование и корректировок квитанций нет, и они отклоняются.
Параметры
clubID `string` (обязательно) ids `string` (обязательно) ID транзакций через запятую (не более 50)Конечная точка
GET /api/clubs/{clubID}/saas-billing/wallet/transactions/receipts.zip
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/transactions/receipts.zip \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Списать средства с сохранённой карты биллинга SaaS, чтобы пополнить предоплаченный баланс. Если требуется 3DS, возвращает requires_action + clientSecret.
Параметры
clubID `string` (обязательно) body `object` (необязательно)Конечная точка
POST /api/clubs/{clubID}/saas-billing/wallet/topup
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/topup \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Завершить пополнение кошелька после того, как приложение выполнит аутентификацию 3DS. Идемпотентно.
Параметры
clubID `string` (обязательно)Конечная точка
POST /api/clubs/{clubID}/saas-billing/wallet/topup/confirm
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/topup/confirm \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновить правило автопополнения объекта (хранится в строке переопределения его профиля биллинга).
Параметры
clubID `string` (обязательно) body `object` (необязательно)Конечная точка
PATCH /api/clubs/{clubID}/saas-billing/wallet/auto-topup
Пример запроса
curl -X PATCH https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/auto-topup \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Счета на пополнение кошелька этого объекта (способ оплаты по счёту), сначала новые.
Параметры
clubID `string` (обязательно)Конечная точка
GET /api/clubs/{clubID}/saas-billing/wallet/invoices
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/invoices \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Запросить счёт на пополнение с оплатой по референсу (только для способа оплаты по счёту). Для кошелька может быть не более одного неоплаченного счёта — повторный запрос возвращает существующий счёт с alreadyPending=true.
Параметры
clubID `string` (обязательно) body `string` (необязательно) { amountCents: number }Конечная точка
POST /api/clubs/{clubID}/saas-billing/wallet/topup-invoice
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/topup-invoice \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список заказов объекта.
Параметры
facilityID `string` (необязательно)Конечная точка
GET /api/store/facilities/:facilityID/orders
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/store/facilities/:facilityID/orders \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает список продуктов, доступных объекту.
Параметры
clubID `string` (обязательно) search `string` (необязательно) limit `string` (необязательно) page `string` (необязательно) Номер страницы для разбиения на страницы (начиная с 1).Конечная точка
GET /api/store/clubs/{clubID}/products
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/store/clubs/{clubID}/products \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список записей Stripe объекта.
Параметры
club `string` (обязательно) fromDate `string` (необязательно) Метка времени Unix toDate `string` (необязательно) Метка времени Unix socketID `string` (обязательно) Уникальный идентификатор запроса сокетаКонечная точка
GET /api/club/{club}/stripe/records
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/records \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Отменить платёжное намерение (payment intent)
Параметры
club `string` (обязательно) paymentIntent `string` (необязательно)Конечная точка
GET /api/club/{club}/stripe/payment-intent/:paymentIntent/cancel
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/payment-intent/:paymentIntent/cancel \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создать Stripe Account Session для встраиваемых компонентов
Создаёт Stripe Account Session для подключённой учётной записи. Возвращает client_secret, который используется для инициализации встраиваемых компонентов Connect (споры, выплаты, управление учётной записью, документы).
Тело запроса
Конечная точка
POST /api/stripe/account-session
Пример запроса
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 '{}'
Ответ
{}
Создаёт одноразовую ссылку на страницу KYC Stripe для подключённой учётной записи.
Параметры
club `string` (обязательно)Конечная точка
GET /api/club/{club}/stripe/generate-kyc-token
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/generate-kyc-token \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получает сведения о подключённой учётной записи Stripe в рамках процесса KYC.
Параметры
club `string` (обязательно)Конечная точка
GET /api/club/{club}/stripe/connect-account-details
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/connect-account-details \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Возвращает всю историю обращений по идентификатору объекта
Параметры
club `string` (обязательно) Внутренний ID клуба, к которому нужно получить доступ.Конечная точка
GET /api/ticketing/clubtickets/{club}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/ticketing/clubtickets/{club} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получает список отделов
Конечная точка
GET /api/ticketing/departments
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/ticketing/departments \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получает сведения об одном обращении
Параметры
user `string` (обязательно) Адрес электронной почты пользователя. ticketNumber `string` (обязательно) 6-значный идентификатор обращения, к которому нужно получить доступ. club `string` (обязательно) Идентификатор выбранного объекта.Конечная точка
GET /api/ticketing/ticket-details/:ticketNumber/:club
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/ticketing/ticket-details/:ticketNumber/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получает список тем
Конечная точка
GET /api/ticketing/topics
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/ticketing/topics \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получает все обращения, созданные текущим вошедшим пользователем. Значение берётся из заголовков, передаваемых нашей службой Google SSO.
Параметры
user `string` (обязательно) Адрес электронной почты пользователя, который сейчас вошёл в системуКонечная точка
GET /api/ticketing/usertickets
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/ticketing/usertickets \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создаёт новое обращение
Параметры
club `string` (обязательно) Идентификатор выбранного объекта.Конечная точка
POST /api/ticketing/clubticket/:club
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/ticketing/clubticket/:club \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создаёт новое обращение
Параметры
subject `string` (обязательно) Тема обращения. message `string` (обязательно) Полный текст обращения.Конечная точка
POST /api/ticketing/userticket
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/ticketing/userticket \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создаёт ответ на существующее обращение
Параметры
subject `string` (обязательно) Тема обращения. message `string` (обязательно) Полный текст обращения.Конечная точка
POST /api/ticketing/user-reply
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/ticketing/user-reply \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получает настройки пользователя
Конечная точка
GET /api/user-preferences
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/user-preferences \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновляет настройки пользователя
Параметры
body `string` (обязательно)Конечная точка
PUT /api/user-preferences
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/user-preferences \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Изменить пароль пользователя
Изменяет пароль пользователя. Требует подтверждения одноразовым кодом (OTP), если у пользователя указан номер телефона, или добавления номера телефона, если его нет.
Тело запроса
Конечная точка
POST /api/user/change-password
Пример запроса
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 '{}'
Ответ
{}
Проверить состояние 2FA пользователя
Возвращает, включена ли 2FA для пользователя и требует ли 2FA какая-либо из его ролей
Конечная точка
GET /api/user/check-2fa-status
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/user/check-2fa-status \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список организаций, объектов и регионов, к которым у пользователя есть доступ для указанного модуля.
Параметры
moduleId `string` (обязательно)Конечная точка
POST /api/user/me/modules/{moduleId}/org-access
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/user/me/modules/{moduleId}/org-access \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создаёт «запрос на привязку» от конечного пользователя с просьбой «присоединиться» к объекту.
Параметры
body `string` (обязательно) JSON-объект нового клуба для добавления в систему.Конечная точка
POST /api/user/linkclub
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/user/linkclub \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список всех объектов, к которым у пользователя есть доступ.
Конечная точка
GET /api/user/listauthorised
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/user/listauthorised \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Отправить OTP по двум каналам (электронная почта + SMS)
Отправляет коды OTP одновременно на адрес электронной почты пользователя и на указанный номер телефона. Используется для операций с повышенными требованиями к безопасности, например при первом подтверждении номера телефона. Этот эндпоинт только отправляет OTP и не изменяет данные пользователя.
Тело запроса
Конечная точка
POST /api/user/send-dual-otp
Пример запроса
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 '{}'
Ответ
{}
Отправить OTP на номер телефона или адрес электронной почты
Отправляет код OTP на номер телефона пользователя (SMS) или адрес электронной почты для подтверждения
Тело запроса
Конечная точка
POST /api/user/send-otp
Пример запроса
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 '{}'
Ответ
{}
Проверить, есть ли у пользователя действующий доступ к конфиденциальным страницам
Возвращает, есть ли у пользователя действующий сеанс с подтверждением OTP для доступа к конфиденциальным страницам
Конечная точка
GET /api/user/sensitive-page-access
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/user/sensitive-page-access \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Проверить OTP и предоставить доступ к конфиденциальным страницам
Проверяет код OTP и, если он действителен, предоставляет доступ к конфиденциальным страницам на 1 час
Тело запроса
Конечная точка
POST /api/user/sensitive-page-access/verify
Пример запроса
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 '{}'
Ответ
{}
Отозвать доступ к конфиденциальным страницам (выйти из конфиденциальных страниц)
Отзывает текущий сеанс доступа пользователя к конфиденциальным страницам
Конечная точка
POST /api/user/sensitive-page-access/revoke
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/user/sensitive-page-access/revoke \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Включить или выключить 2FA
Включает или выключает двухфакторную аутентификацию для пользователя. Требуется номер телефона и подтверждение OTP.
Тело запроса
Конечная точка
POST /api/user/toggle-2fa
Пример запроса
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 '{}'
Ответ
{}
Обновить собственный профиль пользователя
Позволяет пользователю обновить сведения своего профиля (имя, фамилию, номер телефона). При первом добавлении номера телефона требуется подтверждение OTP по двум каналам (коды по электронной почте и SMS). При изменении существующего номера телефона требуется только OTP по электронной почте.
Тело запроса
Конечная точка
PATCH /api/user/update-profile
Пример запроса
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 '{}'
Ответ
{}
Получить значок по URL-адресу.
Конечная точка
GET /api/website-icon
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/website-icon \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список шаблонов записей хранилища паролей
Параметры
organisationId `string` (необязательно) Контекст организации для проверки доступа к модулямКонечная точка
GET /api/vault/templates
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/vault/templates \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список видимых записей хранилища паролей
Параметры
organisationId `string` (обязательно) scope `string` (необязательно)Конечная точка
GET /api/vault/entries
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/vault/entries \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создать запись хранилища паролей
Конечная точка
POST /api/vault/entries
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/vault/entries \
-H "x-api-key: YOUR_API_KEY"
Получить запись хранилища паролей без раскрытия секретных значений
Параметры
entryId `string` (обязательно) organisationId `string` (обязательно)Конечная точка
GET /api/vault/entries/{entryId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обновить запись хранилища паролей
Конечная точка
PUT /api/vault/entries/{entryId}
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удалить запись хранилища паролей
Конечная точка
DELETE /api/vault/entries/{entryId}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Раскрыть выбранные скрытые или секретные поля
Конечная точка
POST /api/vault/entries/{entryId}/reveal
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/vault/entries/{entryId}/reveal \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список сводок папок хранилища паролей
Конечная точка
GET /api/vault/folders
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/vault/folders \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список записей с кодами аутентификатора
Конечная точка
GET /api/vault/authenticator
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/vault/authenticator \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список зарегистрированных типов узлов рабочих процессов
Конечная точка
GET /api/workflow-engine/node-types
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/node-types \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Получить представление часов работы объекта, используемое блоками рабочих процессов
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/workflow-engine/facility-hours/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/facility-hours/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Предварительный просмотр отправителя писем рабочих процессов с брендингом объекта
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/workflow-engine/email-branding/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/email-branding/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список ресурсов объекта для настройки триггеров
Параметры
facilityId `string` (обязательно) resourceType `string` (обязательно)Конечная точка
GET /api/workflow-engine/resources/{facilityId}/{resourceType}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/resources/{facilityId}/{resourceType} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список рабочих процессов объекта
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/workflow-engine/workflows/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создать черновик рабочего процесса из непустого графа
Редактор хранит новый рабочий процесс локально, пока в нём нет хотя бы одного блока, поэтому при первом сохранении процесс создаётся вместе с графом за один вызов. Тело без `nodes` отклоняется, а не сохраняется.
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
POST /api/workflow-engine/workflows/{facilityId}
Пример запроса
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 '{}'
Ответ
{}
Список учётных данных, которые могут использовать рабочие процессы объекта
Возвращает собственные учётные данные объекта, а также общие учётные данные его бренда или организации. Секреты никогда не возвращаются; `hasValue` лишь сообщает, что секрет сохранён.
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/workflow-engine/credentials/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создать учётные данные рабочего процесса
Уровень области задаётся в `scopeType`; идентификаторы бренда и организации определяются по объекту, а не принимаются от вызывающего.
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
POST /api/workflow-engine/credentials/{facilityId}
Пример запроса
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 '{}'
Настройки рабочих процессов на уровне объекта (получатели уведомлений о сбоях)
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/workflow-engine/facility-settings/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/facility-settings/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Сохранить получателей уведомлений о сбоях на уровне объекта
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
PUT /api/workflow-engine/facility-settings/{facilityId}
Пример запроса
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 '{}'
Ответ
{}
Заменить учётные данные рабочего процесса
Пустой `secret` сохраняет текущий секрет, поэтому учётные данные можно переименовать, не вводя секрет заново. Прочитать секрет обратно невозможно.
Параметры
facilityId `string` (обязательно) credentialId `string` (обязательно)Конечная точка
PUT /api/workflow-engine/credentials/{facilityId}/{credentialId}
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId}/{credentialId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Удалить учётные данные рабочего процесса
Узлы, ссылающиеся на них, при следующем вызове завершатся с отказом, в том числе в уже опубликованных рабочих процессах, так как снимок хранит только ссылку.
Параметры
facilityId `string` (обязательно) credentialId `string` (обязательно)Конечная точка
DELETE /api/workflow-engine/credentials/{facilityId}/{credentialId}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId}/{credentialId} \
-H "x-api-key: YOUR_API_KEY"
Получить URL-адрес веб-хука триггера рабочего процесса
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно) nodeId `string` (обязательно)Конечная точка
GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Сменить URL-адрес веб-хука триггера рабочего процесса
Предыдущий URL-адрес сразу становится недействительным.
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно) nodeId `string` (обязательно)Конечная точка
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook/rotate
Пример запроса
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"
Ответ
{}
Получить рабочий процесс по идентификатору
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно)Конечная точка
GET /api/workflow-engine/workflows/{facilityId}/{workflowId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создать или обновить черновик рабочего процесса
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно)Тело запроса
Конечная точка
PUT /api/workflow-engine/workflows/{facilityId}/{workflowId}
Пример запроса
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 '{}'
Ответ
{}
Обновить название и (или) описание рабочего процесса
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно)Тело запроса
Конечная точка
PATCH /api/workflow-engine/workflows/{facilityId}/{workflowId}
Пример запроса
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 '{}'
Ответ
{}
Удалить рабочий процесс и его версии
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно)Конечная точка
DELETE /api/workflow-engine/workflows/{facilityId}/{workflowId}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Дублировать рабочий процесс в новый неактивный черновик
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно)Конечная точка
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/duplicate
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/duplicate \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Опубликовать текущий черновик (неизменяемый снимок версии)
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно)Тело запроса
Конечная точка
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/publish
Пример запроса
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 '{}'
Ответ
{}
Сбросить черновик до последней опубликованной версии
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно)Конечная точка
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/discard
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/discard \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Включить или выключить рабочий процесс
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно)Тело запроса
Конечная точка
PATCH /api/workflow-engine/workflows/{facilityId}/{workflowId}/active
Пример запроса
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 '{}'
Ответ
{}
Создать или изменить граф рабочего процесса с помощью ИИ
Параметры
facilityId `string` (обязательно)Тело запроса
Конечная точка
POST /api/workflow-engine/generate/{facilityId}
Пример запроса
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 '{}'
Ответ
{}
Список моделей, на которых может работать узел Agent на этом объекте
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/workflow-engine/agent-models/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-models/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список инструментов MCP, которые узел Agent может подключить на этом объекте
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/workflow-engine/agent-tools/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-tools/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Поиск по сохранённым диалогам Agent этого объекта (привязки по ключу диалога)
Параметры
facilityId `string` (обязательно) deviceId `string` (необязательно) Ограничить поиск диалогами одного устройства Agent (deviceId, настроенный в узле) q `string` (необязательно) Поиск подстроки без учёта регистра в ключе диалога, идентификаторе сеанса или имени устройства limit `integer` (необязательно) offset `integer` (необязательно)Конечная точка
GET /api/workflow-engine/agent-conversations/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-conversations/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Поиск по диалогам, хранящимся на самом устройстве Agent объекта
Выводит собственные сеансы устройства (диалоги на боковой панели интерфейса Agent), чтобы рабочий процесс мог продолжить существующий диалог с его контекстом. Историей владеет устройство; если на объекте несколько устройств, `deviceId` выбирает нужное (устройство, настроенное в узле). Устройство недоступно → 502.
Параметры
facilityId `string` (обязательно) deviceId `string` (необязательно) Устройство Agent, настроенное в узле; не указывайте, чтобы использовать единственное устройство объекта q `string` (необязательно) Поиск подстроки без учёта регистра в заголовке или идентификаторе сеанса limit `integer` (необязательно) offset `integer` (необязательно)Конечная точка
GET /api/workflow-engine/agent-device-sessions/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-device-sessions/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Поиск досок в канбане устройства Agent объекта
Предоставляет данные для выбора Board ID в блоке Agent: Kanban. Поиск подстроки без учёта регистра в названии или slug доски; `current` — slug активной доски устройства, чтобы выбор задачи по умолчанию ограничивался ею. Если на объекте несколько устройств, `deviceId` выбирает нужное. Устройство недоступно → 502.
Параметры
facilityId `string` (обязательно) deviceId `string` (необязательно) Устройство Agent, настроенное в узле; не указывайте, чтобы использовать единственное устройство объекта q `string` (необязательно) Поиск подстроки без учёта регистра в названии или slug доски limit `integer` (необязательно) offset `integer` (необязательно)Конечная точка
GET /api/workflow-engine/kanban-boards/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/kanban-boards/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Поиск задач одной доски в канбане устройства Agent объекта
Предоставляет данные для выбора Task ID в блоке Agent: Kanban. Поиск подстроки без учёта регистра в идентификаторе, заголовке или тексте задачи; задачи хранятся по доскам (поиска по всем доскам на устройстве нет), поэтому `board` ограничивает выборку — не указывайте его, чтобы использовать активную доску устройства. Устройство недоступно → 502.
Параметры
facilityId `string` (обязательно) deviceId `string` (необязательно) Устройство Agent, настроенное в узле; не указывайте, чтобы использовать единственное устройство объекта board `string` (необязательно) Slug доски для вывода; не указывайте, чтобы использовать активную доску устройства q `string` (необязательно) Поиск подстроки без учёта регистра в идентификаторе, заголовке или тексте задачи limit `integer` (необязательно) offset `integer` (необязательно)Конечная точка
GET /api/workflow-engine/kanban-tasks/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/kanban-tasks/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список отобранных шаблонов рабочих процессов, отфильтрованных для этого объекта
Параметры
facilityId `string` (обязательно)Конечная точка
GET /api/workflow-engine/templates/{facilityId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/templates/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создать из шаблона фрагмент графа для открытого черновика
Параметры
facilityId `string` (обязательно) templateId `string` (обязательно)Конечная точка
POST /api/workflow-engine/templates/{facilityId}/{templateId}
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/templates/{facilityId}/{templateId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Контекст выбора области для страницы администрирования шаблонов (административные уровни)
Конечная точка
GET /api/workflow-engine/template-admin/context
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/context \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Список шаблонов, которые может администрировать вызывающий, с флагами разрешений
Конечная точка
GET /api/workflow-engine/template-admin
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Создать шаблон (административные уровни)
Тело запроса
Конечная точка
POST /api/workflow-engine/template-admin
Пример запроса
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 '{}'
Сведения о шаблоне, включая граф, для редактора администратора
Конечная точка
GET /api/workflow-engine/template-admin/{templateId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Заменить шаблон (организация-владелец)
Конечная точка
PUT /api/workflow-engine/template-admin/{templateId}
Пример запроса
curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Мягко удалить шаблон (организация-владелец)
Конечная точка
DELETE /api/workflow-engine/template-admin/{templateId}
Пример запроса
curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Дублировать видимый шаблон в целевую область, доступную вызывающему
Тело запроса
Конечная точка
POST /api/workflow-engine/template-admin/{templateId}/duplicate
Пример запроса
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 '{}'
Запустить опубликованный граф рабочего процесса по ручному триггеру
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно)Тело запроса
Конечная точка
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/run
Пример запроса
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 '{}'
Ответ
{}
Протестировать сохранённый черновик без публикации
Выполняет текущий граф черновика и записывает результат с `mode: test` и без `versionId`. Публикация, флаг активности и `publishedVersionId` никогда не затрагиваются. По умолчанию побочные эффекты имитируются; для `sideEffects: live` дополнительно требуется `confirmLiveSideEffects: true`.
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно)Тело запроса
Конечная точка
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/test
Пример запроса
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 '{}'
Ответ
{}
Протестировать один разрешённый узел рабочего процесса
Выполняет один узел из сохранённого черновика, который можно тестировать отдельно. Значения переменных можно взять из записанных шагов запуска. Для изменяющих HTTP-методов требуется явное подтверждение.
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно)Тело запроса
Конечная точка
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/test-node
Пример запроса
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 '{}'
Ответ
{}
Список последних запусков рабочего процесса
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно)Конечная точка
GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Прочитать один запуск (состояние + упорядоченные шаги)
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно) executionId `string` (обязательно)Конечная точка
GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Отменить ожидающую задержку (Delay), на которой стоит запуск
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно) executionId `string` (обязательно)Конечная точка
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/cancel
Пример запроса
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/cancel \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Повторить завершённый запуск по записанной полезной нагрузке триггера
`mode: published` повторно выполняет ту же версию, к которой был привязан исходный запуск, с реальными побочными эффектами. `mode: draft-test` повторно выполняет текущий черновик как имитационный тест. Запуск, полезная нагрузка триггера которого была усечена при записи, повторить нельзя.
Параметры
facilityId `string` (обязательно) workflowId `string` (обязательно) executionId `string` (обязательно)Тело запроса
Конечная точка
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/retry
Пример запроса
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 '{}'
Ответ
{}
Индексированный поиск рабочих процессов, содержащих тип узла
Параметры
nodeType `string` (обязательно) facilityId `string` (необязательно) organisationId `string` (необязательно)Конечная точка
GET /api/workflow-engine/master-view/{nodeType}
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/master-view/{nodeType} \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Прокси перенаправления OAuth под собственным брендом (Connected Apps)
Публичное перенаправление 302 без аутентификации, которое передаёт обратный вызов поставщика OAuth в обратный вызов аутентификации вышестоящей платформы инструментов с сохранением строки запроса. Позволяет приложениям OAuth, принадлежащим PH, регистрировать URI перенаправления performancehub.co, чтобы домен вышестоящего поставщика никогда не появлялся в адресной строке (нужно для будущего проекта собственных приложений OAuth; безвредно при управляемой аутентификации).
Конечная точка
GET /guest/connected-apps/oauth-callback
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/oauth-callback \
-H "x-api-key: YOUR_API_KEY"
Страница завершения цепочки подключения (Connected Apps)
Облегчённая страница «можно закрыть это окно» для вкладки OAuth, в которой выполнялась цепочка подключения. Передаёт результат (подключённый набор или toolkit + идентификаторы новых учётных записей либо toolkit с ошибкой) обратно на вкладку каталога через window.opener.postMessage того же источника; если связь с открывшей вкладкой потеряна, выполняется переход по глубокой ссылке в приложение ph-ai-agent, воспроизводящий страницу в приложении. Только информационная — не содержит секретов и ничего не записывает.
Параметры
connected `string` (необязательно) Идентификатор набора или slug toolkit, подключение которого завершено (успешный случай). accounts `string` (необязательно) Идентификаторы подключённых учётных записей, созданных цепочкой, через запятую. connectError `string` (необязательно) Slug toolkit, шаг которого завершился ошибкой (случай ошибки).Конечная точка
GET /guest/connected-apps/finish
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/finish \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}
Обратный вызов цепочки подключения набора (Connected Apps)
Промежуточный обратный вызов OAuth для подключения набора в один клик. Подписанный JWT состояния (HS256, TTL 30 мин) содержит { clubID, deviceId, suite, toolkits, step, caids }: учётные записи подключаются к этому одному устройству агента, а в caids накапливаются идентификаторы учётных записей, созданных на каждом шаге (итоговое перенаправление в приложение передаёт их, чтобы каталог мог предложить подписать новые учётные записи). Отмечает toolkit шага как подключённый, а затем перенаправляет (302) на Connect Link следующего toolkit или на страницу приложения ph-ai-agent (с глубокой ссылкой на агента), когда набор подключён полностью. Подключение одного toolkit проходит через тот же обработчик как набор из одного toolkit.
Параметры
state `string` (обязательно) Подписанный JWT состояния цепочки подключения.Конечная точка
GET /guest/connected-apps/connect-next
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/connect-next \
-H "x-api-key: YOUR_API_KEY"
Отправить письмо для настройки пароля
Проверяет подписанную ссылку из приветственного письма, отправляет письмо для сброса пароля и показывает страницу подтверждения. Аутентификация не требуется.
Параметры
email `string` (обязательно) Адрес электронной почты пользователя sig `string` (обязательно) Подпись HMAC для адреса электронной почтыКонечная точка
GET /guest/setup-password
Пример запроса
curl -X GET https://portal.hub.gymsystems.co/guest/setup-password \
-H "x-api-key: YOUR_API_KEY"
Ответ
{}