API доставки контента

Публичный REST API отдаёт опубликованные материалы в формате JSON. Подключите к нему сайт, мобильное приложение или бота — контент везде будет одинаковым и актуальным.

Базовый адрес

http://localhost:3020/api/v1

Авторизация

Каждый запрос сопровождается API-ключом. Ключи выпускаются и отзываются в панели управления. Передайте ключ в заголовке Authorization:

Заголовок
Authorization: Bearer osnova_demo_public_key_2026

Для тестирования используйте демонстрационный ключ выше — он уже активен в этом демо.

Эндпоинты

GET/api/v1/articles
Список опубликованных материалов. Параметры: page, perPage (до 50), category (slug рубрики).
GET/api/v1/articles/{slug}
Один материал целиком: тело в Markdown и готовый HTML, SEO-поля, обложка.
GET/api/v1/categories
Рубрики, в которых есть опубликованные материалы, со счётчиком.

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

cURL
curl "http://localhost:3020/api/v1/articles?perPage=3" \
  -H "Authorization: Bearer osnova_demo_public_key_2026"
JavaScript (fetch)
const res = await fetch("http://localhost:3020/api/v1/articles", {
  headers: { Authorization: "Bearer osnova_demo_public_key_2026" },
});
const { data, meta } = await res.json();
console.log(data, meta);

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

200 OK · /api/v1/articles
{
  "data": [
    {
      "id": "clx…",
      "title": "Открыли новый филиал в Казани",
      "slug": "otkryli-novyy-filial-v-kazani",
      "excerpt": "Теперь мы ближе к клиентам Поволжья…",
      "coverImageUrl": null,
      "publishedAt": "2026-07-09T09:00:00.000Z",
      "readingTime": 1,
      "category": { "name": "Новости", "slug": "novosti" },
      "author": "Администратор"
    }
  ],
  "meta": { "total": 5, "page": 1, "perPage": 10, "totalPages": 1 }
}

Ошибки и ограничения

  • 401 — ключ отсутствует, неверен или отозван.
  • 404 — материал не найден или не опубликован.
  • 429 — превышен лимит запросов (120 запросов в минуту с адреса).
  • CORS настраивается переменной окружения — можно ограничить доступ списком доменов.