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 настраивается переменной окружения — можно ограничить доступ списком доменов.