API-доступ (ключи для сайта и программ)
Для руководителя, администратора, тренера и программиста: зачем нужны ключи, как выдать доступ в кабинете и как подключить внешнюю систему к /api/v1/.
Что такое API-доступ простыми словами
API — способ, при котором ваша программа (сайт, 1С, приложение) сама запрашивает данные FightCRM по правилам, без того чтобы сотрудник каждый раз входил в кабинет. Это удобно для синхронизации клиентов, выгрузки расписания на сайт, автоматической отметки из сторонней системы и т.п.
API не заменяет обычную работу тренера в расписании и не открывает клиентам лишнего — доступ задаёт администратор отдельным ключом с выбранными правами.
Руководителю клуба
Решение «подключать ли API» — управленческое: нужен ли обмен с сайтом, бухгалтерией, мобильным приложением или партнёрской системой.
- В тарифе должен быть модуль «API-доступ» — см. [**«Тариф FightCRM»**](${DOCS_TARIF}) и [**«Модули в подписке»**](${DOCS_MODULI}). Без модуля ключи создать нельзя (старые настройки можно просматривать).
- Назначьте одного ответственного администратора с правом на интеграции; секреты ключей не рассылайте в мессенджерах — только через защищённый канал IT.
- Для каждой интеграции лучше отдельный ключ (сайт, 1С, тестовый стенд) — так проще отключить одну систему, не ломая остальные.
- Ограничения по филиалам в ключе касаются структуры и сотрудников, не списка всех клиентов клуба — это важно при аудите доступа.
Администратору: как выдать ключ
Путь: Настройки → «Интеграции» → вкладка «API-доступ» (/club/settings/integrations?sub=api). Нужно право «Управление API» (в матрице ролей — блок интеграций; см. [**«Права и доступ»**](${DOCS_PRAVA})).
- Новый ключ — имя (например «Сайт клуба»), матрица Доступ (чтение / создание / изменение / удаление по разделам), при необходимости ограничение по клубу (филиалы, направления, сотрудники — каждый фильтр включается отдельно), срок действия.
- Секрет (`fcrm_live_…`) показывается один раз при создании или обновлении секрета — скопируйте и передайте программисту; в кабинете хранится только префикс для узнавания ключа.
- Обновить секрет — старый ключ сразу перестаёт работать (если подозреваете утечку). Удалить — ключ исчезает из списка и перестаёт приниматься API.
- В таблице ключей колонка «Доступ» показывает краткую сводку; полная настройка — при редактировании.
Тренеру
Раздел API-доступ в настройках не нужен для ежедневной работы: расписание, клиенты и отметки по-прежнему в меню кабинета.
- Пункта «Интеграции → API» у вас может не быть — это нормально, если роль не включает управление интеграциями.
- Если клуб подключил сайт или приложение через API, ваши экраны не меняются — данные просто синхронизируются «за кадром».
- Вопросы «почему на сайте не то расписание» или «кто выдал доступ программе» — к администратору или руководителю, не к поддержке Wazzup/Novofon.
Программисту и IT-специалисту
Внешний интерфейс FightCRM — REST API версии v1. Запросы выполняются с сервера интеграции (не из браузера пользователя).
- Базовый адрес: `https://ваш-клуб.fightcrm.ru/api/v1/` (тот же хост, что и кабинет клуба; `ваш-клуб` — ваш поддомен).
- Авторизация: заголовок `Authorization: Bearer fcrm_live_…` — секрет выдаёт администратор клуба. Не используйте cookie сессии сотрудника и не передавайте ключ в URL.
- Права ключа задаются наборами (клиенты, расписание, структура и т.д.) и CRUD в кабинете — на сервере проверяется каждый запрос; ответ 403 значит «ключ есть, но права на операцию нет».
- Ограничения по клубу (филиал, зал, направление, сотрудник) фильтруют соответствующие разделы; доступ к клиентам по ключу — на весь клуб, если явно не сужен другими правилами продукта.
- Срок ключа: после `expiresAt` — 401; отозванный или удалённый ключ — тоже 401 (без детализации причины).
- Ошибки в JSON: поля `code`, `message`, `correlation_id` — последнее передавайте в поддержку при разборе инцидента.
- Спецификация: OpenAPI — `GET /docs/api/openapi-v1.yaml` (или `docs/openapi-v1.yaml`; `npm run generate:openapi-v1`). Changelog: `docs/api-v1-changelog.md`. Postman: `docs/postman/fightcrm-v1.json`.
- Tools Bridge (AI-агенты): `GET /api/agent/v1/tools` и `POST /api/agent/v1/tools/invoke`. OpenAPI: `GET /docs/api/openapi-agent-tools.yaml`. Руководства: `docs/tools-bridge-guide.md`, `docs/external-agent-recipe.md`. Матрица: `docs/integrator-bundle-matrix.md`; sandbox: `docs/integrator-sandbox-playbook.md`; ошибки: `docs/integrator-error-catalog.md`.
- Исходящие webhooks (v1b): push-события на HTTPS URL партнёра (клиент, абонемент, оплата, отметка). Настройка — Настройки → Интеграции → Webhooks; журнал доставок — `GET /api/v1/integrations/webhooks/deliveries` (bundle `api.integrations.webhooks.read`). См. `docs/integrator-guide.md`.
- Лимиты запросов и защита от перебора включены на стороне платформы — проектируйте интеграцию с повторами и кэшем, не опрашивайте API каждую секунду без нужды.
Типовые сценарии
- Сайт клуба — чтение расписания и групп; запись клиента или заявка — только если ключу выдано создание в нужных разделах.
- 1С / учёт — чтение клиентов и продаж; изменение — отдельным ключом с минимально нужными правами.
- Тестовый стенд — отдельный ключ с коротким сроком и узким доступом; после отладки — удалить или обновить секрет.
Безопасность (кратко)
- Ключ = пароль программы: храните в переменных окружения сервера, не в коде на GitHub и не в мобильном приложении пользователя.
- Выдавайте минимум прав: только чтение, если интеграции не нужно ничего менять.
- При увольнении подрядчика или смене CMS — обновите секрет или удалите ключ.