Download OpenAPI specification:
Руководство интеграций Reezonly Space — это главный источник информации, благодаря которому внешние CRM, CMS, ERP и маркетинговые системы быстро подключают программный доступ к Space API.
Здесь собраны схемы аутентификации, бизнес‑блоки пользователей, групп, курсов, сертификатов и отчетов, примеры запросов и схемы ответов. Документация рассказывает, как синхронизировать пользователей, подтянуть группы и права из вашей CRM, создавать курсы и выгружать отчеты — все через безопасный X-API-Key и понятные бизнес-сущности.
Для доступа к API необходимо использовать API Key в заголовке запроса:
X-API-Key: your_api_key_here
Назначение: CRUD для пользователей, управление статусами и ролями. Ключевые особенности:
status (int), role, department.view и update.Возвращает список пользователей с пагинацией и расширенными фильтрами. Поддерживает сортировку и фильтрацию по группам, курсам и сумме оплат.
| page | integer >= 1 Default: 1 Example: page=1 Номер страницы для пагинации |
| per_page | integer [ 1 .. 100 ] Default: 20 Example: per_page=50 Количество элементов на странице (максимум 100) |
| username | string Поиск по имени или email |
| status | integer Enum: 0 10 20 30 Статус: 0=New, 10=Active, 20=Blocked, 30=Unconfirmed |
| position | string Фильтр по должности |
| department | string Фильтр по отделу |
| groupIds | Array of integers Фильтр по ID групп |
| courseIds | Array of integers Фильтр по ID курсов (имеет доступ) |
| sort | string Default: "-updated_at" Example: sort=-created_at Поле сортировки: username, email, position, department, status, courseCount, created_at, updated_at, payment_sum. Префикс '-' для убывания. |
{- "success": true,
- "meta": {
- "total": 150,
- "page": 1,
- "per_page": 20
}, - "data": {
- "pagination": {
- "total": 150,
- "page": 1,
- "per_page": 20
}, - "items": [
- {
- "id": 1,
- "username": "john_doe",
- "email": "user@example.com",
- "department": "Marketing",
- "position": "Manager",
- "status": 10,
- "created_at": 1699459200,
- "updated_at": 1699459200,
- "role": "admin",
- "educationAccess": true,
- "courseCount": 5,
- "payment_sum": 2999.99,
- "groups": [
- {
- "id": 1,
- "name": "Отдел продаж",
- "description": "Сотрудники отдела продаж",
- "parent_id": null,
- "members_count": 25,
- "hierarchy_level": 0,
- "created_at": 1705316400
}
]
}
]
}
}Аналогичен методу index, но возвращает только пользователей с правами администратора.
| page | integer >= 1 Default: 1 Example: page=1 Номер страницы для пагинации |
| per_page | integer [ 1 .. 100 ] Default: 20 Example: per_page=50 Количество элементов на странице (максимум 100) |
| username | string Поиск по имени или email |
| sort | string Default: "-updated_at" Поле сортировки |
{- "success": true,
- "meta": {
- "total": 150,
- "page": 1,
- "per_page": 20
}, - "data": {
- "pagination": {
- "total": 150,
- "page": 1,
- "per_page": 20
}, - "items": [
- {
- "id": 1,
- "username": "john_doe",
- "email": "user@example.com",
- "department": "Marketing",
- "position": "Manager",
- "status": 10,
- "created_at": 1699459200,
- "updated_at": 1699459200,
- "role": "admin",
- "educationAccess": true,
- "courseCount": 5,
- "payment_sum": 2999.99,
- "groups": [
- {
- "id": 1,
- "name": "Отдел продаж",
- "description": "Сотрудники отдела продаж",
- "parent_id": null,
- "members_count": 25,
- "hierarchy_level": 0,
- "created_at": 1705316400
}
]
}
]
}
}Возвращает детальную информацию о пользователе, включая курсы, сертификаты и кастомные поля.
| id required | integer >= 1 Example: id=42 Идентификатор ресурса |
{- "success": true,
- "meta": {
- "total": 150,
- "page": 1,
- "per_page": 20
}, - "data": {
- "item": {
- "id": 1,
- "username": "john_doe",
- "email": "user@example.com",
- "department": "Marketing",
- "position": "Manager",
- "status": 10,
- "created_at": 1699459200,
- "updated_at": 1699459200,
- "role": "admin",
- "educationAccess": true,
- "courseCount": 5,
- "payment_sum": 2999.99,
- "groups": [
- {
- "id": 1,
- "name": "Отдел продаж",
- "description": "Сотрудники отдела продаж",
- "parent_id": null,
- "members_count": 25,
- "hierarchy_level": 0,
- "created_at": 1705316400
}
], - "phone": "+79991234567",
- "waitRequest": [
- { }
], - "certificates": [
- {
- "id": 45,
- "number": "CERT-2024-001",
- "created_at": 1727772000,
- "course": {
- "id": 456,
- "alias": "onboarding-2024",
- "title": "Онбординг",
- "type_id": 1,
}, - "user": {
- "id": 123,
- "username": "Иван Иванов",
- "email": "ivan@example.com"
}, - "fields": [
- {
- "key": "username",
- "value": "Иван Иванов"
}
], - "template": {
- "id": 2,
- "name": "Gold Award",
- "hide_for_student": false,
- "type": {
- "id": 1,
- "name": "Course completion"
}
}
}
], - "courses": [
- {
- "id": 1,
- "title": "example",
- "status": 10,
- "progress": 75.5,
- "amount": 2999.99,
- "group": "Group 1"
}
], - "userFields": [
- {
- "id": 1,
- "name": "John Doe",
- "title": "Advanced Python",
- "type": 1
}
]
}
}
}Создает нового пользователя. Пароль обязателен. Привязка к группам и курсам при создании не поддерживается (используйте отдельные методы).
| username required | string Уникальное имя пользователя |
| email required | string <email> Электронная почта (должна быть уникальной) |
| password required | string Пароль пользователя |
| role | string Роль пользователя (admin, user и т.д.) |
| department | string Отдел или подразделение |
| position | string Должность пользователя |
{- "success": true,
- "meta": {
- "total": 150,
- "page": 1,
- "per_page": 20
}, - "data": {
- "user_id": 1
}
}Обновляет данные профиля, включая кастомные поля.
| id required | integer >= 1 Example: id=42 Идентификатор ресурса |
| username | string Уникальное имя пользователя |
string Электронная почта (должна быть уникальной) | |
| department | string Отдел или подразделение |
| position | string Должность пользователя |
| password | string Пароль пользователя (оставьте пустым, чтобы не менять) |
| role | string Роль пользователя (admin, user и т.д.) |
{- "success": true,
- "meta": {
- "total": 150,
- "page": 1,
- "per_page": 20
}, - "data": {
- "user_id": 1
}
}Удаляет одного или нескольких пользователей.
| ids | Array of integers Массив ID пользователей для удаления (опционально, если не передано - ошибка?) |
{- "success": true,
- "meta": {
- "total": 150,
- "page": 1,
- "per_page": 20
}
}Возвращает список всех возможных статусов пользователей (New, Active, Blocked, Unconfirmed) с их ID для использования в фильтрах и при создании пользователей.
{- "success": true,
- "items": [
- {
- "id": 1,
- "name": "John Doe"
}
]
}Назначение: назначение и отзыв курсов.
Особенности: методы add-course и delete-course работают асинхронно.
Назначает один или несколько курсов одному или нескольким пользователям. Операция выполняется асинхронно. Если пользователь уже имеет доступ к курсу, отметка new=false указывает на существующее назначение.
| userIds required | Array of integers |
required | Array of objects |
{- "success": true,
- "results": [
- {
- "userId": 1,
- "courseId": 1,
- "result": true,
- "new": true
}
]
}Удаляет доступ одного или нескольких пользователей к одному или нескольким курсам. После удаления прогресс прохождения курса сохраняется, но пользователь больше не может получать доступ к материалам и выполнять задания курса.
| userIds required | Array of integers |
required | Array of objects |
{- "success": true,
- "results": 1
}Назначение: массовая загрузка пользователей из Excel.
Процесс: load-template -> preview -> load (commit) -> get-import-progress.
Возвращает Excel-шаблон для массового импорта пользователей. Содержит необходимые колонки (username, email, password, department, position и др.) с примерами и подсказками. Используйте этот файл как основу для подготовки данных к импорту.
{- "success": false,
- "errors": {
- "server": [
- "Internal server error. Try again later"
]
}
}Валидирует загруженный файл и показывает предварительный просмотр данных, которые будут импортированы. Помогает обнаружить ошибки в формате или содержимом перед фактическим импортом. Возвращает список строк и ошибок валидации для каждой записи.
| fileImport | string <binary> |
| updateMode | boolean |
{- "success": true,
- "meta": {
- "total": 150,
- "page": 1,
- "per_page": 20
}, - "data": {
- "preview": { }
}
}Запускает асинхронный процесс импорта пользователей из загруженного файла. Возвращает jobId для отслеживания прогресса и reportKey для получения результатов. Используйте метод get-import-progress для мониторинга и получения финального отчета.
| fileImport | string <binary> |
| updateMode | boolean |
{- "success": true,
- "meta": {
- "total": 150,
- "page": 1,
- "per_page": 20
}, - "data": {
- "jobId": 1,
- "reportKey": "example"
}
}Возвращает текущий статус и прогресс импорта пользователей. Параметр id должен содержать reportKey из ответа метода load. По завершении импорта включает финальный отчет с результатами (количество успешно импортированных, ошибки, предупреждения).
| id required | string Report Key из метода load |
{- "success": true,
- "meta": {
- "total": 150,
- "page": 1,
- "per_page": 20
}, - "data": {
- "progress": 1,
- "report": { }
}
}Возвращает список всех выполненных импортов пользователей с пагинацией. Каждый отчет содержит информацию о дате импорта, количестве обработанных записей, количестве ошибок и результатах. Используйте метод downloadUserImportReport для получения детального отчета в формате Excel.
| page | integer >= 1 Default: 1 Example: page=1 Номер страницы для пагинации |
| per_page | integer [ 1 .. 100 ] Default: 20 Example: per_page=50 Количество элементов на странице (максимум 100) |
| type | integer Фильтр по типу отчета |
{- "success": true,
- "meta": {
- "total": 150,
- "page": 1,
- "per_page": 20
}, - "data": {
- "pagination": {
- "total": 150,
- "page": 1,
- "per_page": 20
}, - "items": [
- {
- "id": 456,
- "status": "completed",
- "total": 100,
- "processed": 98,
- "errors": 2,
- "created_at": 1705316400,
- "updated_at": 1705319400
}
]
}
}Возвращает детальный отчет об импорте в формате Excel. Отчет содержит информацию о каждой обработанной строке (успех/ошибка), данные пользователя и результат обработки. Используйте ID отчета из метода listUserImportReports.
| id required | integer ID отчета об импорте |
{- "success": false,
- "errors": {
- "server": [
- "Internal server error. Try again later"
]
}
}Назначение: выстроить иерархию корпоративных групп с поддержкой вложенности, фильтрации и синхронизации с продуктами/ролями. Ключевые особенности:
PaginationMeta.Group, GroupListItem и стандартные ответы на ошибки.
Пример Use case: интегратор CRM подстраивает дерево отделов: получает групповой каталог, создаёт новый подраздел с POST /group/group/create, затем проверяет структуру через /group/group/view.Возвращает список групп (без пагинации).
Поддерживаются фильтры по id, parent_id, строке поиска и флагу showDefault (0/1).
Сортировка задаётся параметром sort (например, sort=updated_at или sort=-updated_at).
| id | integer >= 1 Example: id=12 ID группы |
| parent_id | integer >= 1 Example: parent_id=10 ID родительской группы; если не указан — выводятся все корневые |
| search | string <= 255 characters Example: search=Sales Поиск по названию или описанию группы |
| sort | string Default: "-updated_at" Enum: "id" "-id" "search" "-search" "updated_at" "-updated_at" "userCount" "-userCount" Example: sort=-updated_at Поле сортировки (префикс |
| showDefault | integer Default: 0 Enum: 0 1 Показывать системные группы (guest/authorized) |
{- "success": true,
- "data": {
- "items": [
- {
- "id": 1,
- "name": "IT Department",
- "comment": "Разработка и поддержка IT систем",
- "hierarchyPathString": "IT Department",
- "userCount": 25,
- "type": 2,
- "created_at": 1692979543,
- "updated_at": 1692979543
}, - {
- "id": 2,
- "name": "Development Team",
- "comment": "Frontend и backend разработка",
- "hierarchyPathString": "IT Department / Development Team",
- "userCount": 15,
- "type": 2,
- "parent_id": 1,
- "image": null,
- "created_at": 1692983410,
- "updated_at": 1692983410
}
]
}
}Возвращает полную информацию о группе.
| id required | integer >= 1 Example: id=1 ID группы |
{- "success": true,
- "data": {
- "item": {
- "id": 1,
- "name": "IT Department",
- "comment": "Разработка и поддержка IT систем",
- "hierarchyPathString": "IT Department",
- "userCount": 25,
- "type": 2,
- "parent_id": null,
- "created_at": 1692979543,
- "updated_at": 1692979543,
- "users": [
- {
- "id": 101,
- "username": "john.doe",
- "email": "john.doe@company.com",
- "role": "admin",
- "created_at": "2023-08-25T14:20:00Z"
}, - {
- "id": 102,
- "username": "jane.smith",
- "email": "jane.smith@company.com",
- "role": "editor",
- "created_at": "2023-08-25T14:25:00Z"
}
], - "children": [
- {
- "id": 2,
- "name": "Development Team",
- "userCount": 15,
- "hierarchyPathString": "IT Department / Development Team"
}
]
}, - "rules": [ ]
}
}Создает новую группу пользователей с поддержкой иерархии. Автоматически валидирует структуру иерархии, предотвращая циклические зависимости. Поддерживает загрузку изображения группы и опциональное добавление пользователей.
Бизнес-логика:
| name required | string [ 2 .. 255 ] characters Название группы (обязательное поле) |
| comment | string <= 512 characters Описание группы (опционально) |
| parent_id | integer or null >= 1 ID родительской группы:
|
| user_ids | Array of integers <= 100 items [ items >= 1 ] Пользователи для добавления в группу |
| image_upload | string <binary> Файл изображения группы (через multipart/form-data) |
{ "name": "Support" }
{- "success": true,
- "data": {
- "group_id": 25
}
}Обновляет базовую информацию о группе: название, описание, родительскую группу. При изменении parent_id автоматически перестраивается иерархический путь для всех дочерних групп.
Важно: Изменение родительской группы затрагивает всю ветку дочерних групп.
| id required | integer >= 1 Example: id=12 ID группы для обновления |
| name required | string [ 2 .. 255 ] characters Название группы (обязательное поле) |
| comment | string <= 512 characters Описание группы (опционально) |
| parent_id | integer or null >= 1 ID родительской группы:
|
| user_ids | Array of integers <= 100 items [ items >= 1 ] Пользователи для добавления в группу |
| image_upload | string <binary> Файл изображения группы (через multipart/form-data) |
{ "name": "Sales / Enterprise" }
{- "success": true,
- "data": {
- "group_id": 10
}
}Удаляет группу и все связанные данные:
Важно: Нельзя удалить группу, у которой есть дочерние группы. Сначала нужно удалить или переместить все дочерние группы.
| id required | integer >= 1 ID группы для удаления |
{- "success": true
}Удаляет несколько групп за один запрос. Каждая группа проверяется на отсутствие дочерних групп перед удалением.
| groupIds required | Array of integers <= 50 items [ items >= 1 ] Массив ID групп для удаления (максимум 50) |
{ "groupIds": [ 10, 11, 12 ] }
{- "success": true
}Возвращает плоский список групп; иерархия собирается на клиенте при необходимости.
| showDefault | integer Default: 0 Enum: 0 1 Показать системные группы (гостевые/авторизованные) |
{- "success": true,
- "items": [
- {
- "id": 1,
- "name": "Root"
}, - {
- "id": 2,
- "name": "Sales",
- "parent_id": 1
}, - {
- "id": 3,
- "name": "Marketing"
}
]
}Создаёт задачу экспорта групп по указанным фильтрам. Возвращает идентификатор экспорта и ссылку для скачивания после формирования.
Назначение: выгрузка дерева групп для сверки с внешней HR/CRM и последующего импорта/миграции.
Пример Use case: HR переносит сотрудников между группами, обновляет курсы через assign-courses, а затем скачивает актуальный экспорт структуры, чтобы сверить дерево отделов с HRM.
| property name* additional property | any |
{- "format": "xlsx",
- "include_users": false
}{- "success": true,
}Возвращает файл экспорта (XLSX/CSV) по идентификатору задачи экспорта. Используется после получения уведомления о готовности экспорта или поллинга статуса.
| id required | integer >= 1 ID задания экспорта |
UEsDBBQACAgI...
Назначение: массово добавлять/удалять пользователей и назначать курсы для групп на стороне интеграции.
Ключевые особенности: простые payload’ы (user_id, course_ids, списки ids[]), поддержка экспорта, assign-courses для курсов, DELETE /multiple-delete.
Пример Use case: HR переносит 50 сотрудников между группами, одновременно обновляя назначенные курсы через POST /group/group/assign-courses, а затем скачивает экспорт структуры (/group/group/export).
Добавляет пользователей в одну или несколько групп. Поддерживает пакетную обработку до 100 пользователей. Проверяет дубликаты и автоматически пропускает уже добавленных пользователей.
| groupIds required | Array of integers [ 1 .. 10 ] items [ items >= 1 ] ID групп для операции |
| userIds required | Array of integers [ 1 .. 100 ] items [ items >= 1 ] ID пользователей для добавления/удаления |
| role | string Enum: "superadmin" "admin" "editor" "curator" "student" Роль пользователя в группе (опционально, используется при добавлении) |
{- "success": true,
- "meta": {
- "total": 150,
- "page": 1,
- "per_page": 20
}
}Удаляет пользователей из указанных групп. Автоматически обрабатывает ситуации, когда пользователя нет в группе.
| groupIds required | Array of integers [ 1 .. 10 ] items [ items >= 1 ] ID групп для операции |
| userIds required | Array of integers [ 1 .. 100 ] items [ items >= 1 ] ID пользователей для добавления/удаления |
| role | string Enum: "superadmin" "admin" "editor" "curator" "student" Роль пользователя в группе (опционально, используется при добавлении) |
{- "success": true,
- "meta": {
- "total": 150,
- "page": 1,
- "per_page": 20
}
}Назначает указанные курсы всем текущим участникам группы. Операция выполняется асинхронно через очередь для больших групп.
| group_id required | integer >= 1 ID группы, для которой назначаются курсы |
| course_ids required | Array of integers [ 1 .. 50 ] items [ items >= 1 ] Идентификаторы курсов для назначения |
{- "success": true
}Управление шаблонами для генерации PDF сертификатов: внешний вид, расположение элементов и переменные для подстановки данных (read-only).
Возвращает все доступные шаблоны для генерации сертификатов
| page | integer >= 1 Default: 1 Example: page=1 Номер страницы для пагинации |
| per_page | integer [ 1 .. 100 ] Default: 20 Example: per_page=50 Количество элементов на странице (максимум 100) |
| active_only | boolean Default: true Показать только активные шаблоны |
{- "success": true,
- "data": {
- "pagination": {
- "total": 2,
- "page": 1,
- "per_page": 20
}, - "items": [
- {
- "id": 1,
- "name": "Default Blue",
- "description": "Базовый синий шаблон",
- "active": true,
- "created_at": 1727772000,
- "updated_at": 1730419200
}, - {
- "id": 2,
- "name": "Gold Award",
- "description": "Золотой шаблон для VIP выпусков",
- "active": true,
- "created_at": 1728115200,
- "updated_at": 1730534400
}
]
}
}Возвращает полную информацию о шаблоне включая переменные и предпросмотр
| id required | integer >= 1 Example: id=42 Идентификатор ресурса |
{- "success": true,
- "data": {
- "id": 2,
- "name": "Gold Award",
- "description": "Золотой шаблон для VIP выпусков",
- "template_html": "<html>...шаблон...</html>",
- "variables": [
- {
- "name": "username",
- "type": "string",
- "description": "Имя студента",
- "required": true
}, - {
- "name": "course_title",
- "type": "string",
- "required": true
}
], - "active": true
}
}Возвращает список выданных сертификатов с фильтрацией
| page | integer >= 1 Default: 1 Example: page=1 Номер страницы для пагинации |
| per_page | integer [ 1 .. 100 ] Default: 20 Example: per_page=50 Количество элементов на странице (максимум 100) |
| sort | string Example: sort=-created_at Сортировка результатов (например, -created_at для обратной сортировки) |
| search | string Поиск по сертификатам |
| course_id | integer >= 1 Фильтр по ID курса |
| user_id | integer >= 1 Фильтр по ID пользователя |
{- "success": true,
- "data": {
- "pagination": {
- "total": 2,
- "page": 1,
- "per_page": 20
}, - "items": [
- {
- "id": 45,
- "number": "CERT-2024-001",
- "created_at": 1727772000,
- "course": {
- "id": 456,
- "alias": "onboarding-2024",
- "title": "Онбординг",
- "type_id": 1,
}, - "user": {
- "id": 123,
- "username": "Иван Иванов",
- "email": "ivan@example.com"
},
}, - {
- "id": 46,
- "number": "CERT-2024-002",
- "created_at": 1728115200,
- "course": {
- "id": 480,
- "alias": "sales-master-2024",
- "title": "Продажи B2B",
- "type_id": 2,
}, - "user": {
- "id": 140,
- "username": "Мария Петрова",
- "email": "maria@example.com"
},
}
]
}
}Возвращает детальную информацию о конкретном выданном сертификате
| id required | integer >= 1 Example: id=42 Идентификатор ресурса |
{- "success": true,
- "data": {
- "id": 45,
- "number": "CERT-2024-001",
- "created_at": 1727772000,
- "user": {
- "id": 123,
- "username": "Иван Иванов",
- "email": "ivan@example.com"
}, - "course": {
- "id": 456,
- "alias": "onboarding-2024",
- "title": "Онбординг",
- "type_id": 1,
}, - "fields": [
- {
- "key": "student_name",
- "value": "Иван Иванов"
}, - {
- "key": "course_title",
- "value": "Онбординг"
}
], - "template": {
- "id": 2,
- "name": "Gold Award",
- "hide_for_student": false,
- "type": {
- "id": 1,
- "name": "Course completion"
}
}
}
}Выдает новый сертификат пользователю за прохождение курса
| user_id required | integer >= 1 ID пользователя |
| course_id required | integer >= 1 ID курса |
| template_id required | integer >= 1 ID шаблона сертификата |
| issue_date | string <date> Дата выдачи (по умолчанию текущая) |
| expires_at | string <date> Дата истечения (необязательно) |
| custom_data | object Дополнительные данные для шаблона |
{- "user_id": 123,
- "course_id": 456,
- "template_id": 2,
- "issue_date": "2024-01-15",
- "expires_at": "2025-01-15",
- "custom_data": {
- "username": "Иван Иванов",
- "course_title": "Онбординг"
}
}{- "success": true,
- "message": "Certificate created"
}Запускает генерацию ZIP-архива сертификатов по фильтрам (search, course_id, user_id, пагинация, сортировка). Одновременно может быть только одна активная задача на ключ.
Назначение: массовая выгрузка сертификатов для передачи внешним системам или печати.
Пример Use case: администратор выбирает курс и диапазон пользователей, запускает экспорт и получает ссылку на архив.
| search | string |
| course_id | integer >= 1 |
| user_id | integer >= 1 |
| page | integer >= 1 Default: 1 |
| per-page | integer [ 1 .. 500 ] Default: 50 |
| sort | string |
{- "course_id": 456,
- "page": 1,
- "per-page": 100,
- "sort": "-issued_at"
}{- "success": true,
- "message": "Commit job queued",
- "data": {
}
}Возвращает курсы (id, title, type) для выбора course_id при выдаче сертификатов.
| page | integer >= 1 Default: 1 Example: page=1 Номер страницы для пагинации |
| per_page | integer [ 1 .. 100 ] Default: 20 Example: per_page=50 Количество элементов на странице (максимум 100) |
| sort | string Example: sort=-created_at Сортировка результатов (например, -created_at для обратной сортировки) |
| title | string Поиск по названию курса |
{- "success": true,
- "data": {
- "pagination": {
- "total": 2,
- "page": 1,
- "per_page": 20
}, - "items": [
- {
- "id": 12,
- "title": "Онбординг",
- "type": "course"
}, - {
- "id": 18,
- "title": "Менторская программа",
- "type": "program"
}
]
}
}Возвращает пользователей (id, username, email) для выбора user_id при выдаче сертификатов.
| page | integer >= 1 Default: 1 Example: page=1 Номер страницы для пагинации |
| per_page | integer [ 1 .. 100 ] Default: 20 Example: per_page=50 Количество элементов на странице (максимум 100) |
| search | string Поиск по имени/email |
| courseIds | Array of integers Массив ID продуктов/курсов |
| groupIds | Array of integers Массив ID групп |
| inAllGroups | boolean Требовать принадлежность ко всем указанным группам |
| progressFrom | integer Минимальный прогресс |
| progressTo | integer Максимальный прогресс |
| documentExists | integer Enum: 0 1 Фильтр по наличию документа |
{- "success": true,
- "data": {
- "pagination": {
- "total": 2,
- "page": 1,
- "per_page": 20
}, - "items": [
- {
- "id": 101,
- "username": "Иван Иванов",
- "email": "ivan@example.com"
}, - {
- "id": 102,
- "username": "Мария Петрова",
- "email": "maria@example.com"
}
]
}
}Возвращает список типов сертификатов для подстановки в запросах выдачи.
{- "success": true,
- "data": {
- "items": [
- {
- "id": 1,
- "name": "Course completion",
- "description": "Выдаётся за прохождение курса"
}, - {
- "id": 2,
- "name": "Exam",
- "description": "Выдаётся за сдачу экзамена"
}
]
}
}Возвращает доступные переменные для шаблонов сертификатов (ключ, имя, обязательность).
| list_id | integer ID списка переменных |
| name | string Фильтр по имени переменной |
{- "success": true,
- "data": {
- "items": [
- {
- "id": 5,
- "key": "username",
- "name": "Имя пользователя",
- "description": "Отображается на сертификате",
- "required": true
}, - {
- "id": 6,
- "key": "course_title",
- "name": "Название курса",
- "required": true
}
]
}
}Возвращает значения переменных (variable_id, key, value) для подстановки в шаблоны.
{- "success": true,
- "data": {
- "items": [
- {
- "variable_id": 5,
- "key": "username",
- "value": "Иван Иванов"
}, - {
- "variable_id": 6,
- "key": "course_title",
- "value": "Онбординг"
}
]
}
}Курсы и обучающие продукты (read-only). Назначение: отдать актуальные метаданные курсов и продуктов для витрин/CRM/маркетинга. Ключевые особенности: постраничная выдача (/course/course/index), структура и уроки, атрибуты активности (students_count, enabled, status, picture, lms_id). Пример: внешняя CMS запрашивает /course/course/index, показывает карточки, затем /course/course/view для программы и уроков.
Возвращает список доступных курсов с базовой информацией (только чтение)
| page | integer >= 1 Default: 1 Example: page=1 Номер страницы для пагинации |
| per_page | integer [ 1 .. 100 ] Default: 20 Example: per_page=50 Количество элементов на странице (максимум 100) |
| title | string Поиск по названию курса |
| type | integer Тип курса (см. Course::TYPE_*) |
| enabled | string Фильтр по признаку доступности |
| sort | string Поле сортировки |
| status | string Статус курса |
| type_id | integer ID типа (product id) |
{- "success": true,
- "data": {
- "pagination": {
- "total": 2,
- "page": 1,
- "per_page": 20
}, - "items": [
- {
- "id": 101,
- "title": "Онбординг",
- "description": "Базовый курс для новых сотрудников",
- "status": "active",
- "price": 0,
- "duration": "2h",
- "category": {
- "id": 5,
- "name": "Корпоративное обучение"
}, - "lms_id": 501,
- "student_count": 240
}, - {
- "id": 102,
- "title": "Продажи B2B",
- "description": "Практикум по продажам",
- "status": "active",
- "price": 1990,
- "duration": "6h",
- "category": {
- "id": 6,
- "name": "Продажи"
}, - "lms_id": 502,
- "student_count": 120
}
]
}
}Возвращает полную информацию о курсе включая программу обучения (только чтение)
| id required | integer >= 1 Example: id=42 Идентификатор ресурса |
{- "success": true,
- "data": {
- "item": {
- "id": 101,
- "title": "Онбординг",
- "description": "Базовый курс для новых сотрудников",
- "status": "active",
- "price": 0,
- "duration": "2h",
- "level": "beginner",
- "category": {
- "id": 5,
- "name": "Корпоративное обучение"
}, - "instructor": {
- "id": 77,
- "name": "Анна Смирнова",
}, - "lms_id": 501,
- "syllabus": [
- {
- "id": 1,
- "title": "Введение",
- "description": "Как работать в системе",
- "duration": "10m",
- "order": 1
}
], - "requirements": [
- "Корпоративная почта"
], - "outcomes": [
- "Понимание процессов компании"
], - "student_count": 240,
- "rating": 4.8,
- "reviews_count": 56,
- "created_at": "2024-01-10T09:00:00Z",
- "updated_at": "2024-11-02T11:00:00Z"
}
}
}Страницы и контент сайта (read-only). Назначение: раскрыть структуру публичных/закрытых страниц для внешних CMS. Ключевые особенности: список типов (/dictionary/dictionary/page-types), выдача pages, поля enabled, SEO-метаданные, alias, category. Пример: внешняя система берёт меню, вызывает /dictionary/dictionary/pages, сортирует по типу, обновляет ссылки без доступа к внутренней CMS.
Справочник типов страниц сайта и продуктов (read-only): landing, blog, help, legal и другие.
Назначение: дать фронтам и внешним CMS нормализованные типы для фильтров и группировки страниц/лендингов.
Ключевые особенности: стабильные коды типов, совместимость с /dictionary/dictionary/pages, можно кешировать на клиенте.
Пример Use case: SPA-витрина запрашивает типы, строит фильтры и подсветку меню по категориям страниц.
| type | string Фильтр по типу страницы |
{- "success": true,
- "data": {
- "items": [
- {
- "id": 3,
- "name": "landing"
}, - {
- "id": 4,
- "name": "blog"
}
]
}
}Доступные страницы сайта (лендинги, продуктовые страницы) с базовыми метаданными (read-only): title, alias, type, enabled, SEO-атрибуты.
Назначение: раскрыть структуру публичных и закрытых страниц, чтобы внешние CMS могли собирать меню и лендинги без доступа в админку.
Ключевые особенности: фильтрация по типу (используйте /dictionary/dictionary/page-types), статус enabled, поля alias и category для навигации.
Пример Use case: внешняя система заимствует SPA-меню, вызывает /dictionary/dictionary/pages, сортирует по типу и обновляет ссылки на новом сайте без внутреннего CMS.
{- "success": true,
- "data": {
- "items": [
- {
- "id": 12,
- "alias": "product-page-42",
- "title": "Курс \"Data Science\"",
- "description": "Лендинг продукта Data Science",
- "enabled": true,
- "type": "product-page"
}, - {
- "id": 18,
- "alias": "help-center",
- "title": "Центр помощи",
- "description": "Справочные статьи",
- "enabled": true,
- "type": "help"
}
]
}
}Генерация данных «Сводного» отчёта в JSON для BI/дашбордов без генерации файлов.
JSON-эквивалент XLSX «Сводный» отчёта с фильтрами по продуктам, группам, прогрессу и полям профиля.
Назначение: отдать тот же набор колонок, что в XLSX «Сводный», но в JSON для BI/дашбордов без генерации файлов.
Пример Use case: BI-интеграция запрашивает данные по конкретным продуктам и отделам, строит графики прогресса и статусов оплат без скачивания XLSX.
| product | Array of integers |
| group | Array of integers |
| user_ids | Array of integers |
| progress_from | integer [ 0 .. 100 ] Default: 0 |
| progress_to | integer [ 0 .. 100 ] Default: 100 |
object Фильтры по полям профиля (username, email, phone, department, position) | |
| page | integer >= 1 Default: 1 |
| per-page | integer [ 1 .. 1000 ] Default: 200 |
| sort | string Default: "-date_added" Enum: "-date_added" "date_added" "-progress" "progress" |
{- "product": [
- 59,
- 62
], - "group": [
- 14
], - "progress_from": 50,
- "progress_to": 85,
- "page": 1,
- "per-page": 200,
- "sort": "-date_added"
}{- "success": true,
- "data": {
- "filters": {
- "product": [
- 59,
- 62
], - "progress_from": 50,
- "progress_to": 85,
- "fields": {
- "email": [
- "ya.ru"
]
}
}, - "items": [
- {
- "product": {
- "id": 59,
- "title": "Цифровые коммуникации"
}, - "status": {
- "code": 4,
- "name": "Оплачен"
}, - "amount": 60000,
- "date_added_at": {
- "unix": 1730399460,
- "iso": "2024-10-31T13:11:00+03:00"
}, - "last_activity_at": {
- "unix": null,
- "iso": null
}, - "registered_at": {
- "unix": 1698747060,
- "iso": "2023-10-31T13:11:00+03:00"
}, - "progress_percent": 72,
- "user": {
- "id": 215,
- "name": "Георгий",
- "email": "poooga@ya.ru",
- "phone": "+79999999952",
- "department": "Отдел разработки",
- "position": "Директор по продукту"
}
}
], - "pagination": {
- "page": 1,
- "per_page": 200,
- "total": 8,
- "total_pages": 1
}
}
}