Вебхуки (Webhooks)

Вебхуки — это механизм уведомлений, который позволяет вашему приложению получать события из нашего сервиса в реальном времени.

Когда происходит событие, на которое вы подписаны, наш сервис отправляет HTTP POST-запрос на ваш URL.


Как работают вебхуки

  1. Подписка на события Вы создаёте конфигурацию вебхука в нашем API и указываете:

    • URL для получения событий.
    • Список событий, на которые хотите подписаться.
    • secret для генерации подписи.
  2. Отправка событий Когда в сервисе происходит событие, например event.created или user.updated, мы формируем payload и отправляем POST-запрос на ваш URL.

  3. Проверка подписи Чтобы убедиться, что событие действительно пришло от нашего сервиса, используйте HMAC SHA256 с вашим секретом:

    $signature = hash_hmac('sha256', json_encode($payload), $webhookSecret);
    if ($signature === $_SERVER['X-Webhook-Signature']) {
    // Подтверждено
    }

    Подпись приходит в заголовке:

    X-Webhook-Signature: 7c585f9ed17a19186082700a511a153d7738a20045eb3a0ce04b0fa0d6186329

Управление подпиской

Чтобы начать получать события, нужно создать Webhook-подписку — конфигурацию, в которой указываются:

  • URL, на который будут отправляться события;
  • список событий, на которые необходимо получать уведомления;
  • секретный ключ для формирования подписи X-Webhook-Signature.

На один OAuth-клиент заводится одна подписка. После создания её можно получить, изменить или удалить — полный набор методов с телами запросов, схемами ответов и кодами ошибок описан ниже, в разделе Webhook-подписки (конфигурация):

  • POST /api/external/v2/webhooks — создание подписки
  • GET /api/external/v2/webhooks — получение текущих подписок
  • PATCH /api/external/v2/webhooks — обновление параметров
  • DELETE /api/external/v2/webhooks — удаление подписки

Доступные Webhook события

Ниже перечислены все события, которые могут отправляться через вебхуки, а также пример payload.

Посещения

Клиент посетил занятие (contact.admission.created)

Событие отправляется при посещении занятия клиентом.

Пример payload

{
    "id": "evt_9e1df883-5463-4319-9ea1-83f570db333b",
    "event": "contact.admission.created",
    "timestamp": 1789539114,
    "data": {
        "admission_id": 31122142,
        "event_id": 124533,
        "contact_id": 16
    }
}
    

Клиента сняли с занятия (contact.admission.deleted)

Событие отправляется когда клиента снимают с занятия.

Пример payload

{
    "id": "evt_c40af5bb-5670-4b44-a6a6-bb40f8d29a48",
    "event": "contact.admission.deleted",
    "timestamp": 1789539114,
    "data": {
        "admission_id": 31122142,
        "event_id": 124533,
        "contact_id": 16
    }
}
    

Клиенты

Клиент создан (contact.created)

Событие отправляется при создании нового клиента.

Пример payload

{
    "id": "evt_b8c210d0-8313-4975-a330-fd6b266e435d",
    "event": "contact.created",
    "timestamp": 1789539114,
    "data": {
        "contact_id": 16
    }
}
    

Клиент удален (contact.deleted)

Событие отправляется при удалении клиента.

Пример payload

{
    "id": "evt_08626a96-6f21-4017-a572-e65a448605d6",
    "event": "contact.deleted",
    "timestamp": 1789539114,
    "data": {
        "contact_id": 16
    }
}
    

Клиент изменен (contact.updated)

Событие отправляется при редактировании данных клиента.

Пример payload

{
    "id": "evt_a9fa1e20-a9af-4c69-8318-419b5c2b5f06",
    "event": "contact.updated",
    "timestamp": 1789539114,
    "data": {
        "contact_id": 16
    }
}
    

Записи

Клиент записан на занятие (contact.listing.created)

Событие отправляется при записи клиента на занятие.

Пример payload

{
    "id": "evt_651ee8cb-1803-4511-87f3-f2ec8723db3a",
    "event": "contact.listing.created",
    "timestamp": 1789539114,
    "data": {
        "listing_id": 312142,
        "event_id": 124533,
        "contact_id": 16
    }
}
    

Запись на занятие отменена (contact.listing.deleted)

Событие отправляется при отмене записи на занятие.

Пример payload

{
    "id": "evt_45d1854a-d9fb-4768-ba6b-9b2f989145c0",
    "event": "contact.listing.deleted",
    "timestamp": 1789539114,
    "data": {
        "listing_id": 312142,
        "event_id": 124533,
        "contact_id": 16
    }
}
    

Абонементы

Клиенту оформили абонемент (contact.pass.created)

Событие отправляется когда клиенту оформляют абонемент.

Пример payload

{
    "id": "evt_23d8b0f9-1d18-460d-9ec5-3e30148e1f12",
    "event": "contact.pass.created",
    "timestamp": 1789539114,
    "data": {
        "pass_contact_id": 312142,
        "pass_id": 124533,
        "contact_id": 16
    }
}
    

Лист ожидания

Клиент добавлен в лист ожидания (contact.queue.created)

Событие отправляется когда клиент добавляется в лист ожидания.

Пример payload

{
    "id": "evt_e5de114e-04cb-4e96-bc31-24c8a6d89f85",
    "event": "contact.queue.created",
    "timestamp": 1789539114,
    "data": {
        "queue_id": 312142,
        "event_id": 124533,
        "contact_id": 16
    }
}
    

Клиент удален из листа ожидания (contact.queue.deleted)

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

Пример payload

{
    "id": "evt_155e9c16-5c76-444f-aa3b-442a2c6114da",
    "event": "contact.queue.deleted",
    "timestamp": 1789539114,
    "data": {
        "queue_id": 312142,
        "event_id": 124533,
        "contact_id": 16
    }
}
    

Отзывы

Клиент оставил отзыв (contact.review.created)

Событие отправляется когда клиент оставляет любой отзыв.

Пример payload

{
    "id": "evt_97cf7181-70a9-4a36-a725-fb9cbe85c72d",
    "event": "contact.review.created",
    "timestamp": 1789539114,
    "data": {
        "review_id": 312142,
        "event_id": 124533,
        "contact_id": 16
    }
}
    

Занятия

Занятие создано (event.created)

Событие отправляется при создании занятия.

Пример payload

{
    "id": "evt_1f6dc091-2799-48eb-8610-b4049c0a6bb0",
    "event": "event.created",
    "timestamp": 1789539114,
    "data": {
        "event_id": 12345
    }
}
    

Занятие удалено (event.deleted)

Событие отправляется при удалении занятия.

Пример payload

{
    "id": "evt_f73e080e-832e-4216-bc97-15a1c0e77950",
    "event": "event.deleted",
    "timestamp": 1789539114,
    "data": {
        "event_id": 12345
    }
}
    

Занятие изменено (event.updated)

Событие отправляется при редактировании занятия.

Пример payload

{
    "id": "evt_84e84245-448d-4695-aed9-e08b59869a15",
    "event": "event.updated",
    "timestamp": 1789539114,
    "data": {
        "event_id": 12345
    }
}
    

Пакетная отправка событий (Batch Dispatch)

Наш сервис поддерживает пакетную отправку вебхуков, чтобы уменьшить количество HTTP-запросов и повысить эффективность доставки уведомлений. Для активации пакетной отправки событий обратитесь в службу поддержки.


Что это такое

Пакетная отправка объединяет несколько событий для одного вебхука в один HTTP-запрос. Например, если за короткий промежуток времени произошло несколько событий для одного клиента (OAuth), они будут объединены в один payload и отправлены вместе.


Преимущества

  • Меньше сетевых запросов и нагрузки на ваш сервер.
  • Уменьшение риска потерянных событий при коротких пиковых нагрузках.
  • Возможность агрегировать события по клиенту или по типу события.

Как работает

  1. Буферизация событий Все события, подходящие под конфигурацию вебхука, помещаются в очередь/буфер на сервере.

  2. Отложенная отправка После указанного промежутка времени (5 секунд по умолчанию, конфигурация через службу поддержки) все события из буфера для одного клиента объединяются.

  3. Формирование payload Формируется массив событий с их данными:

{
    "id": "evt_912bc242-3fb7-4ef5-99f2-48cc1712dc7b",
    "event": "batch",
    "timestamp": 1765886568,
    "data": {
    "count": 2,
    "events": [
        {
            "event": "admission.created",
            "data": {
                "event_id": 186762
            },
            "ts": 1765886561
        },
        {
            "event": "listing.created",
            "data": {
                "event_id": 186762
            },
            "ts": 1765886562
        }
    ]
}
  1. Отправка на URL вебхука HTTP POST-запрос отправляется на ваш URL, с тем же механизмом подписи, что и при одиночных событиях (X-Webhook-Signature).

Авторизация

Запрос авторизации

Если используется виджет

Конфигурация кнопки
<div id="listok-oauth-widget"
     data-oauth-url="https://yourdomain.listokcrm.ru/oauth/authorize"
     data-client-id="9e3db8c5-02f5-4fa8-a8cf-d19fa69f1ec5"
     data-redirect-uri="https://yourapp.com"
     data-button-text="Авторизоваться через ListOk CRM"
     data-button-classes="btn custom-btn-class">
</div>

<script src="https://yourdomain.listokcrm.ru/assets/public/js/listok-oauth-widget.js"></script>

Если используется переход по ссылке

https://yourdomain.listokcrm.ru/oauth/authorize?client_id=9e3db2d2-4054-43bb-bdd4-554d55da27a0&redirect_uri=http%3A%2F%2Fsomesite.test&response_type=code&scope&state=qwerqwerqwerqwerqwerqwerqwerqwerqwerqwer

Обмен кода на токен

curl --request POST \
    "https://yourdomain.listokcrm.ru/oauth/token" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"grant_type\": \"authorization_code\",
    \"client_id\": \"your_app_client_id\",
    \"client_secret\": \"your_app_client_secret\",
    \"redirect_uri\": \"your_app_redirect_uri\",
    \"code\": \"code\"
}"

Обновление токена

curl --request POST \
    "https://yourdomain.listokcrm.ru/oauth/token" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"grant_type\": \"refresh_token\",
    \"client_id\": \"your_app_client_id\",
    \"client_secret\": \"your_app_client_secret\",
    \"refresh_token\": \"your_refresh_token\",
    \"scope\": \"\"
}"

Changelog

Просмотр

## v2.33.17 (04.08.2026)
### ✨ Новое
- В методах "Получить список платежей" (GET /payments) и "Получить список платежей клиента" (GET /contacts/{contact_id}/payments) добавлен параметр фильтрации `direction` со значениями `income` (доход) и `outcome` (расход)

## v2.32.17 (03.08.2026)
### 🐞 Исправления
- В методе "Получить список платежей клиента" (GET /contacts/{contact_id}/payments) теперь возвращаются платежи обоих направлений — ранее расходные платежи не попадали в выгрузку

## v2.31.17 (26.07.2026)
### ✨ Новое
- В методе "Получить список клиентов" (GET /contacts) добавлена возможность подгружать абонементы клиента прямо в объект клиента через параметр `includes=passes`

## v2.30.17 (22.07.2026)
### ✨ Новое
- Добавлен метод "Заморозить абонемент клиента" (POST /contacts/{contact_id}/passes/{pass_contact_id}/freeze) с параметрами `planned_freeze_at` (дата начала заморозки, по умолчанию — сразу) и `freeze_days` (срок в днях, по умолчанию — максимально доступный). Дата разморозки рассчитывается автоматически
- Добавлен метод "Разморозить абонемент клиента" (POST /contacts/{contact_id}/passes/{pass_contact_id}/unfreeze)
- Добавлен метод "Отменить запланированную заморозку абонемента" (DELETE /contacts/{contact_id}/passes/{pass_contact_id}/planned-freeze)

## v2.29.17 (16.07.2026)
### ✨ Новое
- В методах "Получить данные занятия" (GET /events/{event_id}) и "Получить данные о всех занятиях" (GET /events) добавлен include `cancelled_listings` — отменённые записи клиентов с датой отмены (`cancelled_at`), источником отмены (`cancel_source`: `client` — клиент, `admin` — сотрудник), признаком автоматической отмены (`is_auto_cancelled`) и причиной (`reason_skip_id`). Статусы «пришёл» и «не пришёл» доступны через `admissions` и поле `is_missed` в `listings`

## v2.26.17 (16.07.2026)
### ✨ Новое
- В методе "Получить список клиентов" (GET /contacts) добавлен параметр фильтрации `since_id` для выборки только клиентов с ID больше указанного — удобно для получения новых зарегистрировавшихся клиентов без перехода на последние страницы (сохраните максимальный полученный ID и передайте его при следующем запросе)

## v2.25.17 (16.07.2026)
### 🛠 Улучшения
- В методе "Получить список абонементов клиента" параметр status стал необязательным — если он не передан, возвращаются все абонементы клиента независимо от статуса
- В методе "Получить список абонементов клиента" разрешена фильтрация сразу по нескольким статусам (через запятую `status=active,frozen` или массивом `status[]=active&status[]=frozen`)

## v2.24.17 (15.07.2026)
### ✨ Новое
- Добавлена поддержка интересов `interest` в методы работы с клиентами: создание, редактирование, получение клиента и списка клиентов
- Добавлен метод (GET /interests) для получения справочника интересов

## v2.23.17 (14.07.2026)
### ✨ Новое
- Добавлена поддержка противопоказаний `sickness` в методы работы с клиентами: создание, редактирование, получение клиента и списка клиентов
- Добавлен метод (GET /sicknesses) для получения справочника противопоказаний

## v2.22.17 (29.06.2026)
### ✨ Новое
- Добавлена поддержка Webhook-уведомлений для событий CRM. Реализованы методы управления подписками (создание, получение, обновление и удаление), проверка подписи запросов (`X-Webhook-Signature`) и пакетная отправка событий.

## v2.21.17 (18.06.2026)
### 🐞 Исправления
- В методах "Оформить абонемент клиенту" (POST /contacts/{contact_id}/passes/{pass_id}) и "Сгенерировать ссылку на оплату абонемента" (POST /contacts/{contact_id}/passes/{pass_id}/link) исправлена ошибка, из-за которой активные абонементы ошибочно считались удалёнными

## v2.21.16 (11.06.2026)
### ✨ Новое
- Новый метод "Получить список подписок" (GET /subscriptions) с фильтром по `pass_id`

## v2.20.16 (11.06.2026)
### ✨ Новое
- В методе "Получить список платежей клиента" (GET /contacts/{id}/payments) добавлены параметры фильтрации `date`, `from`, `to` для выборки платежей за конкретную дату или период (период ограничен 31 днём)

## v2.19.16 (11.06.2026)
### ✨ Новое
- В ответе методов работы с клиентами добавлено поле `parent_contact_id` — ID родительской карточки клиента
- В методах "Создать клиента" (POST /contacts) и "Редактировать клиента" (PUT /contacts/{contact_id}) добавлен параметр `parent_contact_id`

### 🐞 Исправления
- В документации метода "Получить список преподавателей" (GET /employees/teachers) убраны поля, которых нет в фактическом ответе

## v2.18.16 (11.06.2026)
### ✨ Новое
- Новый метод "Получить список клиентов с абонементом" (GET /passes/{passId}/contacts) с фильтром по статусу абонемента

## v2.17.16 (03.06.2026)
### ✨ Новое
- Поддержка заголовка `X-Date-Format` для управления форматом дат и времени в API

## v2.16.16 (18.05.2026)
### ✨ Новое
- Добавлен метод "Получить список платежей" с поддержкой фильтрации по дате или диапазону дат и расчёта итоговых сумм по отфильтрованным платежам
- В ответ метода "Получить список платежей клиента" (GET /contacts/{contact}/payments) добавлены поля `office_id` и `cashregister_id`

## v2.15.16 (18.05.2026)
### ✨ Новое
- В методе "Сгенерировать ссылку на оплату абонемента" (POST /contacts/{contact_id}/passes/{pass_id}/link) добавлена возможность уменьшить сумму к оплате: применить промокод (`promocode`), списать бонусы клиента фиксированной суммой (`spend_bonuses`) или процентом от стоимости (`spend_bonuses_percent`), а также оплатить часть с баланса клиента (`debit_client_balance`)

## v2.14.16 (17.05.2026)
### ✨ Новое
## Добавлены новые методы
- Начислить бонусы клиенту - с основанием и опциональным сроком действия в днях; требует включённой бонусной системы и пермишена «Начисление бонусов в карточке клиента»
- Получить историю бонусов клиента - постраничный список начислений, списаний и истечений

## v2.12.16 (13.05.2026)
### 🐛 Исправлено
- В методе "Получить список клиентов" (GET /contacts) пустой или отсутствующий параметр `phone` больше не вызывает ошибку валидации

## v2.12.15 (14.04.2026)
### ✨ Новое
- Метод для получения кастомных полей клиента "Получить список кастомных полей"
- Возможность заполнять кастомные поля клиента при создании и редактировании клиента

Создание новых кастомных полей клиента доступно через службу поддержки.

## v2.12.15 (13.05.2026)
### ✨ Новое
- Добавлен параметр `enableMobilePurchase` в методы "Получить список абонементов" и "Получить список абонементов клиента". Поле отражает возможность покупки конкретного абонемента через онлайн-сервисы (онлайн-расписание, мобильное приложение, виджет VK)

### ⚠️ Устарело
- Параметры `allow_buying_pass_mobile` и `allow_buying_pass_online` помечены как deprecated. Поля продолжают возвращаться для обратной совместимости и будут удалены в следующей версии API. Рекомендуется использовать `enableMobilePurchase`.

## v2.11.15 (13.04.2026)
### ✨ Новое
Добавлены методы для управления заметками клиента:
- "Получить список заметок клиента"
- "Получить заметку клиента"
- "Создать заметку клиента"
- "Обновить заметку клиента"
- "Удалить заметку клиента"

## v2.11.15 (14.04.2026)
### ✨ Новое
- Добавлен метод "Обновить данные клиента"
- Добавлена возможность обновлять поле birth_date в методах "Обновить данные клиента" и "Создать клиента"

## v2.11.15 (13.05.2026)
### ✨ Новое
- В методе "Получить список записей клиента" в ответ добавлены поля `created_at` (дата и время создания записи) и `event_date` (дата проведения занятия)
- В методе "Получить список записей клиента" добавлены опциональные параметры фильтрации по дате создания записи: `date`, `from`, `to` — период ограничен 31 днём
- В методе "Получить список записей клиента" добавлены опциональные параметры фильтрации по дате проведения занятия: `event_date`, `event_from`, `event_to` — период ограничен 31 днём

## v2.10.16 (13.05.2026)
### 🐛 Исправлено
- В методе "Получить список клиентов" (GET /contacts) пустой или отсутствующий параметр `phone` больше не вызывает ошибку валидации

## v2.10.15 (07.04.2026)
### ✨ Новое
## Добавлены новые методы
- Сгенерировать ссылку на оплату абонемента
- Получить список категорий платежей

## v2.09.15 (02.02.2026)
### ✨ Новое
- Параметр tg_chat_id в методах "Получить список клиентов" и "Получить данные клиента"

## v2.08.15 (26.01.2026)
### ✨ Новое
## Добавлены новые методы
- Создать занятие
- Редактировать занятие
- Удалить занятие
- Получить данные филиала
- Получить список филиалов
- Редактировать филиал
- Создать филиал
- Удалить филиал
- Получить данные зала
- Получить список залов
- Создать зал
- Удалить зал
- Редактировать зал
- Получить данные направления
- Получить список направлений
- Создать направление
- Удалить направление
- Редактировать направление
- Создать группу
- Удалить группу
- Редактировать группу
- Список преподавателей 

## v2.07.15 (26.01.2026)
### 🐞 Исправления
- 1. Исправлена ошибка в методе "Отменить запись клиента на занятие"

    

Форматирование дат и времени в API

API поддерживает опциональное форматирование дат и времени через HTTP-заголовок. Это позволяет клиентам получать даты в удобном формате без нарушения обратной совместимости.


Заголовок X-Date-Format

Тип: string Обязательный: нет

Задает формат даты и времени для всех полей даты в ответе API.

Если заголовок не передан, API возвращает даты в текущем (legacy) формате.


Поддерживаемые элементы формата

Формат задается строкой, состоящей из специальных символов. Каждый символ отвечает за определённую часть даты или времени.

Дата

Символ Значение Пример
Y Год (4 цифры) 2024
y Год (2 цифры) 24
m Месяц (01–12) 09
n Месяц без ведущего нуля 9
d День месяца (01–31) 23
j День месяца без ведущего нуля 3

Время

Символ Значение Пример
H Часы (00–23) 14
G Часы без ведущего нуля 4
h Часы (01–12) 02
i Минуты (00–59) 05
s Секунды (00–59) 17

Разделители

В формате можно использовать любые символы в качестве разделителей:

.  :  -  /  пробел

Примеры допустимых форматов:

Y-m-d
d.m.Y
d.m.Y H:i
Y/m/d H:i:s

Типы полей даты

API различает типы полей даты на уровне бизнес-логики:

Тип Описание
DATE Только дата, без времени
DATETIME Дата и время

Правила форматирования

Поля типа DATETIME

  • Форматируются строго по значению X-Date-Format
  • Используются все элементы формата (дата и время)

Пример:

X-Date-Format: d.m.Y H:i
"created_at": "09.11.2023 09:34"

Поля типа DATE

  • Используется только часть формата, относящаяся к дате
  • Все элементы времени (H, i, s) игнорируются
  • Разделители даты сохраняются

Пример:

X-Date-Format: d.m.Y H:i
"birth_date": "23.09.2024"

Пример запроса

GET /api/external/v2/contacts/11
X-Date-Format: d.m.Y H:i

Пример ответа

{
...
"birth_date": "23.09.2024",
"created_at": "09.11.2023 09:34",
"updated_at": "11.01.2026 04:42",
"deleted_at": null
...
}

Обработка пустых и legacy-значений

Следующие значения всегда возвращаются как null:

  • null
  • 0
  • "0"
  • "0000-00-00"
  • "0000-00-00 00:00:00"

Это сделано для корректной работы с legacy-данными и предотвращения некорректных дат.


Обратная совместимость

  • Если X-Date-Format не передан, API возвращает даты в прежнем формате
  • Форматирование применяется только при явном запросе клиента
  • Старые клиенты продолжают работать без изменений

Рекомендации

  • Используйте X-Date-Format, если вам нужен стабильный и единый формат дат
  • Не полагайтесь на legacy-форматы без явного указания заголовка

Webhook-подписки (конфигурация)

Управление подписками на события и настройками доставки webhook-уведомлений. Регистрировать можно из под любого пользовательского токена. События регистрируются отдельно на каждый OAuth клиент (не авторизованный пользователь).

Создание webhook-подписки

POST
https://yourdomain.listokcrm.ru
/api/external/v2/webhooks
requires authentication

Создаёт webhook-подписку для текущего OAuth-клиента. Подписка определяет URL получателя и список событий, по которым будут отправляться уведомления.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/webhooks" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"events\": [
        \"event.created\",
        \"event.updated\",
        \"event.deleted\"
    ],
    \"url\": \"https:\\/\\/somesite.com\\/listok-hooks\",
    \"secret\": \"somesecretstring\"
}"
Example response:
{
    "events": [
        "event.created",
        "event.updated",
        "event.deleted",
        "contact.admission.created",
        "contact.admission.deleted",
        "contact.listing.created",
        "contact.listing.deleted",
        "contact.queue.created",
        "contact.queue.deleted",
        "contact.pass.created",
        "contact.review.created",
        "contact.created",
        "contact.updated",
        "contact.deleted"
    ],
    "url": "https://webhook.site/b0596ea8-9590-4f3a-9335-011b858c94e9",
    "client_id": "a1ff10e7-e468-49c0-b54a-11a8f48d35b7"
}

Получение webhook-подписки

GET
https://yourdomain.listokcrm.ru
/api/external/v2/webhooks
requires authentication

Возвращает текущую конфигурацию webhook-подписки, включая URL доставки и список событий, на которые оформлена подписка.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/webhooks" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "events": [
        "event.created",
        "event.updated",
        "event.deleted",
        "contact.admission.created",
        "contact.admission.deleted",
        "contact.listing.created",
        "contact.listing.deleted",
        "contact.queue.created",
        "contact.queue.deleted",
        "contact.pass.created",
        "contact.review.created",
        "contact.created",
        "contact.updated",
        "contact.deleted"
    ],
    "url": "https://webhook.site/b0596ea8-9590-4f3a-9335-011b858c94e9",
    "client_id": "a1ff10e7-e468-49c0-b54a-11a8f48d35b7"
}

Обновление webhook-подписки

PATCH
https://yourdomain.listokcrm.ru
/api/external/v2/webhooks
requires authentication

Обновляет параметры существующей webhook-подписки. Позволяет изменить URL доставки и/или список событий.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Body Parameters

Response Fields

Example request:
curl --request PATCH \
    "https://yourdomain.listokcrm.ru/api/external/v2/webhooks" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"events\": [
        \"event.created\",
        \"event.updated\",
        \"event.deleted\"
    ],
    \"url\": \"https:\\/\\/somesite.com\\/listok-hooks\",
    \"secret\": \"somesecretstring\"
}"
Example response:
{
    "events": [
        "event.created",
        "event.updated",
        "event.deleted",
        "contact.admission.created",
        "contact.admission.deleted",
        "contact.listing.created",
        "contact.listing.deleted",
        "contact.queue.created",
        "contact.queue.deleted",
        "contact.pass.created",
        "contact.review.created",
        "contact.created",
        "contact.updated",
        "contact.deleted"
    ],
    "url": "https://webhook.site/b0596ea8-9590-4f3a-9335-011b858c94e9",
    "client_id": "a1ff10e7-e468-49c0-b54a-11a8f48d35b7"
}

Удаление webhook-подписки

DELETE
https://yourdomain.listokcrm.ru
/api/external/v2/webhooks
requires authentication

Удаляет webhook-подписку текущего OAuth-клиента. После удаления уведомления о событиях отправляться не будут.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest
Example request:
curl --request DELETE \
    "https://yourdomain.listokcrm.ru/api/external/v2/webhooks" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"

Абонементы

Получить список абонементов

GET
https://yourdomain.listokcrm.ru
/api/external/v2/passes
requires authentication

Метод предоставляет данные о всех неудаленных абонементах в аккаунте

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

page
integer
required

Страница

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/passes?page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "pass_id": 1,
            "name": "Абонемент на 10 занятий",
            "description": "",
            "admit_number": 10,
            "valid_for_days": 31,
            "valid_for_months": 0,
            "freeze_times": 100,
            "freeze_days": 100,
            "pass_type": 1,
            "price": 2000,
            "allowed_times": [],
            "disabled_days": [],
            "enable_mobile_purchase": true,
            "allow_buying_pass_mobile": 0,
            "allow_buying_pass_online": 0
        },
        {
            "pass_id": 1,
            "name": "Абонемент на 10 занятий",
            "description": "",
            "admit_number": 10,
            "valid_for_days": 31,
            "valid_for_months": 0,
            "freeze_times": 100,
            "freeze_days": 100,
            "pass_type": 1,
            "price": 2000,
            "allowed_times": [],
            "disabled_days": [],
            "enable_mobile_purchase": true,
            "allow_buying_pass_mobile": 0,
            "allow_buying_pass_online": 0
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Клиенты


Получить список клиентов с оформленным видом абонемента

GET
https://yourdomain.listokcrm.ru
/api/external/v2/passes/{passId}/contacts
requires authentication

Метод предоставляет данные о клиентах, у которых есть указанный вид абонемента. Поиск можно отфильтровать по статусу абонемента: активный, неактивированный, замороженный, истекший, отозванный. Параметром include=passContacts можно дополнительно подгрузить массив строк pass_contact каждого клиента по этому абонементу (с учётом фильтра по статусу).

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

passId
integer
required

ID абонемента

Example:
1

Query Parameters

page
integer
required

Страница

Example:
1
status
string

Статус (можно несколько через запятую): active, expired, frozen, inactive, revoked.

Example:
active,frozen
include
string

Опциональный include: passContacts.

Example:
passContacts

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/passes/1/contacts?page=1&status=active%2Cfrozen&include=passContacts" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "contact_id": 1
        },
        {
            "contact_id": 1
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Группы

Получить список групп

GET
https://yourdomain.listokcrm.ru
/api/external/v2/groups
requires authentication

Метод предоставляет данные о всех неудаленных группах

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

page
integer
required

Страница

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/groups?page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "group_id": 1,
            "name": "Тестовая группа",
            "duration": 60,
            "teacher_name": "Только Ассистент",
            "second_teacher_name": null,
            "color": "",
            "max_attendance_limit": 3,
            "office_name": "Основной 1",
            "office_id": 0,
            "created_at": "2016-01-27T15:46:51.000000Z",
            "updated_at": "2025-12-05T02:05:46.000000Z",
            "deleted_at": null,
            "private_group": 0,
            "group_type_name": "Нпрвлне",
            "group_type_id": 3,
            "description": "<div><span style=\"font-size:12.0pt;font-family:&quot;Times New Roman&quot;,serif\">Тренировка по плаванию проходит с персональным тренером. Подходит &nbsp;для детей в возрасте от 2 месяцев до 8 лет.&nbsp; Все тренеры &nbsp;имеют большой&nbsp; профессиональный опыт.&nbsp;&nbsp;</span><span style=\"font-size:12.0pt;font-family:&quot;Times New Roman&quot;,serif\">Продолжительность занятия - 30 мин.</span></div>",
            "disable_online_listing": 0,
            "video": "",
            "photo": ""
        },
        {
            "group_id": 1,
            "name": "Тестовая группа",
            "duration": 60,
            "teacher_name": "Только Ассистент",
            "second_teacher_name": null,
            "color": "",
            "max_attendance_limit": 3,
            "office_name": "Основной 1",
            "office_id": 0,
            "created_at": "2016-01-27T15:46:51.000000Z",
            "updated_at": "2025-12-05T02:05:46.000000Z",
            "deleted_at": null,
            "private_group": 0,
            "group_type_name": "Нпрвлне",
            "group_type_id": 3,
            "description": "<div><span style=\"font-size:12.0pt;font-family:&quot;Times New Roman&quot;,serif\">Тренировка по плаванию проходит с персональным тренером. Подходит &nbsp;для детей в возрасте от 2 месяцев до 8 лет.&nbsp; Все тренеры &nbsp;имеют большой&nbsp; профессиональный опыт.&nbsp;&nbsp;</span><span style=\"font-size:12.0pt;font-family:&quot;Times New Roman&quot;,serif\">Продолжительность занятия - 30 мин.</span></div>",
            "disable_online_listing": 0,
            "video": "",
            "photo": ""
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Создать группу

POST
https://yourdomain.listokcrm.ru
/api/external/v2/groups
requires authentication

Метод позволяет создать группу

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/groups" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"name\": \"Фитнес\",
    \"duration\": 60,
    \"group_type_id\": 123,
    \"office_id\": 123,
    \"employee_id\": 123,
    \"employee_id2\": 123,
    \"max_attendance_limit\": 0,
    \"admission_cost\": 0,
    \"allow_event_creation_for_any_employee\": 1,
    \"display_online\": 1,
    \"description\": \"Фитнес\",
    \"disable_online_listing\": 0,
    \"video\": \"https:\\/\\/vkvideo.ru\\/video-123_123\"
}"
Example response:
{
    "group_id": 1,
    "name": "Тестовая группа",
    "duration": 60,
    "teacher_name": "Только Ассистент",
    "second_teacher_name": null,
    "color": "",
    "max_attendance_limit": 3,
    "office_name": "Основной 1",
    "office_id": 0,
    "created_at": "2016-01-27T15:46:51.000000Z",
    "updated_at": "2025-12-05T02:05:46.000000Z",
    "deleted_at": null,
    "private_group": 0,
    "group_type_name": "Нпрвлне",
    "group_type_id": 3,
    "description": "<div><span style=\"font-size:12.0pt;font-family:&quot;Times New Roman&quot;,serif\">Тренировка по плаванию проходит с персональным тренером. Подходит &nbsp;для детей в возрасте от 2 месяцев до 8 лет.&nbsp; Все тренеры &nbsp;имеют большой&nbsp; профессиональный опыт.&nbsp;&nbsp;</span><span style=\"font-size:12.0pt;font-family:&quot;Times New Roman&quot;,serif\">Продолжительность занятия - 30 мин.</span></div>",
    "disable_online_listing": 0,
    "video": "",
    "photo": ""
}

Получить данные группы

GET
https://yourdomain.listokcrm.ru
/api/external/v2/groups/{groupId}
requires authentication

Метод предоставляет данные о конкретной группе по ID

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

groupId
integer
required

ID группы

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/groups/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "group_id": 1,
    "name": "Тестовая группа",
    "duration": 60,
    "teacher_name": "Только Ассистент",
    "second_teacher_name": null,
    "color": "",
    "max_attendance_limit": 3,
    "office_name": "Основной 1",
    "office_id": 0,
    "created_at": "2016-01-27T15:46:51.000000Z",
    "updated_at": "2025-12-05T02:05:46.000000Z",
    "deleted_at": null,
    "private_group": 0,
    "group_type_name": "Нпрвлне",
    "group_type_id": 3,
    "description": "<div><span style=\"font-size:12.0pt;font-family:&quot;Times New Roman&quot;,serif\">Тренировка по плаванию проходит с персональным тренером. Подходит &nbsp;для детей в возрасте от 2 месяцев до 8 лет.&nbsp; Все тренеры &nbsp;имеют большой&nbsp; профессиональный опыт.&nbsp;&nbsp;</span><span style=\"font-size:12.0pt;font-family:&quot;Times New Roman&quot;,serif\">Продолжительность занятия - 30 мин.</span></div>",
    "disable_online_listing": 0,
    "video": "",
    "photo": ""
}

Редактировать группу

PUT
PATCH
https://yourdomain.listokcrm.ru
/api/external/v2/groups/{groupId}
requires authentication

Метод позволяет редактировать группу

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

groupId
integer
required
Example:
1

Body Parameters

Response Fields

Example request:
curl --request PUT \
    "https://yourdomain.listokcrm.ru/api/external/v2/groups/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"name\": \"Фитнес\",
    \"duration\": 60,
    \"group_type_id\": 123,
    \"employee_id\": 123,
    \"employee_id2\": 123,
    \"max_attendance_limit\": 0,
    \"admission_cost\": 0,
    \"allow_event_creation_for_any_employee\": 1,
    \"display_online\": 1,
    \"description\": \"Фитнес\",
    \"disable_online_listing\": 0,
    \"video\": \"https:\\/\\/vkvideo.ru\\/video-123_123\"
}"
Example response:
{
    "group_id": 1,
    "name": "Тестовая группа",
    "duration": 60,
    "teacher_name": "Только Ассистент",
    "second_teacher_name": null,
    "color": "",
    "max_attendance_limit": 3,
    "office_name": "Основной 1",
    "office_id": 0,
    "created_at": "2016-01-27T15:46:51.000000Z",
    "updated_at": "2025-12-05T02:05:46.000000Z",
    "deleted_at": null,
    "private_group": 0,
    "group_type_name": "Нпрвлне",
    "group_type_id": 3,
    "description": "<div><span style=\"font-size:12.0pt;font-family:&quot;Times New Roman&quot;,serif\">Тренировка по плаванию проходит с персональным тренером. Подходит &nbsp;для детей в возрасте от 2 месяцев до 8 лет.&nbsp; Все тренеры &nbsp;имеют большой&nbsp; профессиональный опыт.&nbsp;&nbsp;</span><span style=\"font-size:12.0pt;font-family:&quot;Times New Roman&quot;,serif\">Продолжительность занятия - 30 мин.</span></div>",
    "disable_online_listing": 0,
    "video": "",
    "photo": ""
}

Удалить группу

DELETE
https://yourdomain.listokcrm.ru
/api/external/v2/groups/{groupId}
requires authentication

Метод позволяет удалить группу по ID

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

groupId
integer
required

ID группы

Example:
1
Example request:
curl --request DELETE \
    "https://yourdomain.listokcrm.ru/api/external/v2/groups/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"

Залы

Получить список залов

GET
https://yourdomain.listokcrm.ru
/api/external/v2/rooms
requires authentication

Метод предоставляет данные о всех неудаленных залах

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

page
integer
required

Страница

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/rooms?page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "room_id": 2,
            "office_id": 2,
            "name": "room 2",
            "description": ""
        },
        {
            "room_id": 2,
            "office_id": 2,
            "name": "room 2",
            "description": ""
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Создать зал

POST
https://yourdomain.listokcrm.ru
/api/external/v2/rooms
requires authentication

Метод позволяет создать зал

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/rooms" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"name\": \"Зал для фитнеса\",
    \"office_id\": 1,
    \"description\": \"Зал для фитнеса\"
}"
Example response:
{
    "room_id": 2,
    "office_id": 2,
    "name": "room 2",
    "description": ""
}

Получить данные зала

GET
https://yourdomain.listokcrm.ru
/api/external/v2/rooms/{roomId}
requires authentication

Метод предоставляет данные о конкретном зале по ID

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

roomId
integer
required

ID зала

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/rooms/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "room_id": 2,
    "office_id": 2,
    "name": "room 2",
    "description": ""
}

Редактировать зал

PUT
PATCH
https://yourdomain.listokcrm.ru
/api/external/v2/rooms/{roomId}
requires authentication

Метод позволяет редактировать зал

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

roomId
integer
required

ID зала

Example:
1

Body Parameters

Response Fields

Example request:
curl --request PUT \
    "https://yourdomain.listokcrm.ru/api/external/v2/rooms/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"name\": \"Зал для фитнеса\",
    \"description\": \"Зал для фитнеса\"
}"
Example response:
{
    "room_id": 2,
    "office_id": 2,
    "name": "room 2",
    "description": ""
}

Удалить зал

DELETE
https://yourdomain.listokcrm.ru
/api/external/v2/rooms/{roomId}
requires authentication

Метод позволяет удалить зал по ID

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

roomId
integer
required

ID зала

Example:
1
Example request:
curl --request DELETE \
    "https://yourdomain.listokcrm.ru/api/external/v2/rooms/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"

Занятия

Получить данные о всех занятиях на конкретную дату или период.

GET
https://yourdomain.listokcrm.ru
/api/external/v2/events
requires authentication

Метод производит поиск всех не удаленных занятий по всем филиалам. Поиск необходимо запускать с параметром date, формат даты должен быть ГГГГ-ММ-ДД

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

date
string

Дата занятия. Если указана, то не будут работать from и to.

Example:
2024-01-01
from
string

Дата занятия. Начало периода.

Example:
2024-01-01
to
string

Дата занятия. Конец периода. Период ограничен 7 днями.

Example:
2024-01-10
includes
string

Загрузка дополнительных сущностей. В объект занятия можно включить: записи, посещения, лист ожидания, отменённые записи.

Example:
listings,admissions,queue,cancelled_listings

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/events?date=2024-01-01&from=2024-01-01&to=2024-01-10&includes=listings%2Cadmissions%2Cqueue%2Ccancelled_listings" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "event_id": 9,
            "description": null,
            "type": "copy",
            "week_day": 0,
            "date": "2023-10-09",
            "end_date_time": null,
            "start_time": "07:00",
            "end_time": "08:00",
            "admission_coef": 1,
            "created_at": "2023-10-09T07:13:40.000000Z",
            "updated_at": "2023-10-09T07:13:40.000000Z",
            "deleted_at": 0,
            "display_online": 1,
            "group_id": 1,
            "event_comment": "",
            "teacher_name": null,
            "second_teacher_name": null,
            "room_name": "Тренажерный Зал 1",
            "group_name": "Тестовая группа",
            "max_attendance_limit": 3,
            "group_type_name": "Нпрвлне",
            "office_name": "Основной 1"
        },
        {
            "event_id": 9,
            "description": null,
            "type": "copy",
            "week_day": 0,
            "date": "2023-10-09",
            "end_date_time": null,
            "start_time": "07:00",
            "end_time": "08:00",
            "admission_coef": 1,
            "created_at": "2023-10-09T07:13:40.000000Z",
            "updated_at": "2023-10-09T07:13:40.000000Z",
            "deleted_at": 0,
            "display_online": 1,
            "group_id": 1,
            "event_comment": "",
            "teacher_name": null,
            "second_teacher_name": null,
            "room_name": "Тренажерный Зал 1",
            "group_name": "Тестовая группа",
            "max_attendance_limit": 3,
            "group_type_name": "Нпрвлне",
            "office_name": "Основной 1"
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Создать занятие

POST
https://yourdomain.listokcrm.ru
/api/external/v2/events
requires authentication

Метод позволяет создать занятие

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/events" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"office_id\": 123,
    \"group_id\": 123,
    \"room_id\": 123,
    \"contact_id\": 123,
    \"contact_id2\": 123,
    \"date\": \"2025-10-23\",
    \"start_time\": \"16:00\",
    \"event_comment\": \"Комментарий\",
    \"event_topic\": \"Тема Занятия\",
    \"description\": \"Описание\",
    \"video\": \"https:\\/\\/vkvideo.ru\\/video-123_123\",
    \"display_online\": true,
    \"disable_listing\": false,
    \"stream_copy_group_settings\": false,
    \"stream_type\": \"no\",
    \"stream_url\": \"https:\\/\\/vkvideo.ru\\/video-123_123\",
    \"admission_coef\": 1,
    \"stream_access_before\": 1,
    \"stream_access_after\": 1
}"
Example response:
{
    "event_id": 9,
    "description": null,
    "type": "copy",
    "week_day": 0,
    "date": "2023-10-09",
    "end_date_time": null,
    "start_time": "07:00",
    "end_time": "08:00",
    "admission_coef": 1,
    "created_at": "2023-10-09T07:13:40.000000Z",
    "updated_at": "2023-10-09T07:13:40.000000Z",
    "deleted_at": 0,
    "display_online": 1,
    "group_id": 1,
    "event_comment": "",
    "teacher_name": null,
    "second_teacher_name": null,
    "room_name": "Тренажерный Зал 1",
    "group_name": "Тестовая группа",
    "max_attendance_limit": 3,
    "group_type_name": "Нпрвлне",
    "office_name": "Основной 1"
}

Получить данные занятия

GET
https://yourdomain.listokcrm.ru
/api/external/v2/events/{eventId}
requires authentication

Метод предоставляет данные о конкретном неудаленном занятии по ID. Также метод предоставляет данные о записанных, в том числе в Лист ожидания, и отмеченных клиентах

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

eventId
integer
required

ID занятия

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/events/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "event_id": 9,
    "description": null,
    "type": "copy",
    "week_day": 0,
    "date": "2023-10-09",
    "end_date_time": null,
    "start_time": "07:00",
    "end_time": "08:00",
    "admission_coef": 1,
    "created_at": "2023-10-09T07:13:40.000000Z",
    "updated_at": "2023-10-09T07:13:40.000000Z",
    "deleted_at": 0,
    "display_online": 1,
    "group_id": 1,
    "event_comment": "",
    "teacher_name": null,
    "second_teacher_name": null,
    "room_name": "Тренажерный Зал 1",
    "group_name": "Тестовая группа",
    "max_attendance_limit": 3,
    "group_type_name": "Нпрвлне",
    "office_name": "Основной 1"
}

Редактировать занятие

PUT
PATCH
https://yourdomain.listokcrm.ru
/api/external/v2/events/{eventId}
requires authentication

Метод позволяет редактировать занятие

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

eventId
integer
required

ID занятия

Example:
1

Body Parameters

Response Fields

Example request:
curl --request PUT \
    "https://yourdomain.listokcrm.ru/api/external/v2/events/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"office_id\": 123,
    \"group_id\": 123,
    \"room_id\": 123,
    \"contact_id\": 123,
    \"contact_id2\": 123,
    \"date\": \"2025-10-23\",
    \"start_time\": \"16:00\",
    \"event_comment\": \"Комментарий\",
    \"event_topic\": \"Тема Занятия\",
    \"description\": \"Описание\",
    \"video\": \"https:\\/\\/vkvideo.ru\\/video-123_123\",
    \"display_online\": true,
    \"disable_listing\": false,
    \"stream_copy_group_settings\": false,
    \"stream_type\": \"no\",
    \"stream_url\": \"https:\\/\\/vkvideo.ru\\/video-123_123\",
    \"admission_coef\": 1,
    \"stream_access_before\": 1,
    \"stream_access_after\": 1
}"
Example response:
{
    "event_id": 9,
    "description": null,
    "type": "copy",
    "week_day": 0,
    "date": "2023-10-09",
    "end_date_time": null,
    "start_time": "07:00",
    "end_time": "08:00",
    "admission_coef": 1,
    "created_at": "2023-10-09T07:13:40.000000Z",
    "updated_at": "2023-10-09T07:13:40.000000Z",
    "deleted_at": 0,
    "display_online": 1,
    "group_id": 1,
    "event_comment": "",
    "teacher_name": null,
    "second_teacher_name": null,
    "room_name": "Тренажерный Зал 1",
    "group_name": "Тестовая группа",
    "max_attendance_limit": 3,
    "group_type_name": "Нпрвлне",
    "office_name": "Основной 1"
}

Удалить занятие

DELETE
https://yourdomain.listokcrm.ru
/api/external/v2/events/{eventId}
requires authentication

Метод позволяет удалить занятие по ID

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

eventId
integer
required

ID занятия

Example:
1
Example request:
curl --request DELETE \
    "https://yourdomain.listokcrm.ru/api/external/v2/events/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"

Заявки

Создать заявку

POST
https://yourdomain.listokcrm.ru
/api/external/v2/inquiry
requires authentication

Метод создает заявки от конкретного клиента

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Body Parameters

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/inquiry" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"cform_id\": 12345,
    \"contact_id\": 12345,
    \"note\": \"Новый клиент\",
    \"source\": \"call\"
}"

Интересы

Получить список интересов

GET
https://yourdomain.listokcrm.ru
/api/external/v2/interests
requires authentication

Метод предоставляет справочник интересов (их ID и названия) для передачи в карточку клиента

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

page
integer
required

Страница

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/interests?page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "interest_id": 1,
            "name": "Танцы"
        },
        {
            "interest_id": 1,
            "name": "Танцы"
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Источники

Получить список источников

GET
https://yourdomain.listokcrm.ru
/api/external/v2/sources
requires authentication

Метод предоставляет список источников

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

page
integer
required

Страница

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/sources?page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "source_id": -8,
            "name": "fitmost"
        },
        {
            "source_id": -8,
            "name": "fitmost"
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Клиент

Получить список кастомных полей

GET
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/fields
requires authentication

Метод возвращает все доступные кастомные поля для клиентов. Используйте для определения, какие поля можно заполнить при создании/редактировании клиента.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/contacts/fields" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "field_id": 1,
            "label": "Test field",
            "description": "",
            "type": "text",
            "is_read_only": false,
            "options": []
        },
        {
            "field_id": 1,
            "label": "Test field",
            "description": "",
            "type": "text",
            "is_read_only": false,
            "options": []
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Получить список клиентов

GET
https://yourdomain.listokcrm.ru
/api/external/v2/contacts
requires authentication

Метод предоставляет данные о всех неудаленных клиентах

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

page
integer
required

Страница

Example:
1
name
string

ФИО.

Example:
Иванов Иван Иванович
phone
string

Телефон.

Example:
+79529991122, в любом формате
email
string

Email.

Example:
test@test.ru
since_id
integer

Вернуть только клиентов с ID больше указанного. Используется для получения новых клиентов: сохраните максимальный полученный ID и передайте его при следующем запросе.

Example:
1000
includes
string

Загрузка дополнительных сущностей. В объект клиента можно включить: абонементы.

Example:
passes

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/contacts?page=1&name=%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2+%D0%98%D0%B2%D0%B0%D0%BD+%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%87&phone=%2B79529991122%2C+%D0%B2+%D0%BB%D1%8E%D0%B1%D0%BE%D0%BC+%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B5&email=test%40test.ru&since_id=1000&includes=passes" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "contact_id": 1,
            "parent_contact_id": 0,
            "name": "Иванов Иван Иваныч",
            "name_short": "",
            "gender": "male",
            "birth_date": "1990-01-02",
            "email": "ivanov2@mail.co",
            "phone_alt": "",
            "phone": "9991111111",
            "note": "",
            "sticky_note": "",
            "photo": "",
            "barcode": "0000000000001",
            "created_at": "2016-03-17T05:48:50.000000Z",
            "updated_at": "2025-02-06T07:14:58.000000Z",
            "deleted_at": 0,
            "balance": 0,
            "bonus_balance": 0,
            "parent_name": "",
            "parent_phone": "0",
            "parent_email": "",
            "parent_name2": "",
            "parent_phone2": "",
            "parent_email2": "0",
            "search_score": null,
            "added_office_id": 0,
            "customer_status": "client",
            "vkid": "",
            "fbid": "",
            "instaid": "",
            "has_trial_passes": 0,
            "has_non_trial_passes": 0,
            "last_admission_date": 0,
            "last_pass_purchased": 0,
            "first_non_trial": 0,
            "last_non_trial": 0,
            "source_id": 0,
            "can_email": 0,
            "can_sms": 0,
            "can_wa": 0,
            "can_tg": 0,
            "tg_chat_id": null
        },
        {
            "contact_id": 1,
            "parent_contact_id": 0,
            "name": "Иванов Иван Иваныч",
            "name_short": "",
            "gender": "male",
            "birth_date": "1990-01-02",
            "email": "ivanov2@mail.co",
            "phone_alt": "",
            "phone": "9991111111",
            "note": "",
            "sticky_note": "",
            "photo": "",
            "barcode": "0000000000001",
            "created_at": "2016-03-17T05:48:50.000000Z",
            "updated_at": "2025-02-06T07:14:58.000000Z",
            "deleted_at": 0,
            "balance": 0,
            "bonus_balance": 0,
            "parent_name": "",
            "parent_phone": "0",
            "parent_email": "",
            "parent_name2": "",
            "parent_phone2": "",
            "parent_email2": "0",
            "search_score": null,
            "added_office_id": 0,
            "customer_status": "client",
            "vkid": "",
            "fbid": "",
            "instaid": "",
            "has_trial_passes": 0,
            "has_non_trial_passes": 0,
            "last_admission_date": 0,
            "last_pass_purchased": 0,
            "first_non_trial": 0,
            "last_non_trial": 0,
            "source_id": 0,
            "can_email": 0,
            "can_sms": 0,
            "can_wa": 0,
            "can_tg": 0,
            "tg_chat_id": null
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Создать клиента

POST
https://yourdomain.listokcrm.ru
/api/external/v2/contacts
requires authentication

Метод создает нового клиента

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"name\": \"Иванов Иван Иванович\",
    \"phone\": \"79239239293\",
    \"email\": \"user@example.com\",
    \"gender\": \"male\",
    \"can_sms\": true,
    \"can_email\": true,
    \"added_office_id\": 1,
    \"source_id\": 1,
    \"parent_contact_id\": 1,
    \"birth_date\": \"01.01.1990\",
    \"custom_fields\": [
        {
            \"field_id\": 1,
            \"value\": \"Значение\"
        }
    ],
    \"sickness\": [
        1
    ],
    \"interest\": [
        1
    ]
}"
Example response:
{
    "contact_id": 1,
    "parent_contact_id": 0,
    "name": "Иванов Иван Иваныч",
    "name_short": "",
    "gender": "male",
    "birth_date": "1990-01-02",
    "email": "ivanov2@mail.co",
    "phone_alt": "",
    "phone": "9991111111",
    "note": "",
    "sticky_note": "",
    "photo": "",
    "barcode": "0000000000001",
    "created_at": "2016-03-17T05:48:50.000000Z",
    "updated_at": "2025-02-06T07:14:58.000000Z",
    "deleted_at": 0,
    "balance": 0,
    "bonus_balance": 0,
    "parent_name": "",
    "parent_phone": "0",
    "parent_email": "",
    "parent_name2": "",
    "parent_phone2": "",
    "parent_email2": "0",
    "search_score": null,
    "added_office_id": 0,
    "customer_status": "client",
    "vkid": "",
    "fbid": "",
    "instaid": "",
    "has_trial_passes": 0,
    "has_non_trial_passes": 0,
    "last_admission_date": 0,
    "last_pass_purchased": 0,
    "first_non_trial": 0,
    "last_non_trial": 0,
    "source_id": 0,
    "can_email": 0,
    "can_sms": 0,
    "can_wa": 0,
    "can_tg": 0,
    "tg_chat_id": null
}

Получить данные клиента

GET
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contactId}
requires authentication

Метод предоставляет данные о конкретном клиенте по ID

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contactId
integer
required

ID клиента

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "contact_id": 1,
    "parent_contact_id": 0,
    "name": "Иванов Иван Иваныч",
    "name_short": "",
    "gender": "male",
    "birth_date": "1990-01-02",
    "email": "ivanov2@mail.co",
    "phone_alt": "",
    "phone": "9991111111",
    "note": "",
    "sticky_note": "",
    "photo": "",
    "barcode": "0000000000001",
    "created_at": "2016-03-17T05:48:50.000000Z",
    "updated_at": "2025-02-06T07:14:58.000000Z",
    "deleted_at": 0,
    "balance": 0,
    "bonus_balance": 0,
    "parent_name": "",
    "parent_phone": "0",
    "parent_email": "",
    "parent_name2": "",
    "parent_phone2": "",
    "parent_email2": "0",
    "search_score": null,
    "added_office_id": 0,
    "customer_status": "client",
    "vkid": "",
    "fbid": "",
    "instaid": "",
    "has_trial_passes": 0,
    "has_non_trial_passes": 0,
    "last_admission_date": 0,
    "last_pass_purchased": 0,
    "first_non_trial": 0,
    "last_non_trial": 0,
    "source_id": 0,
    "can_email": 0,
    "can_sms": 0,
    "can_wa": 0,
    "can_tg": 0,
    "tg_chat_id": null
}

Редактировать клиента

PUT
PATCH
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contactId}
requires authentication

Метод обновляет данные существующего клиента по ID

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contactId
integer
required
Example:
1
contact
integer
required

ID клиента

Example:
1

Body Parameters

Response Fields

Example request:
curl --request PUT \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"name\": \"Иванов Иван Иванович\",
    \"phone\": \"79239239293\",
    \"email\": \"user@example.com\",
    \"gender\": \"male\",
    \"can_sms\": true,
    \"can_email\": true,
    \"added_office_id\": 1,
    \"source_id\": 1,
    \"parent_contact_id\": 1,
    \"birth_date\": \"01.01.1990\",
    \"custom_fields\": [
        {
            \"field_id\": 1,
            \"value\": \"Значение\"
        }
    ],
    \"sickness\": [
        1
    ],
    \"interest\": [
        1
    ]
}"
Example response:
{
    "contact_id": 1,
    "parent_contact_id": 0,
    "name": "Иванов Иван Иваныч",
    "name_short": "",
    "gender": "male",
    "birth_date": "1990-01-02",
    "email": "ivanov2@mail.co",
    "phone_alt": "",
    "phone": "9991111111",
    "note": "",
    "sticky_note": "",
    "photo": "",
    "barcode": "0000000000001",
    "created_at": "2016-03-17T05:48:50.000000Z",
    "updated_at": "2025-02-06T07:14:58.000000Z",
    "deleted_at": 0,
    "balance": 0,
    "bonus_balance": 0,
    "parent_name": "",
    "parent_phone": "0",
    "parent_email": "",
    "parent_name2": "",
    "parent_phone2": "",
    "parent_email2": "0",
    "search_score": null,
    "added_office_id": 0,
    "customer_status": "client",
    "vkid": "",
    "fbid": "",
    "instaid": "",
    "has_trial_passes": 0,
    "has_non_trial_passes": 0,
    "last_admission_date": 0,
    "last_pass_purchased": 0,
    "first_non_trial": 0,
    "last_non_trial": 0,
    "source_id": 0,
    "can_email": 0,
    "can_sms": 0,
    "can_wa": 0,
    "can_tg": 0,
    "tg_chat_id": null
}

Абонементы


Оформить абонемент клиенту

POST
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/passes/{pass_passId}
requires authentication

Метод позволяет оформить абонемент клиенту

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1
pass_passId
integer
required

ID абонемента

Example:
1

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/passes/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"amount\": 1000,
    \"cashregister_id\": 1,
    \"paymentcategory_id\": 1
}"
Example response:
{
    "pass_contact_id": 1,
    "pass_id": 1,
    "is_trial": 0,
    "sold_at": 1696852602,
    "created_at": "2023-10-09T11:56:42.000000Z",
    "updated_at": "2026-06-10T04:29:19.000000Z",
    "deleted_at": null,
    "debt_dead_line_at": null,
    "expires_at": "2023-12-16T09:00:00.000000Z",
    "expired_at": "2026-06-10",
    "activated_at": "2023-10-09T09:00:00.000000Z",
    "frozen_till_at": null,
    "planned_freeze_at": null,
    "paid_price": 2000,
    "full_price": 2000,
    "discounted": 0,
    "status": "expired",
    "class_type": "ege",
    "points_left": 11,
    "points_total": 10,
    "freeze_times": 100,
    "comment": "",
    "revoke_comment": "",
    "pass": {
        "pass_id": 1,
        "name": "Абонемент на 10 занятий",
        "description": "",
        "admit_number": 10,
        "valid_for_days": 31,
        "valid_for_months": 0,
        "freeze_times": 100,
        "freeze_days": 100,
        "pass_type": 1,
        "price": 2000,
        "allowed_times": [],
        "disabled_days": [],
        "enable_mobile_purchase": true,
        "allow_buying_pass_mobile": 0,
        "allow_buying_pass_online": 0
    }
}
POST
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/passes/{pass_passId}/link
requires authentication

Метод позволяет сгенерировать ссылку на оплату абонемента. При создании ссылки можно применить промокод, а также использовать бонусные баллы и средства с баланса клиента для уменьшения стоимости оплаты. Возможность использования промокодов, бонусов и баланса определяется настройками системы.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1
pass_passId
integer
required

ID абонемента

Example:
1

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/passes/1/link" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"paymentcategory_id\": 1,
    \"promocode\": \"SUMMER10\",
    \"spend_bonuses\": 100,
    \"spend_bonuses_percent\": 50,
    \"debit_client_balance\": 500
}"
Example response:

Получить список абонементов клиента

GET
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/passes
requires authentication

Метод предоставляет данные о всех абонементах клиента. Абонементы фильтруются по статусу: активный, неактивированный, замороженный, истекший, отозванный

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1

Query Parameters

page
integer
required

Страница

Example:
1
status
string

Статус (необязательный, можно несколько через запятую): active, expired, frozen, inactive, revoked. Если не передан — возвращаются все абонементы клиента.

Example:
active,frozen

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/passes?page=1&status=active%2Cfrozen" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "pass_contact_id": 1,
            "pass_id": 1,
            "is_trial": 0,
            "sold_at": 1696852602,
            "created_at": "2023-10-09T11:56:42.000000Z",
            "updated_at": "2026-06-10T04:29:19.000000Z",
            "deleted_at": null,
            "debt_dead_line_at": null,
            "expires_at": "2023-12-16T09:00:00.000000Z",
            "expired_at": "2026-06-10",
            "activated_at": "2023-10-09T09:00:00.000000Z",
            "frozen_till_at": null,
            "planned_freeze_at": null,
            "paid_price": 2000,
            "full_price": 2000,
            "discounted": 0,
            "status": "expired",
            "class_type": "ege",
            "points_left": 11,
            "points_total": 10,
            "freeze_times": 100,
            "comment": "",
            "revoke_comment": "",
            "pass": {
                "pass_id": 1,
                "name": "Абонемент на 10 занятий",
                "description": "",
                "admit_number": 10,
                "valid_for_days": 31,
                "valid_for_months": 0,
                "freeze_times": 100,
                "freeze_days": 100,
                "pass_type": 1,
                "price": 2000,
                "allowed_times": [],
                "disabled_days": [],
                "enable_mobile_purchase": true,
                "allow_buying_pass_mobile": 0,
                "allow_buying_pass_online": 0
            }
        },
        {
            "pass_contact_id": 1,
            "pass_id": 1,
            "is_trial": 0,
            "sold_at": 1696852602,
            "created_at": "2023-10-09T11:56:42.000000Z",
            "updated_at": "2026-06-10T04:29:19.000000Z",
            "deleted_at": null,
            "debt_dead_line_at": null,
            "expires_at": "2023-12-16T09:00:00.000000Z",
            "expired_at": "2026-06-10",
            "activated_at": "2023-10-09T09:00:00.000000Z",
            "frozen_till_at": null,
            "planned_freeze_at": null,
            "paid_price": 2000,
            "full_price": 2000,
            "discounted": 0,
            "status": "expired",
            "class_type": "ege",
            "points_left": 11,
            "points_total": 10,
            "freeze_times": 100,
            "comment": "",
            "revoke_comment": "",
            "pass": {
                "pass_id": 1,
                "name": "Абонемент на 10 занятий",
                "description": "",
                "admit_number": 10,
                "valid_for_days": 31,
                "valid_for_months": 0,
                "freeze_times": 100,
                "freeze_days": 100,
                "pass_type": 1,
                "price": 2000,
                "allowed_times": [],
                "disabled_days": [],
                "enable_mobile_purchase": true,
                "allow_buying_pass_mobile": 0,
                "allow_buying_pass_online": 0
            }
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Получить данные абонемента

GET
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/passes/{passContact_pass_contactId}
requires authentication

Метод предоставляет данные о конкретном абонементе конкретного клиента

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1
passContact_pass_contactId
integer
required

ID абонемента клиента

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/passes/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "pass_contact_id": 1,
    "pass_id": 1,
    "is_trial": 0,
    "sold_at": 1696852602,
    "created_at": "2023-10-09T11:56:42.000000Z",
    "updated_at": "2026-06-10T04:29:19.000000Z",
    "deleted_at": null,
    "debt_dead_line_at": null,
    "expires_at": "2023-12-16T09:00:00.000000Z",
    "expired_at": "2026-06-10",
    "activated_at": "2023-10-09T09:00:00.000000Z",
    "frozen_till_at": null,
    "planned_freeze_at": null,
    "paid_price": 2000,
    "full_price": 2000,
    "discounted": 0,
    "status": "expired",
    "class_type": "ege",
    "points_left": 11,
    "points_total": 10,
    "freeze_times": 100,
    "comment": "",
    "revoke_comment": "",
    "pass": {
        "pass_id": 1,
        "name": "Абонемент на 10 занятий",
        "description": "",
        "admit_number": 10,
        "valid_for_days": 31,
        "valid_for_months": 0,
        "freeze_times": 100,
        "freeze_days": 100,
        "pass_type": 1,
        "price": 2000,
        "allowed_times": [],
        "disabled_days": [],
        "enable_mobile_purchase": true,
        "allow_buying_pass_mobile": 0,
        "allow_buying_pass_online": 0
    }
}

Заморозить абонемент клиента

POST
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/passes/{passContact_pass_contactId}/freeze
requires authentication

Метод позволяет заморозить активный абонемент клиента. Можно указать дату начала заморозки (plannedFreezeAt) и срок заморозки в днях (freezeDays). Если дата начала не указана — абонемент замораживается сразу; если не указан срок — используется максимально доступное количество дней заморозки абонемента. Дата разморозки вычисляется автоматически. Доступное число заморозок (freezeTimes) уменьшается на 1.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1
passContact_pass_contactId
integer
required

ID абонемента клиента

Example:
1

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/passes/1/freeze" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"planned_freeze_at\": \"2026-08-01\",
    \"freeze_days\": 7
}"
Example response:
{
    "pass_contact_id": 1,
    "pass_id": 1,
    "is_trial": 0,
    "sold_at": 1696852602,
    "created_at": "2023-10-09T11:56:42.000000Z",
    "updated_at": "2026-06-10T04:29:19.000000Z",
    "deleted_at": null,
    "debt_dead_line_at": null,
    "expires_at": "2023-12-16T09:00:00.000000Z",
    "expired_at": "2026-06-10",
    "activated_at": "2023-10-09T09:00:00.000000Z",
    "frozen_till_at": null,
    "planned_freeze_at": null,
    "paid_price": 2000,
    "full_price": 2000,
    "discounted": 0,
    "status": "expired",
    "class_type": "ege",
    "points_left": 11,
    "points_total": 10,
    "freeze_times": 100,
    "comment": "",
    "revoke_comment": "",
    "pass": {
        "pass_id": 1,
        "name": "Абонемент на 10 занятий",
        "description": "",
        "admit_number": 10,
        "valid_for_days": 31,
        "valid_for_months": 0,
        "freeze_times": 100,
        "freeze_days": 100,
        "pass_type": 1,
        "price": 2000,
        "allowed_times": [],
        "disabled_days": [],
        "enable_mobile_purchase": true,
        "allow_buying_pass_mobile": 0,
        "allow_buying_pass_online": 0
    }
}

Отменить запланированную заморозку абонемента

DELETE
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/passes/{passContact_pass_contactId}/planned-freeze
requires authentication

Метод отменяет ранее запланированную (ещё не наступившую) заморозку абонемента. Абонемент остаётся активным, число доступных заморозок (freezeTimes) не расходуется. Если у абонемента нет запланированной заморозки — возвращается ошибка.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1
passContact_pass_contactId
integer
required

ID абонемента клиента

Example:
1

Response Fields

Example request:
curl --request DELETE \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/passes/1/planned-freeze" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "pass_contact_id": 1,
    "pass_id": 1,
    "is_trial": 0,
    "sold_at": 1696852602,
    "created_at": "2023-10-09T11:56:42.000000Z",
    "updated_at": "2026-06-10T04:29:19.000000Z",
    "deleted_at": null,
    "debt_dead_line_at": null,
    "expires_at": "2023-12-16T09:00:00.000000Z",
    "expired_at": "2026-06-10",
    "activated_at": "2023-10-09T09:00:00.000000Z",
    "frozen_till_at": null,
    "planned_freeze_at": null,
    "paid_price": 2000,
    "full_price": 2000,
    "discounted": 0,
    "status": "expired",
    "class_type": "ege",
    "points_left": 11,
    "points_total": 10,
    "freeze_times": 100,
    "comment": "",
    "revoke_comment": "",
    "pass": {
        "pass_id": 1,
        "name": "Абонемент на 10 занятий",
        "description": "",
        "admit_number": 10,
        "valid_for_days": 31,
        "valid_for_months": 0,
        "freeze_times": 100,
        "freeze_days": 100,
        "pass_type": 1,
        "price": 2000,
        "allowed_times": [],
        "disabled_days": [],
        "enable_mobile_purchase": true,
        "allow_buying_pass_mobile": 0,
        "allow_buying_pass_online": 0
    }
}

Разморозить абонемент клиента

POST
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/passes/{passContact_pass_contactId}/unfreeze
requires authentication

Метод позволяет разморозить ранее замороженный абонемент клиента. Статус абонемента переводится в active, дата окончания заморозки очищается.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1
passContact_pass_contactId
integer
required

ID абонемента клиента

Example:
1

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/passes/1/unfreeze" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "pass_contact_id": 1,
    "pass_id": 1,
    "is_trial": 0,
    "sold_at": 1696852602,
    "created_at": "2023-10-09T11:56:42.000000Z",
    "updated_at": "2026-06-10T04:29:19.000000Z",
    "deleted_at": null,
    "debt_dead_line_at": null,
    "expires_at": "2023-12-16T09:00:00.000000Z",
    "expired_at": "2026-06-10",
    "activated_at": "2023-10-09T09:00:00.000000Z",
    "frozen_till_at": null,
    "planned_freeze_at": null,
    "paid_price": 2000,
    "full_price": 2000,
    "discounted": 0,
    "status": "expired",
    "class_type": "ege",
    "points_left": 11,
    "points_total": 10,
    "freeze_times": 100,
    "comment": "",
    "revoke_comment": "",
    "pass": {
        "pass_id": 1,
        "name": "Абонемент на 10 занятий",
        "description": "",
        "admit_number": 10,
        "valid_for_days": 31,
        "valid_for_months": 0,
        "freeze_times": 100,
        "freeze_days": 100,
        "pass_type": 1,
        "price": 2000,
        "allowed_times": [],
        "disabled_days": [],
        "enable_mobile_purchase": true,
        "allow_buying_pass_mobile": 0,
        "allow_buying_pass_online": 0
    }
}

Записи


Получить список записей клиента

GET
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/listings
requires authentication

Метод предоставляет данные о записях на занятия конкретного клиента. Поддерживает опциональную фильтрацию по дате создания записи (date или период from/to) и по дате проведения занятия (event_date или период event_from/event_to) — каждый период ограничен 31 днём. Дополнительно метод производит поиск по id занятия, чтобы проверить запись клиента на конкретное занятие

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1

Query Parameters

page
integer
required

Страница

Example:
1
date
string

Дата создания записи. Если указана, то не будут работать from и to.

Example:
2024-01-01
from
string

Дата создания записи. Начало периода.

Example:
2024-01-01
to
string

Дата создания записи. Конец периода. Период ограничен 31 днями.

Example:
2024-01-10
event_date
string

Дата проведения занятия. Если указана, то не будут работать event_from и event_to.

Example:
2024-01-01
event_from
string

Дата проведения занятия. Начало периода.

Example:
2024-01-01
event_to
string

Дата проведения занятия. Конец периода. Период ограничен 31 днями.

Example:
2024-01-10
event_id
string

Id занаятия.

Example:
12345
missed
string

Пропуск.

Example:
true

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/listings?page=1&date=2024-01-01&from=2024-01-01&to=2024-01-10&event_date=2024-01-01&event_from=2024-01-01&event_to=2024-01-10&event_id=12345&missed=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "listing_id": 55,
            "event_id": 163308,
            "contact_id": 15,
            "created_at": "2023-12-12T07:38:31.000000Z",
            "event_date": "2023-12-12",
            "source": "",
            "missed_pass_contact_id": 0,
            "is_missed": false
        },
        {
            "listing_id": 55,
            "event_id": 163308,
            "contact_id": 15,
            "created_at": "2023-12-12T07:38:31.000000Z",
            "event_date": "2023-12-12",
            "source": "",
            "missed_pass_contact_id": 0,
            "is_missed": false
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Отменить запись клиента на занятие

DELETE
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/listings/{listingContact_listingId}
requires authentication

Метод позволяет отменить одну запись конкретного клиента с конкретного занятия

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1
listingContact_listingId
integer
required

ID записи

Example:
1
Example request:
curl --request DELETE \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/listings/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"

Записать клиента на занятие

POST
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/listings
requires authentication

Метод позволяет записать конкретного клиента на конкретное занятие. Не позволит записать клиента в лист ожидания. Для этого используется отдельные метод: «Добавить в лист ожидания»

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/listings" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"event_id\": \"12345\"
}"
Example response:
{
    "listing_id": 55,
    "event_id": 163308,
    "contact_id": 15,
    "created_at": "2023-12-12T07:38:31.000000Z",
    "event_date": "2023-12-12",
    "source": "",
    "missed_pass_contact_id": 0,
    "is_missed": false
}

Посещения


Получить список посещений клиента

GET
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/admissions
requires authentication

Метод предоставляет список всех посещений конкретного клиента. По дополнительному параметру eventId,метод предоставит данные о посещении на конкретном занятии

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1

Query Parameters

page
integer
required

Страница

Example:
1
date
string

Дата посещения. Если указана, то не будут работать from и to.

Example:
2024-01-01
from
string

Дата посещения. Начало периода.

Example:
2024-01-01
to
string

Дата посещения. Конец периода. Период ограничен 31 днями.

Example:
2024-01-10
event_id
string

Id занаятия.

Example:
12345

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/admissions?page=1&date=2024-01-01&from=2024-01-01&to=2024-01-10&event_id=12345" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "admission_id": 2,
            "event_id": 18,
            "contact_id": 4,
            "is_debt": false,
            "pass_contact_id": 2,
            "payment_id": 0,
            "created_at": "2023-10-31T04:21:53.000000Z"
        },
        {
            "admission_id": 2,
            "event_id": 18,
            "contact_id": 4,
            "is_debt": false,
            "pass_contact_id": 2,
            "payment_id": 0,
            "created_at": "2023-10-31T04:21:53.000000Z"
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Отменить посещение клиента

DELETE
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/admissions/{admissionContact_admissionId}
requires authentication

Метод позволяет отменить посещение конкретного клиента

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1
admissionContact_admissionId
integer
required

ID посещения

Example:
1

Query Parameters

return_type
string

Используется при оплате посещения без абонемента. withdraw - вернуть клиенту, deposit - вернуть на счет клиента. По умолчанию: withdraw.

Example:
deposit
Example request:
curl --request DELETE \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/admissions/1?return_type=deposit" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"

Отметить посещение клиента

POST
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/admissions
requires authentication

Метод позволит отметить конкретного клиента на конкретном занятии

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/admissions" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"event_id\": \"12345\",
    \"pass_contact_id\": \"12345\"
}"
Example response:
{
    "admission_id": 2,
    "event_id": 18,
    "contact_id": 4,
    "is_debt": false,
    "pass_contact_id": 2,
    "payment_id": 0,
    "created_at": "2023-10-31T04:21:53.000000Z"
}

Оплатить посещение клиента

POST
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/admissions/pay
requires authentication

Метод позволит оплатить посещение клиента без абонемента

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/admissions/pay" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"event_id\": \"12345\",
    \"cashregister_id\": \"12345\",
    \"paymentcategory_id\": \"12345\",
    \"comment\": \"explicabo\",
    \"price\": 1000,
    \"amount\": 500
}"
Example response:
{
    "admission_id": 2,
    "event_id": 18,
    "contact_id": 4,
    "is_debt": false,
    "pass_contact_id": 2,
    "payment_id": 0,
    "created_at": "2023-10-31T04:21:53.000000Z"
}

Лист ожидания


Получить список записей клиента из листа ожидания

GET
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/queue
requires authentication

Метод предоставляет все записи из листа ожидания конкретного клиента. Условие: на аккаунте включен лист ожидания

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1

Query Parameters

page
integer
required

Страница

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/queue?page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "queue_id": 5,
            "event_id": 23,
            "contact_id": 4,
            "created_at": "2023-11-20T04:21:57.000000Z"
        },
        {
            "queue_id": 5,
            "event_id": 23,
            "contact_id": 4,
            "created_at": "2023-11-20T04:21:57.000000Z"
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Отменить запись клиента в листе ожидания

DELETE
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/queue/{queueContact_queueId}
requires authentication

Метод позволяет отменить запись клиента в листе ожидания. Условие: на аккаунте включен лист ожидания

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1
queueContact_queueId
integer
required

ID листа ожидания

Example:
1

Response Fields

Example request:
curl --request DELETE \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/queue/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "queue_id": 5,
    "event_id": 23,
    "contact_id": 4,
    "created_at": "2023-11-20T04:21:57.000000Z"
}

Добавить клиента в лист ожидания

POST
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/queue
requires authentication

Метод позволяет добавить конкретного клиента в лист ожидания на занятие. Условие: на аккаунте включен лист ожидания

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/queue" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"event_id\": \"12345\"
}"
Example response:
{
    "queue_id": 5,
    "event_id": 23,
    "contact_id": 4,
    "created_at": "2023-11-20T04:21:57.000000Z"
}

Заметки


Получить список заметок клиента

GET
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/notes
requires authentication

Метод предоставляет список всех заметок конкретного клиента

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1

Query Parameters

page
integer
required

Страница

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/notes?page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "id": 79,
            "user_id": null,
            "note": "customer",
            "is_main_note": 0,
            "created_at": "2025-04-10T02:47:49.000000Z",
            "updated_at": "2025-04-10T02:47:49.000000Z"
        },
        {
            "id": 79,
            "user_id": null,
            "note": "customer",
            "is_main_note": 0,
            "created_at": "2025-04-10T02:47:49.000000Z",
            "updated_at": "2025-04-10T02:47:49.000000Z"
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Получить заметку клиента

GET
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/notes/{note_id}
requires authentication

Метод предоставляет данные конкретной заметки клиента

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1
note_id
integer
required

The ID of the note.

Example:
79
note
integer
required

ID заметки

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/notes/79" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "id": 79,
    "user_id": null,
    "note": "customer",
    "is_main_note": 0,
    "created_at": "2025-04-10T02:47:49.000000Z",
    "updated_at": "2025-04-10T02:47:49.000000Z"
}

Создать заметку клиента

POST
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/notes
requires authentication

Метод позволяет создать новую заметку для конкретного клиента

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/notes" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"note\": \"Текст заметки клиента\",
    \"is_main_note\": false
}"
Example response:
{
    "id": 79,
    "user_id": null,
    "note": "customer",
    "is_main_note": 0,
    "created_at": "2025-04-10T02:47:49.000000Z",
    "updated_at": "2025-04-10T02:47:49.000000Z"
}

Обновить заметку клиента

PATCH
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/notes/{note_id}
requires authentication

Метод позволяет обновить существующую заметку клиента

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1
note_id
integer
required

The ID of the note.

Example:
79
note
integer
required

ID заметки

Example:
1

Body Parameters

Response Fields

Example request:
curl --request PATCH \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/notes/79" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"note\": \"Текст заметки клиента\",
    \"is_main_note\": false
}"
Example response:
{
    "id": 79,
    "user_id": null,
    "note": "customer",
    "is_main_note": 0,
    "created_at": "2025-04-10T02:47:49.000000Z",
    "updated_at": "2025-04-10T02:47:49.000000Z"
}

Удалить заметку клиента

DELETE
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/notes/{note_id}
requires authentication

Метод позволяет удалить заметку клиента

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1
note_id
integer
required

The ID of the note.

Example:
79
note
integer
required

ID заметки

Example:
1
Example request:
curl --request DELETE \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/notes/79" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"

Платежи


Получить список платежей клиента

GET
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/payments
requires authentication

Метод предоставляет все неудаленные платежи по конкретному клиенту. Поддерживает фильтрацию по дате или периоду.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1

Query Parameters

page
integer
required

Страница

Example:
1
date
string

Дата платежа. Если указана, то не будут работать from и to.

Example:
2024-01-01
from
string

Дата платежа. Начало периода.

Example:
2024-01-01
to
string

Дата платежа. Конец периода. Период ограничен 31 днями.

Example:
2024-01-31
direction
string

Направление платежа. Допустимые значения: income (доход), outcome (расход).

Example:
income

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/payments?page=1&date=2024-01-01&from=2024-01-01&to=2024-01-31&direction=income" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "payment_id": 1,
            "from_id": 4,
            "to_id": -1,
            "user_id": 1,
            "direction": "income",
            "reason": "Покупка абонемента &quot;Абонемент на 10 занятий&quot; #1. ",
            "date": "09.10.2023",
            "created_at": "2023-10-09T11:56:42.000000Z",
            "amount": 2000,
            "full_price": 2000,
            "balance_paid": 0,
            "total_discount_amount": 0,
            "discount_bonus_amount": null,
            "discount_amount": 0,
            "payment_type": "pass",
            "init_price": 0,
            "office_id": 0,
            "cashregister_id": 1,
            "discounts": {
                "discounts": [
                    {
                        "name": "Another one",
                        "original_name": "Another one",
                        "type": "regular",
                        "amount": 0,
                        "amount_fixed": 0,
                        "amount_percent": 15,
                        "amount_type": null,
                        "code_word": "",
                        "contact_id": 0,
                        "country_id": 1,
                        "discount_id": 3,
                        "discounts_left": 0,
                        "discountslot_id": null,
                        "dynamic_calculator": null,
                        "dynamic_type": null,
                        "limit_per_contact": null,
                        "limited": 0,
                        "master_id": 0,
                        "use_for": "any",
                        "used": 0,
                        "valid_til": null,
                        "pivot": {
                            "amount": 2000,
                            "amountPaid": 2000,
                            "contactId": null,
                            "discountAlgorithm": "sum",
                            "discountAmount": 0,
                            "discountId": 3,
                            "discount_amountFixed": 0,
                            "discount_amountPercent": 15,
                            "discount_codeWord": null,
                            "discount_name": "Another one",
                            "discount_useFor": "any",
                            "order": null,
                            "paymentId": 1
                        }
                    }
                ]
            }
        },
        {
            "payment_id": 1,
            "from_id": 4,
            "to_id": -1,
            "user_id": 1,
            "direction": "income",
            "reason": "Покупка абонемента &quot;Абонемент на 10 занятий&quot; #1. ",
            "date": "09.10.2023",
            "created_at": "2023-10-09T11:56:42.000000Z",
            "amount": 2000,
            "full_price": 2000,
            "balance_paid": 0,
            "total_discount_amount": 0,
            "discount_bonus_amount": null,
            "discount_amount": 0,
            "payment_type": "pass",
            "init_price": 0,
            "office_id": 0,
            "cashregister_id": 1,
            "discounts": {
                "discounts": [
                    {
                        "name": "Another one",
                        "original_name": "Another one",
                        "type": "regular",
                        "amount": 0,
                        "amount_fixed": 0,
                        "amount_percent": 15,
                        "amount_type": null,
                        "code_word": "",
                        "contact_id": 0,
                        "country_id": 1,
                        "discount_id": 3,
                        "discounts_left": 0,
                        "discountslot_id": null,
                        "dynamic_calculator": null,
                        "dynamic_type": null,
                        "limit_per_contact": null,
                        "limited": 0,
                        "master_id": 0,
                        "use_for": "any",
                        "used": 0,
                        "valid_til": null,
                        "pivot": {
                            "amount": 2000,
                            "amountPaid": 2000,
                            "contactId": null,
                            "discountAlgorithm": "sum",
                            "discountAmount": 0,
                            "discountId": 3,
                            "discount_amountFixed": 0,
                            "discount_amountPercent": 15,
                            "discount_codeWord": null,
                            "discount_name": "Another one",
                            "discount_useFor": "any",
                            "order": null,
                            "paymentId": 1
                        }
                    }
                ]
            }
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Бонусы


Получить историю бонусов клиента

GET
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/bonuses
requires authentication

Метод предоставляет постраничный список всех записей истории бонусов клиента (начисления, списания, истечения), отсортированных по дате создания (новые сверху).

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1

Query Parameters

page
integer
required

Страница

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/bonuses?page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "bonus_history_id": 1,
            "contact_id": 11,
            "amount": 200,
            "reason": "тест",
            "expire_date": null,
            "status": "left",
            "source": "user",
            "balance_after": 200,
            "created_at": "2024-07-25 01:23:36"
        },
        {
            "bonus_history_id": 1,
            "contact_id": 11,
            "amount": 200,
            "reason": "тест",
            "expire_date": null,
            "status": "left",
            "source": "user",
            "balance_after": 200,
            "created_at": "2024-07-25 01:23:36"
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Начислить бонусы клиенту

POST
https://yourdomain.listokcrm.ru
/api/external/v2/contacts/{contact_contactId}/bonuses
requires authentication

Метод позволяет начислить бонусы клиенту с указанием основания и опционального срока действия. Требует включённой бонусной системы и пермишена 'Начисление бонусов в карточке клиента' у владельца токена.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

contact_contactId
integer
required

ID клиента

Example:
1

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/bonuses" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"amount\": 500,
    \"reason\": \"Начисление бонусов\",
    \"expire_days\": 180
}"
Example response:
{
    "bonus_history_id": 1,
    "contact_id": 11,
    "amount": 200,
    "reason": "тест",
    "expire_date": null,
    "status": "left",
    "source": "user",
    "balance_after": 200,
    "created_at": "2024-07-25 01:23:36"
}

Направления

Получить список направлений

GET
https://yourdomain.listokcrm.ru
/api/external/v2/grouptypes
requires authentication

Метод предоставляет данные о всех неудаленных направлениях

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

page
integer
required

Страница

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/grouptypes?page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "group_type_id": 2,
            "name": "Второе направление",
            "description": "",
            "hide_on_vk": "",
            "color": "#3f4bd4",
            "video": ""
        },
        {
            "group_type_id": 2,
            "name": "Второе направление",
            "description": "",
            "hide_on_vk": "",
            "color": "#3f4bd4",
            "video": ""
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Создать направление

POST
https://yourdomain.listokcrm.ru
/api/external/v2/grouptypes
requires authentication

Метод позволяет создать направление

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/grouptypes" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"name\": \"Фитнес\",
    \"color\": \"#ffffff\",
    \"description\": \"Фитнес\",
    \"hide_on_vk\": \"\",
    \"video\": \"https:\\/\\/vkvideo.ru\\/video-123_123\"
}"
Example response:
{
    "group_type_id": 2,
    "name": "Второе направление",
    "description": "",
    "hide_on_vk": "",
    "color": "#3f4bd4",
    "video": ""
}

Получить данные направления

GET
https://yourdomain.listokcrm.ru
/api/external/v2/grouptypes/{groupTypeId}
requires authentication

Метод предоставляет данные о конкретном направлении по ID

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

groupTypeId
integer
required

ID направления

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/grouptypes/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "group_type_id": 2,
    "name": "Второе направление",
    "description": "",
    "hide_on_vk": "",
    "color": "#3f4bd4",
    "video": ""
}

Редактировать направление

PUT
PATCH
https://yourdomain.listokcrm.ru
/api/external/v2/grouptypes/{groupTypeId}
requires authentication

Метод позволяет редактировать направление

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

groupTypeId
integer
required
Example:
2

Body Parameters

Response Fields

Example request:
curl --request PUT \
    "https://yourdomain.listokcrm.ru/api/external/v2/grouptypes/2" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"name\": \"Фитнес\",
    \"color\": \"#ffffff\",
    \"description\": \"Фитнес\",
    \"hide_on_vk\": \"\",
    \"video\": \"https:\\/\\/vkvideo.ru\\/video-123_123\"
}"
Example response:
{
    "group_type_id": 2,
    "name": "Второе направление",
    "description": "",
    "hide_on_vk": "",
    "color": "#3f4bd4",
    "video": ""
}

Удалить направление

DELETE
https://yourdomain.listokcrm.ru
/api/external/v2/grouptypes/{groupTypeId}
requires authentication

Метод позволяет удалить направление по ID

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

groupTypeId
integer
required

ID направления

Example:
1
Example request:
curl --request DELETE \
    "https://yourdomain.listokcrm.ru/api/external/v2/grouptypes/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"

Платежи

Получить список способов оплаты

GET
https://yourdomain.listokcrm.ru
/api/external/v2/cash-register
requires authentication

Метод предоставляет список всех созданных типов способов оплаты

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

page
integer
required

Страница

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/cash-register?page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "cashregister_id": 1,
            "type": "cash",
            "name": "Наличный",
            "is_system": 1
        },
        {
            "cashregister_id": 1,
            "type": "cash",
            "name": "Наличный",
            "is_system": 1
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Получить список категорий платежей

GET
https://yourdomain.listokcrm.ru
/api/external/v2/payment-category
requires authentication

Метод предоставляет список всех категорий платежей

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

page
integer
required

Страница

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/payment-category?page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "paymentcategory_id": 1,
            "name": "asd"
        },
        {
            "paymentcategory_id": 1,
            "name": "asd"
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Получить список платежей

GET
https://yourdomain.listokcrm.ru
/api/external/v2/payments
requires authentication

Метод предоставляет список всех неудалённых платежей. Поддерживается необязательная фильтрация по дате (date) или диапазону дат (from/to), максимальный период — 365 дней.

Для доступа требуется хотя бы одна из пермиссий «Доходы (чтение)» или «Расходы (чтение)». Если у пользователя есть только одна из них, в ответе будут только платежи соответствующего направления (доходы или расходы).

Преподаватели видят только платежи, которые провели сами.

Через параметр totals можно запросить итоговые суммы по всему отфильтрованному набору — они вернутся в блоке meta. Доп. запрос выполняется только когда параметр передан.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

page
integer
required

Страница

Example:
1
date
string

Дата платежа. Если указана, то не будут работать from и to.

Example:
2024-01-01
from
string

Дата платежа. Начало периода.

Example:
2024-01-01
to
string

Дата платежа. Конец периода. Период ограничен 365 днями.

Example:
2024-01-31
payment_type
string

Тип платежа. Допустимые значения: pass (абонемент), cert (сертификат), order (заказ), balance (баланс).

Example:
pass
direction
string

Направление платежа. Допустимые значения: income (доход), outcome (расход).

Example:
income
office_id
integer

ID филиала. Фильтр по филиалу платежа.

Example:
1
cashregister_id
integer

ID способа внесения. Фильтр по способу внесения платежа.

Example:
1
totals
string

Список полей для подсчёта итогов по всему отфильтрованному набору, через запятую. Допустимые значения: amount, full_price, init_price. Итоги возвращаются в блоке meta.totals с ключами по именам запрошенных полей.

Example:
amount,full_price

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/payments?page=1&date=2024-01-01&from=2024-01-01&to=2024-01-31&payment_type=pass&direction=income&office_id=1&cashregister_id=1&totals=amount%2Cfull_price" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "payment_id": 1,
            "from_id": 4,
            "to_id": -1,
            "user_id": 1,
            "direction": "income",
            "reason": "Покупка абонемента &quot;Абонемент на 10 занятий&quot; #1. ",
            "date": "09.10.2023",
            "created_at": "2023-10-09T11:56:42.000000Z",
            "amount": 2000,
            "full_price": 2000,
            "balance_paid": 0,
            "total_discount_amount": 0,
            "discount_bonus_amount": null,
            "discount_amount": 0,
            "payment_type": "pass",
            "init_price": 0,
            "office_id": 0,
            "cashregister_id": 1,
            "discounts": {
                "discounts": [
                    {
                        "name": "Another one",
                        "original_name": "Another one",
                        "type": "regular",
                        "amount": 0,
                        "amount_fixed": 0,
                        "amount_percent": 15,
                        "amount_type": null,
                        "code_word": "",
                        "contact_id": 0,
                        "country_id": 1,
                        "discount_id": 3,
                        "discounts_left": 0,
                        "discountslot_id": null,
                        "dynamic_calculator": null,
                        "dynamic_type": null,
                        "limit_per_contact": null,
                        "limited": 0,
                        "master_id": 0,
                        "use_for": "any",
                        "used": 0,
                        "valid_til": null,
                        "pivot": {
                            "amount": 2000,
                            "amountPaid": 2000,
                            "contactId": null,
                            "discountAlgorithm": "sum",
                            "discountAmount": 0,
                            "discountId": 3,
                            "discount_amountFixed": 0,
                            "discount_amountPercent": 15,
                            "discount_codeWord": null,
                            "discount_name": "Another one",
                            "discount_useFor": "any",
                            "order": null,
                            "paymentId": 1
                        }
                    }
                ]
            }
        },
        {
            "payment_id": 1,
            "from_id": 4,
            "to_id": -1,
            "user_id": 1,
            "direction": "income",
            "reason": "Покупка абонемента &quot;Абонемент на 10 занятий&quot; #1. ",
            "date": "09.10.2023",
            "created_at": "2023-10-09T11:56:42.000000Z",
            "amount": 2000,
            "full_price": 2000,
            "balance_paid": 0,
            "total_discount_amount": 0,
            "discount_bonus_amount": null,
            "discount_amount": 0,
            "payment_type": "pass",
            "init_price": 0,
            "office_id": 0,
            "cashregister_id": 1,
            "discounts": {
                "discounts": [
                    {
                        "name": "Another one",
                        "original_name": "Another one",
                        "type": "regular",
                        "amount": 0,
                        "amount_fixed": 0,
                        "amount_percent": 15,
                        "amount_type": null,
                        "code_word": "",
                        "contact_id": 0,
                        "country_id": 1,
                        "discount_id": 3,
                        "discounts_left": 0,
                        "discountslot_id": null,
                        "dynamic_calculator": null,
                        "dynamic_type": null,
                        "limit_per_contact": null,
                        "limited": 0,
                        "master_id": 0,
                        "use_for": "any",
                        "used": 0,
                        "valid_til": null,
                        "pivot": {
                            "amount": 2000,
                            "amountPaid": 2000,
                            "contactId": null,
                            "discountAlgorithm": "sum",
                            "discountAmount": 0,
                            "discountId": 3,
                            "discount_amountFixed": 0,
                            "discount_amountPercent": 15,
                            "discount_codeWord": null,
                            "discount_name": "Another one",
                            "discount_useFor": "any",
                            "order": null,
                            "paymentId": 1
                        }
                    }
                ]
            }
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Подписки

Получить список подписок

GET
https://yourdomain.listokcrm.ru
/api/external/v2/subscriptions
requires authentication

Метод предоставляет данные о подписках клиентов: статус, сумма, дата следующего списания, дата оформления. Поддерживается фильтр по ID абонемента.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

page
integer
required

Страница

Example:
1
pass_id
integer

ID абонемента для фильтрации.

Example:
1
status
string

Статус подписки: active, cancelled, failed, pendingRenewal.

Example:
active

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/subscriptions?page=1&pass_id=1&status=active" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "subscription_id": 19,
            "pass_id": 1,
            "contact_id": 11,
            "status": "active",
            "amount": 1700,
            "next_charge_at": "2026-10-03T09:00:00.000000Z",
            "created_at": "2026-09-01T03:17:54.000000Z"
        },
        {
            "subscription_id": 19,
            "pass_id": 1,
            "contact_id": 11,
            "status": "active",
            "amount": 1700,
            "next_charge_at": "2026-10-03T09:00:00.000000Z",
            "created_at": "2026-09-01T03:17:54.000000Z"
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Противопоказания

Получить список противопоказаний

GET
https://yourdomain.listokcrm.ru
/api/external/v2/sicknesses
requires authentication

Метод предоставляет справочник противопоказаний (их ID и названия) для передачи в карточку клиента

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

page
integer
required

Страница

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/sicknesses?page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "sickness_id": 1,
            "name": "Спорт"
        },
        {
            "sickness_id": 1,
            "name": "Спорт"
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Сотрудники

Преподаватели


Получить список преподавателей

GET
https://yourdomain.listokcrm.ru
/api/external/v2/employees/teachers
requires authentication

Метод предоставляет список всех не удаленных преподавателей.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

page
integer
required

Страница

Example:
1
name
string

ФИО.

Example:
Иванов Иван Иванович
phone
string

Телефон.

Example:
+79529991122, в любом формате
email
string

Email.

Example:
test@test.ru
since_id
integer

Вернуть только клиентов с ID больше указанного. Используется для получения новых клиентов: сохраните максимальный полученный ID и передайте его при следующем запросе.

Example:
1000
includes
string

Загрузка дополнительных сущностей. В объект клиента можно включить: абонементы.

Example:
passes

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/employees/teachers?page=1&name=%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2+%D0%98%D0%B2%D0%B0%D0%BD+%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%87&phone=%2B79529991122%2C+%D0%B2+%D0%BB%D1%8E%D0%B1%D0%BE%D0%BC+%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B5&email=test%40test.ru&since_id=1000&includes=passes" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "contact_id": 1,
            "name": "Иванов Иван Иваныч",
            "gender": "male",
            "birth_date": "1990-01-02",
            "email": "ivanov2@mail.co",
            "phone": "9991111111",
            "note": "",
            "sticky_note": "",
            "created_at": "2016-03-17T05:48:50.000000Z",
            "updated_at": "2025-02-06T07:14:58.000000Z",
            "deleted_at": 0
        },
        {
            "contact_id": 1,
            "name": "Иванов Иван Иваныч",
            "gender": "male",
            "birth_date": "1990-01-02",
            "email": "ivanov2@mail.co",
            "phone": "9991111111",
            "note": "",
            "sticky_note": "",
            "created_at": "2016-03-17T05:48:50.000000Z",
            "updated_at": "2025-02-06T07:14:58.000000Z",
            "deleted_at": 0
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Филиалы

Получить список филиалов

GET
https://yourdomain.listokcrm.ru
/api/external/v2/offices
requires authentication

Метод предоставляет данные о всех неудаленных филиалах

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

page
integer
required

Страница

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/offices?page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "office_id": 0,
            "name": "Основной 1",
            "is_main": 1,
            "address": "Адрес 123, 14",
            "hide_online": 0,
            "order": 0
        },
        {
            "office_id": 0,
            "name": "Основной 1",
            "is_main": 1,
            "address": "Адрес 123, 14",
            "hide_online": 0,
            "order": 0
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}

Создать филиал

POST
https://yourdomain.listokcrm.ru
/api/external/v2/offices
requires authentication

Метод позволяет создать филиал

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://yourdomain.listokcrm.ru/api/external/v2/offices" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"name\": \"Филиал на Новой\",
    \"hide_online\": 0,
    \"address\": \"ул. Новая 123\",
    \"order\": 123
}"
Example response:
{
    "office_id": 0,
    "name": "Основной 1",
    "is_main": 1,
    "address": "Адрес 123, 14",
    "hide_online": 0,
    "order": 0
}

Получить данные филиала

GET
https://yourdomain.listokcrm.ru
/api/external/v2/offices/{officeId}
requires authentication

Метод предоставляет данные о конкретном филиале по ID

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

officeId
integer
required

ID филиала

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/offices/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "office_id": 0,
    "name": "Основной 1",
    "is_main": 1,
    "address": "Адрес 123, 14",
    "hide_online": 0,
    "order": 0
}

Редактировать филиал

PUT
PATCH
https://yourdomain.listokcrm.ru
/api/external/v2/offices/{officeId}
requires authentication

Метод позволяет редактировать филиал

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

officeId
integer
required

ID филиала

Example:
1

Body Parameters

Response Fields

Example request:
curl --request PUT \
    "https://yourdomain.listokcrm.ru/api/external/v2/offices/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest" \
    --data "{
    \"name\": \"Филиал на Новой\",
    \"hide_online\": 0,
    \"address\": \"ул. Новая 123\",
    \"order\": 123
}"
Example response:
{
    "office_id": 0,
    "name": "Основной 1",
    "is_main": 1,
    "address": "Адрес 123, 14",
    "hide_online": 0,
    "order": 0
}

Удалить филиал

DELETE
https://yourdomain.listokcrm.ru
/api/external/v2/offices/{officeId}
requires authentication

Метод позволяет удалить филиал по ID

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

URL Parameters

officeId
integer
required

ID филиала

Example:
1
Example request:
curl --request DELETE \
    "https://yourdomain.listokcrm.ru/api/external/v2/offices/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"

Формы захвата

Получить список форм захвата

GET
https://yourdomain.listokcrm.ru
/api/external/v2/inquiry-forms
requires authentication

Метод предоставляет список всех созданных форм захвата

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
X-Requested-With
Example:
XMLHttpRequest

Query Parameters

page
integer
required

Страница

Example:
1

Response Fields

Example request:
curl --request GET \
    --get "https://yourdomain.listokcrm.ru/api/external/v2/inquiry-forms?page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "X-Requested-With: XMLHttpRequest"
Example response:
{
    "data": [
        {
            "cform_id": 1,
            "name": "еуые"
        },
        {
            "cform_id": 1,
            "name": "еуые"
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1,
            "links": {}
        }
    }
}