Mobile API — API, используемое приложением Mobifitness, FitnessKit для клиентов, МойФитнес, а также подходящее для использования на сайтах.
Для работы требуется настройка службы web-service.
Получение анкеты по ID:
curl -H "Content-Type: application/json" -X POST -d '{"Request_id":"e79a79be-f18a-4b65-812b-6da2a49ea477", "ClubId": "1", "Method": "getClientById", "Parameters": {"ClientID": "17"}}' 'https://test.club-is.ru/api/mobile?USER_ID=30&USER_HASH=f77d565e02169dad60bca51ea19bd53cf1a041d6'
Получение списка посещений:
curl -H "Content-Type: application/json" -X POST -d '{"Request_id":"e79a79be-f18a-4b65-812b-6da2a49ea478", "ClubId": "1", "Method": "getVisitHistory", "Parameters": {"ClientID": "17"}}' 'https://test.club-is.ru/api/mobile?USER_ID=30&USER_HASH=f77d565e02169dad60bca51ea19bd53cf1a041d6'
Список тренеров для предзаписи:
curl -H "Content-Type: application/json" -X POST -d '{"Request_id":"79a79be-f18a-4b65-812b-6da2a49ea479", "ClubId": "1", "Method": "getAvailableTrainers", "Parameters": {"ServiceID": null, "StartDate": "2020-02-18 00:00", "EndDate": "2020-03-02 23:59"}}' 'https://test.club-is.ru/api/mobile?USER_ID=30&USER_HASH=f77d565e02169dad60bca51ea19bd53cf1a041d6'
Доступные для предзаписи услуги:
curl -H "Content-Type: application/json" -X POST -d '{"Request_id":"532279a79be-f18a-4b65-812b-6da2a49ea479", "ClubId": "1", "Method": "getAvailableServices", "Parameters": {"ClientID": 16}}' 'https://test.club-is.ru/api/mobile?USER_ID=30&USER_HASH=f77d565e02169dad60bca51ea19bd53cf1a041d6'
Расписание:
curl -H "Content-Type: application/json" -X POST -d '{"Request_id":"a29a79be-f18a-4b65-812b-6da2a49ea477", "ClubId": "1", "Method": "getSchedule", "Parameters": {"StartDate": "2025-01-01", "EndDate": "2025-01-31"}}' 'https://test.club-is.ru/api/mobile?USER_ID=30&USER_HASH=f77d565e02169dad60bca51ea19bd53cf1a041d6'
Загрузка клуба:
curl -H "Content-Type: application/json" -X POST -d '{"Request_id":"a29a79be-f18a-4665-812b-6da2a49ea477", "ClubId": "1", "Method": "getLoadClub", "Parameters": {"ClubId": 1}}' 'https://test.club-is.ru/api/mobile?USER_ID=30&USER_HASH=f77d565e02169dad60bca51ea19bd53cf1a041d6'
Покупка:
curl -H "Content-Type: application/json" -X POST -d '{"Request_id":"a29b79fe-d18a-4665-812b-6da2a49ea478", "ClubId": "1", "Method": "BuyAndPay", "Parameters": {"ClientID": "437850", "IDTransaction": "bank_transaction_ids", "BuyList": [{"Id": "k36", "Type": "Buy"}]}}' 'https://test.club-is.ru/api/mobile?USER_ID=30&USER_HASH=f77d565e02169dad60bca51ea19bd53cf1a041d6'
Предварительная запись:
curl -H "Content-Type: application/json" -X POST -d '{"Request_id":"b29b79ce-e18a-4665-812b-6da2a49ea348", "ClubId": "1", "Method": "setAppointment", "Parameters": {"ClientID": "17", "DateTime": "2025-02-27T18:00:00", "RoomID": "8", "Duration": 60, "ServiceID": "68", "EmployeeID": "0", "Reserve": true}}' 'https://test.club-is.ru/api/mobile?USER_ID=30&USER_HASH=f77d565e02169dad60bca51ea19bd53cf1a041d6'
$apiproto = 'https'; // Протокол
$apiaddr = 'test.club-is.ru'; // IP или адрес домена с API
$apiport = ''; // Порт
// Параметры авторизации
$user_id = 30;
$user_hash = 'f77d565e02169dad60bca51ea19bd53cf1a041d6';
$link = $apiproto . '://' . $apiaddr . '/api/mobile?USER_ID=' . $user_id . '&USER_HASH=' . $user_hash;
// Параметры запроса
$request_id = uniqid(); // генерируем уникальный UUID для запроса
$data = array(
'Request_id' => $request_id,
'ClubId' => 1,
'Method' => 'getClientById',
'Parameters' => array(
'ClientID' => 17
)
);
$curl = curl_init(); // Используем cURL
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $link);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
$out = curl_exec($curl); // Создаем запрос к API
echo 'link:<br>';
echo $link;
echo '<hr>data:<br>';
echo json_encode($data);
echo '<hr>response:<br>';
echo $out; // Выводим результат
Mobifitness или разработчикам сайта нужно предоставить:
- Полный путь до API. Это путь до службы web-service. Путь указывается в формате
http://ip:порт/api/mobile или https://ip:порт/api/mobile в зависимости от выбранного протокола http или https. IP должен быть внешним, белым; на роутере нужно пробросить порт до сервера со службой.
- Данные для прохождения авторизации API. Параметры пользователя ClubIS
USER_ID и USER_HASH находятся на вкладке «Прочее» в модуле «Администратор → Сотрудники → Свойства сотрудника». От этого пользователя в базе будут создаваться данные. Лучше создать отдельного пользователя для этого и правой кнопкой задать ему пароль (на его основе будет сгенерирован USER_HASH и соответственно будет меняться при его смене).
- Перечень наименований клубов (структурных единиц) и их уникальный идентификатор (UID) в клубной учётной системе. Наименование и ID из справочника «Клубы» («Администратор → Справочники»), если наименование всего одно — его id равен 1.
Для основных сценариев (расписание, запись на групповые, пополнение депозита, редактирование анкеты, заморозка, просмотр информации по клиенту) отдельные опции обычно не нужны. Но базу данных и телефонные номера нужно подготовить к работе с приложением — объединить дубликаты анкет с одинаковыми номерами, нормализовать телефонные номера.
Настройки ниже находятся в Администратор → Интеграции → Mobile API.
Для продажи в приложении дополнительно нужны признаки на самих позициях:
- у цен шаблонов — Продавать в мобильном приложении;
- у позиций прайса — Онлайн продажа.


Список тренеров в приложении строится из сотрудников с опцией Проводит групповые программы.

Если у тренеров должны отображаться фото, профиль пользователя должен быть связан с анкетой, и в анкете должно быть фото. Фотографии обязательно хранятся в базе данных.
Все опции на этой странице влияют на ответы Mobile API и на то, что видит клиент в приложении (FitnessKit, Mobifitness и др.) или на сайте, подключённом к API.
- Включить создание контрактов и договоров через Mobile API — разрешает покупку и создание контрактов из приложения. Без этой опции продление и покупка шаблонов через API недоступны.
- При покупке через Mobile API создавать контракт в статусе «Заблокирован» — купленный в приложении контракт создаётся заблокированным (например, пока клиент не подпишет договор на киоске или на бумаге) и не действует до разблокировки в Менеджере. Контракт, который создаётся при регистрации клиента в приложении, этой опцией не затрагивается.
- Юр. лицо — юридическое лицо по умолчанию для договоров, создаваемых через Mobile API (если в шаблоне не указано иное).
- для договоров (если не указано в шаблоне) — всегда используется выбранное юр. лицо для договора (пункт зафиксирован включённым).
- для оплат депозита (всегда) — то же юр. лицо подставляется во все оплаты депозита через API, даже если у клиента на депозите указано другое.
- для оплат договоров (всегда) — то же юр. лицо подставляется во все оплаты договоров через API.
- Задать юр. лица по умолчанию по клубам (если приложение передает ClubId) — таблица соответствия клуба и юр. лица, когда приложение передаёт идентификатор клуба.

- Фильтровать услуги, шаблоны и сотрудников по клубу, в котором клиент уже имеет контракт — в прайсе и связанных списках клиенту показывают только то, что относится к клубу его действующего контракта.
- Фильтр по умолчанию, когда у клиента нет контрактов… — список клубов для фильтрации, если у клиента ещё нет контрактов. Если клубы не выбраны, для шаблонов используется клуб из анкеты.
Группа Регистрация нового клиента:
- Клуб — клуб, который подставляется в анкету при регистрации через приложение (если не передан иначе).
- Создавать событие в анкете при регистрации — при регистрации создаётся событие выбранного типа.
- Тип события — какой тип события записывать в анкету.
- Рекламный источник — какой рекламный источник проставлять новому клиенту.
- Прямая оплата контрактов (не использовать депозит) — когда оплату контракта можно провести картой/эквайрингом напрямую, без пополнения депозита. Значения:
- Никогда — только через депозит;
- Всегда — всегда прямая оплата;
- Только для клиентов без депозита;
- Для клиентов без депозита или при нулевом остатке;
- Для клиентов без депозита или при недостаточном для оплаты остатке;
- Если юр. лицо депозита совпадает с юр. лицом по умолчанию;
- Если настроена ККМ для юр. лица услуги/шаблона.
Если новым клиентам нужна покупка без депозита, выберите любое значение, кроме Никогда. Режим на стороне приложения (Mobifitness / FitnessKit) тоже нужно согласовать с вендором приложения.
- Фильтровать шаблоны для продления по шаблону, который клиент приобретал ранее — в списке продления остаются подходящие шаблоны с учётом истории клиента, а не все доступные к продаже.
- Автоматически сдвигать дату открытия контракта — при продлении дата открытия нового контракта ставится после окончания текущего; если выключено — обычно текущая дата.
- Отдавать только активные контракты и блоки — в приложении видны только открытый контракт и непросроченные неиспользованные блоки из него.
- Разрешить повторное продление контракта — позволяет продлевать контракт повторно в ситуациях, где по умолчанию повторное продление запрещено.
- Разрешить покупку шаблонов с автоплатежами через BuyAndPay — разрешает покупку тарифов с рекуррентными платежами через соответствующий метод оплаты в приложении.

- Автоматически включать новым контактам согласие на рассылку: СМС / Email — при создании контакта через API сразу включаются выбранные согласия на рассылку.
- Не передавать ссылку на конференцию Zoom в Mobile API — в ответах расписания не отдаётся ссылка Zoom.
- Не передавать тренера в расписании в Mobile API — в расписании не передаётся тренер занятия.
- Для расписания всегда отображать кнопку записи (проверять только параметр Проводится предзапись) — кнопка записи показывается, если занятие допускает предзапись; остальные ограничения записи на стороне API для отображения кнопки не учитываются.
- Не отображать родственников — связанные анкеты родственников не отдаются в приложение.
- Группировать ГП по расписаниям, вместо группировки по направлениям — в расписании групповые программы группируются по расписаниям, а не по направлениям.
- Подтверждать предзапись без одобрения заявки — предзапись из приложения сразу подтверждается, без отдельного одобрения заявки.
- Слот для записи (минут) — длительность слота времени при записи (по умолчанию 15 минут).
- Отдавать данные по свободным датам (дней) — на сколько дней вперёд отдавать информацию о свободных датах для записи (по умолчанию 14).
- Тип оплаты — тип оплаты, который ставится в операциях через Mobile API (прямая оплата, внесение на депозит и т.п.), если не задано иначе. Оплаты с депозита обычно идут типом «депозит».
- Эквайер — эквайер по умолчанию для онлайн-оплат через API.
Группа Скидки — скидка, которую API может учитывать при показе цен онлайн:
- таблица Прайс / Контракты и Процент / Сумма — скидка на позиции прайса и на контракты (шаблоны);
- Отображать цену в расписании с учётом этой скидки — в расписании цена показывается уже со скидкой.
Группа Модификация данных:
- Не выдавать остаток для категорий блоков — для выбранных категорий блоков в приложении не показывается остаток занятий/услуг.
Группа Депозит:
- Отображать депозитный счет в списке лицевых счетов — депозит виден клиенту в списке счетов.
- Делегировать депозит: Ответственному / Доверенному лицу — депозит клиента доступен указанным связанным лицам.
- Запретить пополнение депозита по выбранным юр. лицам — пополнение депозита через API для выбранных юр. лиц недоступно.
Далее на странице:
- Отображать все типы оплат в истории лицевого счета — в истории показываются все типы оплат, а не только часть.
- Отображать бонусный счет в списке лицевых счетов — бонусный счёт виден в списке счетов.
- Разрешить оплату с бонусного счета — можно оплачивать с бонусного счёта.
- Название для бонусного счета — как бонусный счёт называется в приложении (по умолчанию «Бонусный счет»).
- Отображать номер депозита и бонусного счёта в списке лицевых счетов — рядом с счетами показываются их номера.
- Отображать дату чека в истории лицевого счета из даты продажи, а не оплаты — в истории дата берётся из даты продажи.
- Не отображать позиции прайса с нулевой ценой в чеке — нулевые позиции не попадают в отображаемый чек.
- Принудительно пополнять депозит при прямой оплате и списывать с него — даже при «прямой» оплате сначала пополняется депозит, затем с него списывается. Значения: Никогда, Всегда, Только для оплат контракта, Только для оплат услуг.
- Не отображать в долге позиции прайса без признака онлайн-продажи — в долге клиента скрываются позиции без Онлайн продажа.
- Обратный порядок байт для номера карты — меняет порядок байт при передаче номера карты (нужно для части считывателей/форматов).
- Генерировать номер карты при создании новых контрактов, если его нет — при создании контракта через API, если номера карты ещё нет, он создаётся автоматически.
- Имя сотрудника — в каком виде отдавать имя сотрудника в API: Имя пользователя; Фамилия, имя из анкеты; Фамилия, имя, отчество из анкеты; Имя, фамилия из анкеты.
В приложении клиент выбирает тариф и позиции прайса по уровням папок. Как строятся уровни для шаблонов (членств), задают опции ниже.
- Режим отображения прайса
- Упрощенный — для позиций прайса отдаётся укороченное дерево (группа / подгруппа). Для шаблонов поведение задаёт опция группировки ниже.
- Полный — для позиций прайса строится полное дерево групп. Для шаблонов полное дерево (общая папка → шаблон → при необходимости интервал → цена) используется, если группировка шаблонов в одну папку выключена.
- Группировать цены шаблонов в группу «Абонементы», вместо группировки по шаблонам (настраивается при режиме Упрощенный):
- включено — все цены шаблонов попадают в одну общую папку с названием из поля Название группы шаблонов (например, «Карты», «ТАРИФЫ», «Абонементы»). Внутри папки сразу список тарифов: отдельной папки на каждый шаблон («СТАРТ», «ЗОЛОТАЯ» и т.д.) нет.
- выключено — появляется уровень с названием шаблона; внутри него — интервалы/цены этого шаблона.
- Название группы шаблонов — подпись общей папки для шаблонов (по умолчанию «Абонементы»). Имеет смысл и при полной схеме дерева, и при включённой группировке.
- Двойная группировка цен шаблонов в группу «Абонементы» — дополнительный уровень той же общей папки; используется для корректной сортировки в некоторых приложениях (Mobifitness). Включается только вместе с группировкой в одну папку.
- Заменять название шаблона на название типа шаблона — в названиях и папках вместо названия конкретного шаблона показывается название его типа.
Если группировка в одну папку включена:
- общая папка (Название группы шаблонов);
- внутри — список тарифов без папки на каждый шаблон.
Если группировка выключена (в том числе чтобы заработало полное дерево шаблонов в режиме Полный):
- общая папка с Названием группы шаблонов (если она показывается);
- папка с названием шаблона;
- при заполненном названии интервала в шаблоне — ещё один уровень с этим названием;
- сама цена (тариф).
Если у интервала шаблона название не задано, промежуточная пустая папка не создаётся: после названия шаблона сразу идёт тариф. Чтобы показать отдельный уровень (например, «1 месяц», «3 месяца»), заполните название интервала в шаблоне.
- Создавать контракт при регистрации — какой шаблон/цена контракта (если задано) создаётся клиенту при регистрации через приложение.
Группа Лист ожидания — уведомления листа ожидания выполняются через триггеры. Настройка оператора, текста и автозаписи доступна в разделе триггеров (см. подсказку на странице настроек).
- Добавлять код страны к номеру телефона клиента — в ответах API к номеру добавляется код страны.
Ограничения частоты SMS с кодом подтверждения на один номер. Подробнее — в разделе Отправка SMS-кода подтверждения.
- Минимальный интервал между SMS
- Максимум SMS за час
- Максимум SMS за сутки
Если на площадке доступны опции шкафчиков:
- Включить шкафчики в Mobile API — методы и данные по шкафчикам отдаются в API.
- Лимит шкафчиков на клиента — сколько шкафчиков может быть у одного клиента.
На рабочей станции, на которой настроен web-service, нужно подключить и настроить ККМ для нужного юрлица. Этого достаточно, чтобы оплаты начали пробиваться по ККМ.
Также существуют дополнительные ключи, например если оплаты пробиваются по кассе облачной на стороне Mobifitness и их не нужно проводить по ККМ повторно. Ключи создаются на компьютере, где работает служба, в разделе реестра Компьютер\HKEY_CURRENT_USER\Software\ClubIS LLC\ClubIS Fitness\web-service.
Строковый параметр deposit_fiscalize (true или false) — для включения/отключения пробития чека по депозиту на стороне программы.
Параметр DWORD deposit_legal_id — юрлицо в созданное внесение депозита, необязательно. Если не указано — ставится юрлицо из договора.
Параметр DWORD deposit_paytype_id — тип оплаты, необязательно. Если не указано — «Карта».
Параметры типа оплаты и юрлица также выведены в интерфейсе Администратор → Интеграции → Mobile API → Тип оплаты и Юр. лицо.
По умолчанию чеки и контракт оплачиваются с депозита типом оплаты «депозит»; для всего остального используется указанный тип оплаты (прямая оплата, внесение депозита).


Метод sendVerificationSms отправляет клиенту SMS с кодом для входа или подтверждения номера (сайт клуба, виджет, клиентское приложение через Mobile API).
Чтобы не тратить баланс SMS и не допускать массовую отправку на один номер, ClubIS ограничивает частоту запросов на один номер телефона. По умолчанию:
- не чаще одного SMS в 60 секунд;
- не более 5 SMS за час;
- не более 15 SMS за сутки.
Лимиты можно изменить в Администратор → Интеграции → Mobile API в группе Лимит SMS-кодов подтверждения:
- Минимальный интервал между SMS
- Максимум SMS за час
- Максимум SMS за сутки
Если лимит превышен, метод не отправляет новое сообщение и возвращает ошибку 6003. В ответе в Parameters приходит RetryAfterSeconds — через сколько секунд можно снова запросить код. Клиент (сайт, виджет, приложение) должен показать паузу и не слать повторные запросы раньше этого срока.
Те же ограничения действуют при запросе SMS-кода через Client API.
Полное описание метода: OpenAPI Mobile API.
PUSH-сообщения