Diil Docs
  1. Документация

Content API Diil: ваш сайт, наш контент

Обновлено:

Сайт делаете вы. Тексты, картинки и цены меняет команда заказчика. Content API Diil стоит посередине и отдаёт вашему коду аккуратный JSON — и больше никто не заводит задачу ради опечатки в заголовке главной.

Что такое Content API Diil

Diil — визуальный редактор сайтов, к которому прилагается CRM. Редакторы меняют контент в двух местах: в самой CRM или прямо на живом сайте в режиме Live — кликнули по заголовку, написали, сохранили. Content API — дверь только на чтение, через которую этот контент забирает ваш сайт.

Проще говоря, это headless CMS API: хранение и выдачу контента берём на себя мы, а фронтенд целиком ваш — стек, дизайн, хостинг, сборка. Мы не лезем в вашу вёрстку, вам не нужно писать админку.

Как это устроено

Вся архитектура помещается в одну картинку:

Общая схемаtext
  Редакторы                   Diil                              Ваш сайт
  ─────────                   ────                              ────────

  CRM ────────┐
              ├──►  страницы → секции → блоки  ──►  Content API  ──►  fetch() ──►  ваши шаблоны
  Режим Live ─┘     (каждая правка поднимает         только чтение     x-crm-key     React, Vue, HTML…
  (на вашем сайте)   версию контента сайта)          JSON по HTTPS
  1. Редакторы пишут. Контент разложен по страницам, секциям и блокам, у каждого есть короткий маркер: home, hero, hero_title. По маркерам ваш код и находит нужное. Подробнее — в разделе «Как устроен контент».
  2. Ваш сайт читает. Один GET-запрос с ключом сайта возвращает страницу целиком — все секции, все блоки и все нужные вам переводы.
  3. Правки доезжают сами. Любое изменение в CRM поднимает версию контента сайта, и следующий же запрос получает свежие данные. Посетитель может увидеть их с задержкой примерно в минуту из-за кэша браузера и CDN — об этом в разделе «Кэш и ETag».

Хотите, чтобы редакторы правили прямо на страницах сайта, а не в формах? Добавьте один тег <script> и несколько атрибутов data-crm-* — это и есть правка на сайте, и работает она поверх того же API.

Что можно на этом сделать

Всё, что умеет отправить HTTP-запрос и разобрать JSON, умеет работать с Diil. Никаких SDK, никакой привязки к фреймворку.

  • Next.js, Nuxt, Astro, SvelteKit — забираете контент на сервере, кэшируете с ревалидацией и получаете быстрые страницы, которые при этом можно править.
  • Обычный HTML + JavaScript — лендинг на любом хостинге: один fetch(), и готово.
  • SPA на React или Vue — ключ сайта публичный по задумке, так что ходить в API прямо из браузера нормально.
  • Мобильные приложения — тексты онбординга, промо-баннеры и FAQ, которые меняются без релиза в сторе.
  • Многоязычные сайты — каждый текстовый блок приходит картой переводов; один язык или несколько — в одном запросе.
  • Блоги — статьи с обложками, авторами, отложенной публикацией и постраничной выдачей через /v1/blog.

Попробовать за 10 секунд

Вот один блок — заголовок главной страницы — по его маркеру. Подставьте свой ключ, и всё заработает как есть:

curl "https://back.sitecog.com/content/v1/blocks/hero_title?section=hero&lang=en" \
  -H "x-crm-key: pk_3f9c2a7e1b4d4c0e8a6f5b2d9c1e7a40"
200 OKjson
{
  "id": 95,
  "marker": "hero_title",
  "name": "Hero title",
  "type": "text",
  "multilang": true,
  "updatedAt": "2026-09-20T16:33:23.000Z",
  "content": { "en": "Earbuds that mute the city" }
}

Вот и всё. Текст приходит картой переводов, картинка — как { "file": "https://…" }, ссылка — как { url, target, title }. Все форматы собраны на странице «Типы блоков».

API одним взглядом

Все адреса начинаются с https://back.sitecog.com/content, все запросы — GET (и HEAD), все ответы — JSON.

АдресЧто вернётся
/v1/langsАктивные языки сайта в том порядке, что задан в CRM. Готовый материал для переключателя языка.
/v1/pagesВсе страницы без содержимого — для меню и карты сайта.
/v1/pages/:markerОдна страница со всеми секциями и блоками. Ваш основной рабочий запрос.
/v1/sections/:markerОдна секция с её блоками.
/v1/blocks/:markerРовно один блок: телефон, баннер, цена.
/v1/blogОпубликованные статьи блога с постраничной выдачей.
/v1/blog/:slugОдна статья с текстом в HTML.

Что мы уже продумали за вас

  • Один запрос на страницу. Никакого водопада запросов — страница приходит сразу со всем содержимым.
  • Поиск по маркеру, а не по id. Ответы — объекты с маркерами в ключах, поэтому page.content.hero просто работает.
  • Публичные ключи только на чтение. Ключ сайта читает лишь опубликованный контент одного сайта, так что в браузерном коде он никому не навредит. Подробнее — «Ключ сайта».
  • Честные языки. Просите нужные языки через ?lang=en,de. Если перевода нет, его просто нет в ответе — запасной язык выбираете вы (вот как).
  • HTTP-кэш из коробки. У каждого успешного ответа есть ETag, и запрос с If-None-Match обходится дёшево — 304 Not Modified.
  • Щедрые лимиты. 300 запросов в минуту с одного IP и 600 на ключ — с небольшим кэшем вы до них не дойдёте. Подробности — в разделе «Лимиты».

Куда дальше