Diil Docs
  1. Документация
  2. Справочник API

GET /v1/sections/:marker — одна секция

Обновлено:

Секция — это горизонтальный кусок страницы: первый экран, таблица цен, вопросы и ответы — вместе со всеми своими блоками. Обычно секции и так приходят внутри /v1/pages/:marker. Этот запрос нужен, когда хочется один кусок, а не весь торт.

Когда секция выгоднее целой страницы

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

  • Ленивая загрузка ниже первого экрана. Страница длинная, карусель отзывов живёт где-то на четвёртом скролле, и до неё доходят немногие. Возьмите страницу с ?empty ради заголовка и мета-тегов, секции первого экрана — по маркеру, а тяжёлые подгружайте, только когда посетитель до них почти доскроллил.
  • Общие секции. Подвал, полоса подписки на рассылку, блок «Остались вопросы?», который стоит на каждой странице. Храните его в CRM в одном месте и запрашивайте по маркеру там, где он нужен.
  • Обновление одной части. Виджету в браузере, которому важна одна секция — скажем, промо-блок, который вы перепроверяете по таймеру, — незачем каждый раз скачивать всю страницу.

Получить одну секцию

GET/v1/sections/:marker

https://back.sitecog.com/content/v1/sections/:marker

Одна секция с блоками в content. Устроена ровно так же, как секция внутри ответа страницы, поэтому один и тот же код вывода подходит для обоих случаев.

Параметры

markerpathstringобязательно
Маркер секции из CRM, например hero или reviews. Правила те же, что у маркеров страниц: латиница, цифры и подчёркивание, от 2 до 40 символов, регистр важен. Секция ищется только по маркеру — параметра страницы здесь нет, — поэтому секциям, которые вы запрашиваете отдельно, давайте маркеры, не повторяющиеся на других страницах.
langquerystringнеобязательноПо умолчанию: все активные языки
Оставить в блоках переводы только на этих языках: ?lang=en, ?lang=en,de или ?lang=en&lang=de. Каждый код должен быть активным языком сайта, иначе придёт 400 unknown_lang. См. Языки и запасной язык.
emptyqueryflagнеобязательноПо умолчанию: выключен
Вернуть секцию без content — только id, маркер, название, порядок и show. Включается самим присутствием: ?empty, ?empty=1, ?empty=true; выключается значениями 0 или false. Удобно, чтобы дёшево проверить «а секция вообще включена?», прежде чем грузить что-то тяжёлое.
x-crm-keyheaderstringобязательно
Ключ сайта. Если заголовок передать нельзя, подойдёт ?key=. Подробнее — в разделе Ключ сайта.

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

curl "https://back.sitecog.com/content/v1/sections/reviews?lang=en" \
  -H "x-crm-key: pk_3f9c2a7e1b4d4c0e8a6f5b2d9c1e7a40"

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

200 OKjson
{
  "id": 47,
  "marker": "reviews",
  "name": "Отзывы покупателей",
  "index": 4,
  "show": true,
  "content": {
    "reviews_title": {
      "id": 120,
      "marker": "reviews_title",
      "name": "Заголовок",
      "type": "text",
      "multilang": true,
      "updatedAt": "2026-09-21T11:02:15.000Z",
      "content": { "en": "What people say" }
    },
    "reviews_list": {
      "id": 121,
      "marker": "reviews_list",
      "name": "Отзывы",
      "type": "array",
      "multilang": false,
      "updatedAt": "2026-09-25T08:40:03.000Z",
      "content": [
        {
          "author": { "en": "Maria, Berlin" },
          "text": { "en": "Finally I can hear my podcast on the U-Bahn." },
          "rating": 5
        }
      ]
    }
  }
}

С ?empty тот же запрос вернёт только «шапку» секции — этого хватает, когда нужно лишь узнать, включена ли она:

200 OK — ?emptyjson
{
  "id": 47,
  "marker": "reviews",
  "name": "Отзывы покупателей",
  "index": 4,
  "show": true
}

Поля ответа

idnumber
Внутренний id секции. Не меняется, но в коде лучше опираться на маркер — id на разных средах разные.
markerstring
Маркер секции — тот же, что вы указали в адресе.
namestring
Название из CRM («Отзывы покупателей»). Оно для редакторов — на страницу его не выводите.
indexnumber
Место секции на своей странице, с нуля. Пригодится, если вы лениво грузите несколько секций и хотите сохранить их порядок.
showboolean
Хочет ли редактор, чтобы секцию было видно. Подробнее — в разделе про флаг show ниже: скрытая секция всё равно приходит в ответе.
content{ [blockMarker]: Block }
Блоки секции, ключ — маркер блока. С ?empty поля нет.
content →
idnumber
id блока.
markerstring
Маркер блока, например reviews_title.
namestring
Название для редакторов.
typestring
Один из типов: text, html, image, video, link, number, color, date, date_range, boolean, object, array. От него зависит вид content.
multilangboolean
Для картинок и видео: true, если у каждого языка свой файл.
updatedAtstring (ISO 8601)
Когда блок правили последний раз.
contentзависит от type
Само значение: карта переводов у текста, { file } у одиночной картинки, массив элементов у array и так далее. Все варианты — на странице Типы блоков.

Флаг show: скрыта — не значит удалена

Редактор может выключить секцию в CRM, не удаляя её: сезонная акция закончилась, FAQ дописан наполовину, текст ждёт юристов. API всё равно отдаёт такую секцию — с "show": false и всем содержимым. Не выводить её — забота вашего шаблона:

const reviews = await getSection('reviews');

return (
  <>
    <Hero />
    {reviews.show && <Reviews section={reviews} />}
  </>
);

Ошибки

СтатусТело ответаЧто случилось
400{"message":"invalid_marker"}В маркере есть символы кроме A–Z a–z 0–9 _ или не та длина.
400{"message":"invalid_lang", …}Код в lang записан неправильно (скажем, english вместо en).
400{"message":"unknown_lang", …}Язык из lang не активен на сайте. В теле ответа — список доступных.
401{"message":"invalid_key"}Ключа нет, он неправильного вида или отозван.
404{"message":"section_not_found"}На этом сайте нет секции с таким маркером. Опечатка? Ключ от другого сайта?
429{"message":"rate_limit_exceeded"}Слишком много запросов за эту минуту. См. Лимиты.

Полный список с подсказками, что делать, — на странице Ошибки.

Советы из практики