Конечные точки контента
Модуль контента управляет страницами веб-сайта, разделами, элементами, блоками, сообщениями блога, перенаправлениями, проповедями, плейлистами, потоковыми сервисами, событиями, курируемыми календарями, файлами, галереями, переводами Библии и поиском стихов, песнями, аранжировками, глобальными стилями, стоковыми фотографиями и параметрами. Это самый большой модуль в API и питает CMS, медиа/потоковую трансляцию, планирование поклонения и функции Библии во всех приложениях ChurchApps.
Базовый путь: /content
Страницы
Базовый путь: /content/pages
| Метод | Путь | Аут. | Разрешение | Описание |
|---|---|---|---|---|
| GET | /:churchId/tree?url=&id= | Public | — | Загрузить полное дерево страницы (разделы, элементы, блоки) по URL или ID. Убирает внутренние ID при выборке по URL. Выборки на основе URL применяют pages.visibility — закрытая страница возвращает { restricted: true, visibility }, если только JWT не удовлетворяет условию |
| GET | /public/:churchId | Public | — | Список открытых страниц (url, title, metaDescription); только visibility = everyone |
| GET | /:id | JWT | — | Получить страницу по ID |
| GET | / | JWT | — | Список всех страниц для церкви |
| POST | /duplicate/:id | JWT | Content.Edit | Дублировать страницу со всеми разделами и элементами |
| POST | /temp/ai | JWT | Content.Edit | Сохранить генерируемую AI страницу (страница, разделы и элементы в одном вызове) |
| 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/posts
Сообщения блога — самостоятельные строки: title, slug (уникален в пределах церкви), excerpt, content (тело в формате markdown), authorId, photoUrl, publishDate, category и tags. Сообщение считается опубликованным, когда publishDate установлена и находится в прошлом. Конечные точки чтения дополняют каждое сообщение полем authorName, определённым по authorId. См. Архитектура конструктора веб-сайта.
| Метод | Путь | Аут. | Разрешение | Описание |
|---|---|---|---|---|
| GET | /public/:churchId?category=&tag=&page=&pageSize= | Public | — | Список опубликованных сообщений, разбит на страницы (макс. 50 на странице) |
| GET | /public/:churchId/categories | Public | — | Уникальные категории среди опубликованных сообщений |
| GET | /public/:churchId/slug/:slug | Public | — | Получить опубликованное сообщение по slug |
| GET | /rss/:churchId?siteUrl= | Public | — | RSS 2.0 лента опубликованных сообщений (ссылки построены как {siteUrl}/blog/{slug}) |
| GET | /:id | JWT | — | Получить сообщение по ID |
| GET | / | JWT | — | Список всех сообщений для церкви |
| POST | / | JWT | Content.Edit | Создать или обновить сообщения (пакет) |
| DELETE | /:id | JWT | Content.Edit | Удалить сообщение |
Перенаправления
Базовый путь: /content/redirects
Перенаправления URL на церковь (fromPath → toPath), ограничено 200 на церковь. Пути нормализованы (малые буквы, ведущий слэш, без завершающего слэша) и fromPath уникален на церковь. B1App разрешает их на было бы 404 и выдаёт HTTP 308.
| Метод | Путь | Аут. | Разрешение | Описание |
|---|---|---|---|---|
| GET | /public/:churchId?path= | Public | — | Разрешить путь (или список всех перенаправлений, когда path опущен) |
| GET | /:id | JWT | — | Получить перенаправление по ID |
| GET | / | JWT | — | Список всех перенаправлений для церкви |
| POST | / | JWT | Content.Edit | Создать или обновить перенаправления. Отклоняет fromPath = toPath и применяет ограничение в 200 строк |
| DELETE | /:id | JWT | Content.Edit | Удалить перенаправление |
Проповеди
Базовый путь: /content/sermons
| Метод | Путь | Аут. | Разрешение | Описание |
|---|---|---|---|---|
| GET | /public/freeshowSample | JWT | — | Получить структуру примера плейлиста FreeShow |
| GET | /public/tvWrapper/:churchId | JWT | — | Получить обёртку приложения TV с источниками проповедей, уроков и 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 | — | Генерировать предложения для постов в социальных сетях AI из субтитров проповеди |
| GET | /outline?url=&title=&author= | JWT | — | Генерировать очертание урока AI из 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. *Также допускается для членов группы. Макс. 100MB на элемент контента |
| 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 | — | Создать детали песни с ID PraiseCharts (возвращает существующие, если уже созданы). Автоматически выбирает метаданные с 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 | — | Найти ID FreeShow, которых нет в церкви. Тело: { 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 | — | Получить открытые параметры для церкви (возвращены как пары ключ-значение) |
| 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>" } |
Связанные страницы
- Архитектура конструктора веб-сайта — как страницы, разделы, элементы, сообщения и перенаправления вписываются в приложения
- Конечные точки членства — люди, церкви, группы, роли, разрешения
- Конечные точки посещаемости — отслеживание служений и визитов
- Аутентификация и разрешения — поток входа, JWT, модель разрешений
- Структура модуля — шаблоны организации кода