Конфигурация кнопки
<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\": \"\"
}"
## 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.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.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.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.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.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 поддерживает опциональное форматирование дат и времени через 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 |
Дата и время |
DATETIMEX-Date-FormatПример:
X-Date-Format: d.m.Y H:i
"created_at": "09.11.2023 09:34"
DATEH, 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
...
}
Следующие значения всегда возвращаются как null:
null0"0""0000-00-00""0000-00-00 00:00:00"Это сделано для корректной работы с legacy-данными и предотвращения некорректных дат.
X-Date-Format не передан, API возвращает даты в прежнем форматеX-Date-Format, если вам нужен стабильный и единый формат датМетод предоставляет данные о всех неудаленных абонементах в аккаунте
Страница
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" {
"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": false,
"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": false,
"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": {}
}
}
}
Метод предоставляет данные о клиентах, у которых есть указанный вид абонемента. Поиск можно отфильтровать по статусу абонемента: активный, неактивированный, замороженный, истекший, отозванный. Параметром include=passContacts можно дополнительно подгрузить массив строк pass_contact каждого клиента по этому абонементу (с учётом фильтра по статусу).
ID абонемента
Страница
Статус (можно несколько через запятую): active, expired, frozen, inactive, revoked.
Опциональный include: passContacts.
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" {
"data": [
{
"contact_id": 1
},
{
"contact_id": 1
}
],
"meta": {
"pagination": {
"total": 2,
"count": 2,
"per_page": 10,
"current_page": 1,
"total_pages": 1,
"links": {}
}
}
}
Метод предоставляет данные о всех неудаленных группах
Страница
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" {
"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:"Times New Roman",serif\">Тренировка по плаванию проходит с персональным тренером. Подходит для детей в возрасте от 2 месяцев до 8 лет. Все тренеры имеют большой профессиональный опыт. </span><span style=\"font-size:12.0pt;font-family:"Times New Roman",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:"Times New Roman",serif\">Тренировка по плаванию проходит с персональным тренером. Подходит для детей в возрасте от 2 месяцев до 8 лет. Все тренеры имеют большой профессиональный опыт. </span><span style=\"font-size:12.0pt;font-family:"Times New Roman",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": {}
}
}
}
Метод позволяет создать группу
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\"
}"
{
"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:"Times New Roman",serif\">Тренировка по плаванию проходит с персональным тренером. Подходит для детей в возрасте от 2 месяцев до 8 лет. Все тренеры имеют большой профессиональный опыт. </span><span style=\"font-size:12.0pt;font-family:"Times New Roman",serif\">Продолжительность занятия - 30 мин.</span></div>",
"disable_online_listing": 0,
"video": "",
"photo": ""
}
Метод предоставляет данные о конкретной группе по ID
ID группы
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" {
"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:"Times New Roman",serif\">Тренировка по плаванию проходит с персональным тренером. Подходит для детей в возрасте от 2 месяцев до 8 лет. Все тренеры имеют большой профессиональный опыт. </span><span style=\"font-size:12.0pt;font-family:"Times New Roman",serif\">Продолжительность занятия - 30 мин.</span></div>",
"disable_online_listing": 0,
"video": "",
"photo": ""
}
Метод позволяет редактировать группу
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\"
}"
{
"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:"Times New Roman",serif\">Тренировка по плаванию проходит с персональным тренером. Подходит для детей в возрасте от 2 месяцев до 8 лет. Все тренеры имеют большой профессиональный опыт. </span><span style=\"font-size:12.0pt;font-family:"Times New Roman",serif\">Продолжительность занятия - 30 мин.</span></div>",
"disable_online_listing": 0,
"video": "",
"photo": ""
}
Метод позволяет удалить группу по ID
ID группы
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" Метод предоставляет данные о всех неудаленных залах
Страница
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" {
"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": {}
}
}
}
Метод позволяет создать зал
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\": \"Зал для фитнеса\"
}"
{
"room_id": 2,
"office_id": 2,
"name": "room 2",
"description": ""
}
Метод предоставляет данные о конкретном зале по ID
ID зала
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" {
"room_id": 2,
"office_id": 2,
"name": "room 2",
"description": ""
}
Метод позволяет редактировать зал
ID зала
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\": \"Зал для фитнеса\"
}"
{
"room_id": 2,
"office_id": 2,
"name": "room 2",
"description": ""
}
Метод позволяет удалить зал по ID
ID зала
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" Метод производит поиск всех не удаленных занятий по всем филиалам. Поиск необходимо запускать с параметром date, формат даты должен быть ГГГГ-ММ-ДД
Дата занятия. Если указана, то не будут работать from и to.
Дата занятия. Начало периода.
Дата занятия. Конец периода. Период ограничен 7 днями.
Загрузка дополнительных сущностей. В объект занятия можно включить: записи, посещения, лист ожидания.
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" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "X-Requested-With: XMLHttpRequest" {
"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": {}
}
}
}
Метод позволяет создать занятие
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\": \"Комментарий\",
\"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
}"
{
"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"
}
Метод предоставляет данные о конкретном неудаленном занятии по ID. Также метод предоставляет данные о записанных, в том числе в Лист ожидания, и отмеченных клиентах
ID занятия
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" {
"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"
}
Метод позволяет редактировать занятие
ID занятия
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\": \"Комментарий\",
\"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
}"
{
"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"
}
Метод позволяет удалить занятие по ID
ID занятия
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" Метод создает заявки от конкретного клиента
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\"
}"
Метод предоставляет список источников
Страница
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" {
"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": {}
}
}
}
Метод возвращает все доступные кастомные поля для клиентов. Используйте для определения, какие поля можно заполнить при создании/редактировании клиента.
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" {
"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": {}
}
}
}
Метод предоставляет данные о всех неудаленных клиентах
Страница
ФИО.
Телефон.
Email.
Вернуть только клиентов с ID больше указанного. Используется для получения новых клиентов: сохраните максимальный полученный ID и передайте его при следующем запросе.
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" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "X-Requested-With: XMLHttpRequest" {
"data": [
{
"contact_id": 1,
"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,
"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": {}
}
}
}
Метод создает нового клиента
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,
\"birth_date\": \"01.01.1990\",
\"custom_fields\": [
{
\"field_id\": 1,
\"value\": \"Значение\"
}
]
}"
{
"contact_id": 1,
"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
}
Метод предоставляет данные о конкретном клиенте по ID
ID клиента
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" {
"contact_id": 1,
"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
}
Метод обновляет данные существующего клиента по ID
ID клиента
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,
\"birth_date\": \"01.01.1990\",
\"custom_fields\": [
{
\"field_id\": 1,
\"value\": \"Значение\"
}
]
}"
{
"contact_id": 1,
"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
}
Метод позволяет оформить абонемент клиенту
ID клиента
ID абонемента
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
}"
{
"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": false,
"allow_buying_pass_mobile": 0,
"allow_buying_pass_online": 0
}
}
Метод позволяет сгенерировать ссылку на оплату абонемента
ID клиента
ID абонемента
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
}"
{
"id": 1,
"link": "https://st_local.listokcrm.ru/wapi/startpaylink/"
}
Метод предоставляет данные о всех абонементах клиента. Абонементы фильтруются по статусу: активный, неактивированный, замороженный, истекший, отозванный
ID клиента
Страница
Статус (необязательный, можно несколько через запятую): active, expired, frozen, inactive, revoked. Если не передан — возвращаются все абонементы клиента.
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" {
"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": false,
"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": false,
"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": {}
}
}
}
Метод предоставляет данные о конкретном абонементе конкретного клиента
ID клиента
ID абонемента клиента
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" {
"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": false,
"allow_buying_pass_mobile": 0,
"allow_buying_pass_online": 0
}
}
Метод позволяет заморозить активный абонемент клиента. Можно указать дату начала заморозки (plannedFreezeAt) и срок заморозки в днях (freezeDays). Если дата начала не указана — абонемент замораживается сразу; если не указан срок — используется максимально доступное количество дней заморозки абонемента. Дата разморозки вычисляется автоматически. Доступное число заморозок (freezeTimes) уменьшается на 1.
ID клиента
ID абонемента клиента
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
}"
{
"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": false,
"allow_buying_pass_mobile": 0,
"allow_buying_pass_online": 0
}
}
Метод отменяет ранее запланированную (ещё не наступившую) заморозку абонемента. Абонемент остаётся активным, число доступных заморозок (freezeTimes) не расходуется. Если у абонемента нет запланированной заморозки — возвращается ошибка.
ID клиента
ID абонемента клиента
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" {
"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": false,
"allow_buying_pass_mobile": 0,
"allow_buying_pass_online": 0
}
}
Метод позволяет разморозить ранее замороженный абонемент клиента. Статус абонемента переводится в active, дата окончания заморозки очищается.
ID клиента
ID абонемента клиента
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" {
"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": false,
"allow_buying_pass_mobile": 0,
"allow_buying_pass_online": 0
}
}
Метод предоставляет данные о всех записях на занятия конкретного клиента. Дополнительно метод производит поиск по id занятия, чтобы проверить запись клиента на конкретное занятие
ID клиента
Страница
Id занаятия.
Пропуск.
curl --request GET \
--get "https://yourdomain.listokcrm.ru/api/external/v2/contacts/1/listings?page=1&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" {
"data": [
{
"listing_id": 55,
"event_id": 163308,
"contact_id": 15,
"source": "",
"missed_pass_contact_id": 0,
"is_missed": false,
"created_at": "2023-12-12T07:38:31.000000Z"
},
{
"listing_id": 55,
"event_id": 163308,
"contact_id": 15,
"source": "",
"missed_pass_contact_id": 0,
"is_missed": false,
"created_at": "2023-12-12T07:38:31.000000Z"
}
],
"meta": {
"pagination": {
"total": 2,
"count": 2,
"per_page": 10,
"current_page": 1,
"total_pages": 1,
"links": {}
}
}
}
Метод позволяет отменить одну запись конкретного клиента с конкретного занятия
ID клиента
ID записи
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" Метод позволяет записать конкретного клиента на конкретное занятие. Не позволит записать клиента в лист ожидания. Для этого используется отдельные метод: «Добавить в лист ожидания»
ID клиента
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\"
}"
{
"listing_id": 55,
"event_id": 163308,
"contact_id": 15,
"source": "",
"missed_pass_contact_id": 0,
"is_missed": false,
"created_at": "2023-12-12T07:38:31.000000Z"
}
Метод предоставляет список всех посещений конкретного клиента. По дополнительному параметру eventId,метод предоставит данные о посещении на конкретном занятии
ID клиента
Страница
Дата посещения. Если указана, то не будут работать from и to.
Дата посещения. Начало периода.
Дата посещения. Конец периода. Период ограничен 31 днями.
Id занаятия.
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" {
"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": {}
}
}
}
Метод позволяет отменить посещение конкретного клиента
ID клиента
ID посещения
Используется при оплате посещения без абонемента. withdraw - вернуть клиенту, deposit - вернуть на счет клиента. По умолчанию: withdraw.
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" Метод позволит отметить конкретного клиента на конкретном занятии
ID клиента
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\"
}"
{
"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"
}
Метод позволит оплатить посещение клиента без абонемента
ID клиента
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\": \"laboriosam\",
\"price\": 1000,
\"amount\": 500
}"
{
"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"
}
Метод предоставляет все записи из листа ожидания конкретного клиента. Условие: на аккаунте включен лист ожидания
ID клиента
Страница
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" {
"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": {}
}
}
}
Метод позволяет отменить запись клиента в листе ожидания. Условие: на аккаунте включен лист ожидания
ID клиента
ID листа ожидания
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" {
"queue_id": 5,
"event_id": 23,
"contact_id": 4,
"created_at": "2023-11-20T04:21:57.000000Z"
}
Метод позволяет добавить конкретного клиента в лист ожидания на занятие. Условие: на аккаунте включен лист ожидания
ID клиента
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\"
}"
{
"queue_id": 5,
"event_id": 23,
"contact_id": 4,
"created_at": "2023-11-20T04:21:57.000000Z"
}
Метод предоставляет список всех заметок конкретного клиента
ID клиента
Страница
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" {
"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": {}
}
}
}
Метод предоставляет данные конкретной заметки клиента
ID клиента
The ID of the note.
ID заметки
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" {
"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 клиента
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
}"
{
"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 клиента
The ID of the note.
ID заметки
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
}"
{
"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 клиента
The ID of the note.
ID заметки
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" Метод предоставляет все неудаленные платежи по конкретному клиенту. Поддерживает фильтрацию по дате или периоду.
ID клиента
Страница
Дата платежа. Если указана, то не будут работать from и to.
Дата платежа. Начало периода.
Дата платежа. Конец периода. Период ограничен 31 днями.
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" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "X-Requested-With: XMLHttpRequest" {
"data": [
{
"payment_id": 1,
"from_id": 4,
"to_id": -1,
"user_id": 1,
"direction": "income",
"reason": "Покупка абонемента "Абонемент на 10 занятий" #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": "Покупка абонемента "Абонемент на 10 занятий" #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": {}
}
}
}
Метод предоставляет постраничный список всех записей истории бонусов клиента (начисления, списания, истечения), отсортированных по дате создания (новые сверху).
ID клиента
Страница
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" {
"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": {}
}
}
}
Метод позволяет начислить бонусы клиенту с указанием основания и опционального срока действия. Требует включённой бонусной системы и пермишена 'Начисление бонусов в карточке клиента' у владельца токена.
ID клиента
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
}"
{
"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"
}
Метод предоставляет данные о всех неудаленных направлениях
Страница
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" {
"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": {}
}
}
}
Метод позволяет создать направление
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\"
}"
{
"group_type_id": 2,
"name": "Второе направление",
"description": "",
"hide_on_vk": "",
"color": "#3f4bd4",
"video": ""
}
Метод предоставляет данные о конкретном направлении по ID
ID направления
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" {
"group_type_id": 2,
"name": "Второе направление",
"description": "",
"hide_on_vk": "",
"color": "#3f4bd4",
"video": ""
}
Метод позволяет редактировать направление
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\"
}"
{
"group_type_id": 2,
"name": "Второе направление",
"description": "",
"hide_on_vk": "",
"color": "#3f4bd4",
"video": ""
}
Метод позволяет удалить направление по ID
ID направления
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" Метод предоставляет список всех созданных типов способов оплаты
Страница
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" {
"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": {}
}
}
}
Метод предоставляет список всех категорий платежей
Страница
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" {
"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": {}
}
}
}
Метод предоставляет список всех неудалённых платежей. Поддерживается необязательная фильтрация по дате (date) или диапазону дат (from/to), максимальный период — 365 дней.
Для доступа требуется хотя бы одна из пермиссий «Доходы (чтение)» или «Расходы (чтение)». Если у пользователя есть только одна из них, в ответе будут только платежи соответствующего направления (доходы или расходы).
Преподаватели видят только платежи, которые провели сами.
Через параметр totals можно запросить итоговые суммы по всему отфильтрованному набору — они вернутся в блоке meta. Доп. запрос выполняется только когда параметр передан.
Страница
Дата платежа. Если указана, то не будут работать from и to.
Дата платежа. Начало периода.
Дата платежа. Конец периода. Период ограничен 365 днями.
Тип платежа. Допустимые значения: pass (абонемент), cert (сертификат), order (заказ), balance (баланс).
ID филиала. Фильтр по филиалу платежа.
ID способа внесения. Фильтр по способу внесения платежа.
Список полей для подсчёта итогов по всему отфильтрованному набору, через запятую. Допустимые значения: amount, full_price, init_price. Итоги возвращаются в блоке meta.totals с ключами по именам запрошенных полей.
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&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" {
"data": [
{
"payment_id": 1,
"from_id": 4,
"to_id": -1,
"user_id": 1,
"direction": "income",
"reason": "Покупка абонемента "Абонемент на 10 занятий" #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": "Покупка абонемента "Абонемент на 10 занятий" #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": {}
}
}
}
Метод предоставляет данные о подписках клиентов: статус, сумма, дата следующего списания, дата оформления. Поддерживается фильтр по ID абонемента.
Страница
ID абонемента для фильтрации.
Статус подписки: active, cancelled, failed, pendingRenewal.
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" {
"data": [
{
"subscription_id": 0,
"pass_id": 0,
"contact_id": 0,
"status": "",
"amount": null,
"next_charge_at": null,
"created_at": null
},
{
"subscription_id": 0,
"pass_id": 0,
"contact_id": 0,
"status": "",
"amount": null,
"next_charge_at": null,
"created_at": null
}
],
"meta": {
"pagination": {
"total": 2,
"count": 2,
"per_page": 10,
"current_page": 1,
"total_pages": 1,
"links": {}
}
}
}
Метод предоставляет список всех не удаленных преподавателей
Страница
ФИО.
Телефон.
Email.
Вернуть только клиентов с ID больше указанного. Используется для получения новых клиентов: сохраните максимальный полученный ID и передайте его при следующем запросе.
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" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "X-Requested-With: XMLHttpRequest" {
"data": [
{
"contact_id": 1,
"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,
"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": {}
}
}
}
Метод предоставляет данные о всех неудаленных филиалах
Страница
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" {
"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": {}
}
}
}
Метод позволяет создать филиал
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
}"
{
"office_id": 0,
"name": "Основной 1",
"is_main": 1,
"address": "Адрес 123, 14",
"hide_online": 0,
"order": 0
}
Метод предоставляет данные о конкретном филиале по ID
ID филиала
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" {
"office_id": 0,
"name": "Основной 1",
"is_main": 1,
"address": "Адрес 123, 14",
"hide_online": 0,
"order": 0
}
Метод позволяет редактировать филиал
ID филиала
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
}"
{
"office_id": 0,
"name": "Основной 1",
"is_main": 1,
"address": "Адрес 123, 14",
"hide_online": 0,
"order": 0
}
Метод позволяет удалить филиал по ID
ID филиала
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" Метод предоставляет список всех созданных форм захвата
Страница
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" {
"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": {}
}
}
}