Эндпоинты Content
Модуль Content управляет страницами сайта, разделами, элементами, блоками, проповедями, плейлистами, потоковыми службами, событиями, курируемыми календарями, файлами, галереями, переводами Библии и поиском стихов, песнями, аранжировками, глобальными стилями, стоковыми фотографиями и настройками. Это крупнейший модуль API, обеспечивающий работу CMS, медиа/трансляций, планирования богослужений и функций Библии во всех приложениях ChurchApps.
Базовый путь: /content
Страницы
Базовый путь: /content/pages
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /:churchId/tree?url=&id= | Public | — | Загрузить полное дерево страницы (разделы, элементы, блоки) по URL или ID. Скрывает внутренние ID при получении по URL |
| GET | /:id | JWT | — | Получить страницу по ID |
| GET | / | JWT | — | Список всех страниц церкви |
| POST | /duplicate/:id | JWT | Content.Edit | Дублировать страницу со всеми разделами и элементами |
| POST | /temp/ai | JWT | Content.Edit | Сохранить сгенерированную ИИ страницу (страница, разделы и элементы за один вызов) |
| POST | / | JWT | Content.Edit | Создать или обновить страницы (пакетно) |
| DELETE | /:id | JWT | Content.Edit | Удалить страницу |
Пример: Загрузка дерева страницы
GET /content/pages/abc-church-id/tree?url=/about
{
"name": "About",
"url": "/about",
"sections": [
{
"background": "#FFFFFF",
"textColor": "dark",
"elements": [
{ "elementType": "textWithPhoto", "answers": { "text": "Welcome" } }
]
}
]
}
Разделы
Базовый путь: /content/sections
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /:id | JWT | — | Получить раздел по ID |
| POST | /duplicate/:id?convertToBlock= | JWT | Content.Edit | Дублировать раздел или преобразовать его в многоразовый блок |
| POST | / | JWT | Content.Edit | Создать или обновить разделы (пакетно). Автоматически обновляет порядок сортировки |
| DELETE | /:id | JWT | Content.Edit | Удалить раздел (автоматически обновляет порядок сортировки) |
Элементы
Базовый путь: /content/elements
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /:id | JWT | — | Получить элемент по ID |
| POST | /duplicate/:id | JWT | Content.Edit | Дублировать элемент со всеми дочерними элементами |
| POST | / | JWT | Content.Edit | Создать или обновить элементы (пакетно). Автоматически управляет столбцами строк и слайдами карусели |
| DELETE | /:id | JWT | Content.Edit | Удалить элемент |
Блоки
Базовый путь: /content/blocks
Наследует стандартный CRUD (GET /:id, GET /, POST /, DELETE /:id из базового класса с разрешением Content.Edit для записи).
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /:id | JWT | — | Получить блок по ID |
| GET | / | JWT | — | Список всех блоков |
| GET | /:churchId/tree/:id | Public | — | Загрузить полное дерево блока с разделами и элементами |
| GET | /blockType/:blockType | JWT | — | Загрузить блоки по типу (напр. footerBlock, elementBlock) |
| GET | /public/footer/:churchId | Public | — | Загрузить дерево блока подвала для церкви |
| POST | / | JWT | Content.Edit | Создать или обновить блоки |
| DELETE | /:id | JWT | Content.Edit | Удалить блок |
Ссылки
Базовый путь: /content/links
Наследует стандартный CRUD (GET /:id, GET /, POST /, DELETE /:id из базового класса с разрешением Content.Edit для записи).
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /:id | JWT | — | Получить ссылку по ID |
| GET | / | JWT | — | Список всех ссылок. Необязательный фильтр ?category=. Автосортировка после сохранения |
| GET | /church/:churchId/filtered?category= | JWT | — | Загрузить ссылки с фильтром по видимости (все, посетители, члены, сотрудники, группы) |
| GET | /church/:churchId?category= | Public | — | Загрузить ссылки церкви по категории (публичный) |
| POST | / | JWT | Content.Edit | Создать или обновить ссылки (пакетно). Автосортировка по категории |
| DELETE | /:id | JWT | Content.Edit | Удалить ссылку |
Глобальные стили
Базовый путь: /content/globalStyles
Наследует стандартный CRUD (POST /, DELETE /:id из базового класса с разрешением Content.Edit для записи).
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /church/:churchId | Public | — | Загрузить глобальные стили для церкви (возвращает значения по умолчанию, если не заданы) |
| GET | / | JWT | — | Загрузить глобальные стили для аутентифицированной церкви |
| POST | / | JWT | Content.Edit | Создать или обновить глобальные стили |
| DELETE | /:id | JWT | Content.Edit | Удалить глобальные стили |
История страниц
Базовый путь: /content/pageHistory
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /page/:pageId | JWT | Content.Edit | Список записей истории для страницы |
| GET | /block/:blockId | JWT | Content.Edit | Список записей истории для блока |
| GET | /:id | JWT | Content.Edit | Получить запись истории по ID |
| POST | / | JWT | Content.Edit | Сохранить снимок страницы/блока. Периодически очищает записи старше 30 дней |
| POST | /restore/:id | JWT | Content.Edit | Восстановить страницу/блок из снимка истории (удаляет текущее содержимое и воссоздаёт из снимка) |
| POST | /restoreSnapshot | JWT | Content.Edit | Восстановить из встроенного объекта снимка. Тело: { pageId, blockId, snapshot } |
Проповеди
Базовый путь: /content/sermons
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /public/freeshowSample | JWT | — | Получить пример структуры плейлиста FreeShow |
| GET | /public/tvWrapper/:churchId | JWT | — | Получить обёртку ТВ-приложения с источниками проповедей, уроков и FreeShow |
| GET | /public/tvFeed/:churchId/:sermonId | Public | — | Получить одну проповедь как плейлист ТВ-ленты |
| GET | /public/tvFeed/:churchId | Public | — | Получить все публичные плейлисты/проповеди как ТВ-ленту |
| GET | /public/:churchId | Public | — | Список всех публичных проповедей церкви |
| GET | /timeline?sermonIds= | JWT | — | Загрузить данные хронологии для проповедей |
| GET | /lookup?videoType=&videoData= | Public | — | Поиск метаданных проповеди по YouTube или Vimeo |
| GET | /socialSuggestions?youtubeVideoId= | JWT | — | Генерация ИИ-предложений для постов в соцсетях из субтитров проповеди |
| GET | /outline?url=&title=&author= | JWT | — | Генерация ИИ-плана урока по URL |
| GET | /youtubeImport/:channelId | JWT | — | Импорт видео с канала YouTube |
| GET | /vimeoImport/:channelId | JWT | — | Импорт видео с канала Vimeo |
| GET | /:id | JWT | — | Получить проповедь по ID |
| GET | / | JWT | — | Список всех проповедей |
| POST | / | JWT | StreamingServices.Edit | Создать или обновить проповеди (пакетно, поддерживает загрузку миниатюры в base64) |
| DELETE | /:id | JWT | StreamingServices.Edit | Удалить проповедь |
Пример: Поиск YouTube-проповеди
GET /content/sermons/lookup?videoType=youtube&videoData=dQw4w9WgXcQ
{
"title": "Sunday Service - Faith in Action",
"description": "Pastor John speaks about faith...",
"thumbnail": "https://img.youtube.com/vi/dQw4w9WgXcQ/default.jpg",
"duration": 2400,
"publishDate": "2025-01-15T10:00:00Z"
}
Плейлисты
Базовый путь: /content/playlists
Наследует стандартный CRUD (GET /:id, GET /, DELETE /:id из базового класса с разрешением StreamingServices.Edit для записи).
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /:id | JWT | — | Получить плейлист по ID |
| GET | / | JWT | — | Список всех плейлистов |
| GET | /public/:churchId | Public | — | Список всех публичных плейлистов церкви |
| POST | / | JWT | StreamingServices.Edit | Создать или обновить плейлисты (пакетно, поддерживает загрузку миниатюры в base64) |
| DELETE | /:id | JWT | StreamingServices.Edit | Удалить плейлист |
Потоковые службы
Базовый путь: /content/streamingServices
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /:id/hostChat | JWT | Chat.Host | Получить зашифрованный ID комнаты чата ведущего для службы |
| GET | / | JWT | — | Список всех потоковых служб. Автоматически очищает истёкшие неповторяющиеся службы и продвигает повторяющиеся |
| POST | / | JWT | StreamingServices.Edit | Создать или обновить потоковые службы (пакетно) |
| DELETE | /:id | JWT | StreamingServices.Edit | Удалить потоковую службу (также очищает заблокированные IP) |
События
Базовый путь: /content/events
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /timeline/group/:groupId?eventIds= | JWT | — | Загрузить события хронологии для группы |
| GET | /timeline?eventIds= | JWT | — | Загрузить события хронологии для групп текущего пользователя |
| GET | /subscribe?churchId=&groupId=&curatedCalendarId= | Public | — | Подписаться на события как ICS-календарь |
| GET | /group/:groupId | JWT | — | Получить события для группы (включает даты исключений) |
| GET | /public/group/:churchId/:groupId | Public | — | Получить публичные события для группы |
| GET | /:id | JWT | — | Получить событие по ID |
| POST | / | JWT | — | Создать или обновить события (пакетно) |
| DELETE | /:id | JWT | Content.Edit | Удалить событие |
Исключения событий
Базовый путь: /content/eventExceptions
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /:id | JWT | — | Получить исключение события по ID |
| POST | / | JWT | Content.Edit | Создать или обновить исключения событий (пакетно) |
| DELETE | /:id | JWT | Content.Edit | Удалить исключение события |
Курируемые календари
Базовый путь: /content/curatedCalendars
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /:id | JWT | — | Получить курируемый календарь по ID |
| GET | / | JWT | — | Список всех курируемых календарей |
| POST | / | JWT | Content.Edit | Создать или обновить курируемые календари (пакетно) |
| DELETE | /:id | JWT | Content.Edit | Удалить курируемый календарь |
Курируемые события
Базовый путь: /content/curatedEvents
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /calendar/:curatedCalendarId?withoutEvents | JWT | — | Получить курируемые события для календаря (включает детали событий и даты исключений, если не указан ?withoutEvents) |
| GET | /public/calendar/:churchId/:curatedCalendarId | Public | — | Получить публичные курируемые события для календаря |
| GET | /:id | JWT | — | Получить курируемое событие по ID |
| GET | / | JWT | — | Список всех курируемых событий |
| POST | / | JWT | Content.Edit | Создать или обновить курируемые события. Поддерживает массив eventIds для добавления конкретных событий групп |
| DELETE | /:id | JWT | Content.Edit | Удалить курируемое событие |
| DELETE | /calendar/:curatedCalendarId/event/:eventId | JWT | Content.Edit | Удалить конкретное событие из курируемого календаря |
| DELETE | /calendar/:curatedCalendarId/group/:groupId | JWT | Content.Edit | Удалить все события группы из курируемого календаря |
Файлы
Базовый путь: /content/files
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /:contentType/:contentId | JWT | — | Получить файлы по типу контента и ID контента |
| GET | / | JWT | — | Список всех файлов сайта церкви |
| GET | /:id | JWT | — | Получить файл по ID |
| POST | / | JWT | Content.Edit* | Загрузить файлы (base64). *Также разрешено, если пользователь является участником группы, соответствующей contentId |
| POST | /postUrl | JWT | Content.Edit* | Получить предподписанный URL для загрузки на S3. *Также разрешено для участников группы. Максимум 100 МБ на элемент контента |
| DELETE | /:id | JWT | Content.Edit* | Удалить файл и убрать из хранилища. *Также разрешено для участников группы |
Галерея
Базовый путь: /content/gallery
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /stock/:folder | Public | — | Список стоковых фотографий в папке |
| GET | /:folder | JWT | Content.Edit | Список изображений галереи в папке |
| POST | /requestUpload | JWT | Content.Edit | Получить предподписанный URL для загрузки изображения галереи на S3 |
| DELETE | /:folder/:image | JWT | Content.Edit | Удалить изображение галереи |
Библия
Базовый путь: /content/bibles
Все эндпоинты Библии публичные (аутентификация не требуется). Данные получаются из внешних источников и кэшируются локально.
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | / | Public | — | Список всех переводов Библии (получает из источника, если кэш пуст) |
| GET | /stats?startDate=&endDate= | Public | — | Получить статистику поиска по Библии за период |
| GET | /availableTranslations/:source | Public | — | Список доступных переводов из источника (напр. api.bible) |
| GET | /updateTranslations | Public | — | Синхронизировать все переводы из всех источников |
| GET | /updateTranslations/:source | Public | — | Синхронизировать переводы из конкретного источника |
| GET | /updateCopyrights | Public | — | Обновить информацию об авторских правах для переводов без неё |
| GET | /:translationKey/updateCopyright | Public | — | Обновить авторские права для конкретного перевода |
| GET | /:translationKey/search?query=&limit= | Public | — | Поиск стихов в переводе |
| GET | /:translationKey/books | Public | — | Получить книги для перевода (кэшируется локально) |
| GET | /:translationKey/:bookKey/chapters | Public | — | Получить главы для книги (кэшируется локально) |
| GET | /:translationKey/chapters/:chapterKey/verses | Public | — | Получить стихи для главы (кэшируется локально) |
| GET | /:translationKey/verses/:startVerseKey-:endVerseKey | Public | — | Получить текст стихов для диапазона. Логирует поиски. Некоторые переводы обходят кэширование по лицензионным причинам |
Пример: Получение текста стиха
GET /content/bibles/de4e12af7f28f599-02/verses/GEN.1.1-GEN.1.3
[
{ "verseKey": "GEN.1.1", "content": "In the beginning God created the heavens and the earth.", "bookKey": "GEN", "chapterNumber": 1, "verseNumber": 1 },
{ "verseKey": "GEN.1.2", "content": "Now the earth was formless and empty...", "bookKey": "GEN", "chapterNumber": 1, "verseNumber": 2 },
{ "verseKey": "GEN.1.3", "content": "And God said, \"Let there be light,\" and there was light.", "bookKey": "GEN", "chapterNumber": 1, "verseNumber": 3 }
]
Песни
Базовый путь: /content/songs
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /search?q= | JWT | — | Поиск песен по запросу |
| GET | /:id | JWT | — | Получить песню по ID |
| GET | / | JWT | Content.Edit | Список всех песен |
| POST | / | JWT | Content.Edit | Создать или обновить песни (пакетно) |
| POST | /import | JWT | — | Импорт песен из FreeShow (пакетно) |
| DELETE | /:id | JWT | Content.Edit | Удалить песню |
Детали песен
Базовый путь: /content/songDetails
Детали песен являются глобальными (не привязаны к церкви). Они представляют канонические метаданные песен, общие для всех церквей.
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /:id | JWT | — | Получить детали песни по ID (глобальный) |
| GET | / | JWT | — | Список деталей песен для церкви |
| POST | /create | JWT | — | Создать детали песни из PraiseCharts ID (возвращает существующие, если уже созданы). Автоматически получает метаданные из PraiseCharts и MusicBrainz |
| POST | / | JWT | — | Создать или обновить детали песен (пакетно) |
Ссылки деталей песен
Базовый путь: /content/songDetailLinks
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /:id | JWT | — | Получить ссылку деталей песни по ID |
| GET | /songDetail/:songDetailId | JWT | — | Получить все ссылки для деталей песни |
| POST | / | JWT | — | Создать или обновить ссылки деталей песен (пакетно). Автоматически получает данные MusicBrainz при связывании |
| DELETE | /:id | JWT | — | Удалить ссылку деталей песни |
Аранжировки
Базовый путь: /content/arrangements
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /:id | JWT | — | Получить аранжировку по ID |
| GET | /song/:songId | JWT | Content.Edit | Получить аранжировки для песни |
| GET | /songDetail/:songDetailId | JWT | Content.Edit | Получить аранжировки для деталей песни |
| GET | / | JWT | Content.Edit | Список всех аранжировок |
| POST | / | JWT | Content.Edit | Создать или обновить аранжировки (пакетно) |
| POST | /freeShow/missing | JWT | — | Найти FreeShow ID, которые не существуют в церкви. Тело: { freeShowIds: string[] } |
| DELETE | /:id | JWT | Content.Edit | Удалить аранжировку (также удаляет тональности; удаляет песню, если не осталось аранжировок) |
Тональности аранжировок
Базовый путь: /content/arrangementKeys
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /presenter/:churchId/:id | Public | — | Получить тональность аранжировки с полными данными песни для представления |
| GET | /:id | JWT | — | Получить тональность аранжировки по ID |
| GET | /arrangement/:arrangementId | JWT | Content.Edit | Получить тональности для аранжировки |
| GET | / | JWT | Content.Edit | Список всех тональностей аранжировок |
| POST | / | JWT | Content.Edit | Создать или обновить тональности аранжировок (пакетно) |
| DELETE | /:id | JWT | Content.Edit | Удалить тональность аранжировки |
Настройки
Базовый путь: /content/settings
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /my | JWT | — | Получить настройки текущего пользователя |
| GET | / | JWT | Settings.Edit | Получить все настройки церкви |
| GET | /public/:churchId | Public | — | Получить публичные настройки церкви (возвращаются как пары ключ-значение) |
| GET | /imports?playlistId=&channelId=&type= | JWT | Settings.Edit | Получить настройки автоимпорта (ID каналов YouTube/Vimeo) |
| POST | /my | JWT | — | Сохранить настройки пользователя (поддерживает загрузку изображения в base64) |
| POST | / | JWT | Settings.Edit | Сохранить настройки церкви (поддерживает загрузку изображения в base64) |
| DELETE | /my/:id | JWT | — | Удалить настройку пользователя |
Предпросмотр
Базовый путь: /content/preview
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /data/:key | Public | — | Загрузить данные предпросмотра трансляции для церкви по ключу поддомена (вкладки, ссылки, службы, проповеди) |
Галерея (стоковые фотографии)
Базовый путь: /content/stock
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| POST | /search | Public | — | Поиск стоковых фотографий Pexels. Тело: { term: "church" } |
PraiseCharts
Базовый путь: /content/praiseCharts
Интеграция с PraiseCharts для поиска песен прославления и скачивания нот.
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| GET | /raw/:id | JWT | — | Получить необработанные данные PraiseCharts для песни |
| GET | /hasAccount | JWT | — | Проверить, есть ли у пользователя привязанный аккаунт PraiseCharts |
| GET | /search?q= | JWT | — | Поиск по каталогу PraiseCharts |
| GET | /products/:id?keys= | JWT | — | Получить продукты для песни (из библиотеки, если аутентифицирован, иначе из каталога) |
| GET | /arrangement/raw/:id?keys= | JWT | — | Получить необработанные данные аранжировки из библиотеки |
| GET | /download?skus=&keys=&file_name= | JWT | — | Скачать файл из PraiseCharts (PDF или ZIP). Возвращает { redirectUrl } |
| GET | /authUrl?returnUrl= | Public | — | Получить URL OAuth-авторизации для PraiseCharts |
| GET | /access?verifier=&token=&secret= | JWT | — | Обменять OAuth-верификатор на токен доступа и сохранить в настройках пользователя |
| GET | /library | JWT | — | Просмотр библиотеки PraiseCharts пользователя |
Поддержка
Базовый путь: /content/support
| Метод | Путь | Аутентификация | Разрешение | Описание |
|---|---|---|---|---|
| POST | /createAudio | Public | — | Преобразование SSML в MP3-аудио с помощью AWS Polly. Тело: { ssml: "<speak>...</speak>" } |
Связанные страницы
- Эндпоинты Membership -- Люди, церкви, группы, роли, разрешения
- Эндпоинты Attendance -- Отслеживание служений и посещений
- Аутентификация и разрешения -- Процесс входа, JWT, модель разрешений
- Структура модулей -- Паттерны организации кода