Настройки сайта
Здесь эндпоинты настроек сайта: название, описание, иконка, видимость для поисковиков, режим «сайт закрыт», главная страница и статистика. Счётчики — в Аналитике, соцсети и организация — в Соцсетях и контактах, сброс кэша — в Кэше; как этим пользоваться, рассказано на странице Настройки сайта.
Во всех примерах API — https://onpress.pro/api/v2, SITE — id сайта (SITE_ID), OP_TOKEN — токен op_XXXX. Права на всех эндпоинтах страницы — администратор сайта. Как выбирается сайт и в какой форме приходят отказы — Доступ и токен.
GET /data/site.settings
Отдаёт настройки сайта одной записью в items. Например, прочитать название и главную:
curl -s -H "Authorization: Bearer $OP_TOKEN" "$API/site/$SITE/data/site.settings"
{
"success": true,
"site_id": "x9HTLHECq",
"name": "site.settings",
"origin": "system",
"writable": true,
"write": { "method": "PATCH", "at": "/data/site.settings", "…": "…" },
"total": 1,
"items": [{
"name": "Test",
"description": "",
"home_url": "https://test.onpress.pro",
"site_url": "https://test.onpress.pro",
"admin_email": "admin@example.com",
"timezone": "UTC-5",
"date_format": "d.m.Y",
"time_format": "H:i",
"locale": "en_US",
"charset": "UTF-8",
"posts_per_page": 12,
"blog_public": 1,
"show_on_front": "page",
"front_page_id": 5776,
"posts_page_id": 0,
"theme": "onpress-v2"
}]
}
| Поле | Тип | Описание |
|---|---|---|
name | string | название сайта |
description | string | описание сайта; идёт в разметку WebSite |
home_url, site_url | string | адрес сайта без косой черты на конце |
admin_email | string | почта администратора |
timezone | string | часовой пояс: имя зоны или UTC+N |
date_format, time_format | string | форматы даты и времени |
locale | string | локаль сайта |
charset | string | кодировка |
posts_per_page | number | сколько элементов на странице списка |
blog_public | number | 1 — сайт открыт поисковикам, 0 — закрыт |
show_on_front, front_page_id, posts_page_id | string, number | что открывается в корне: page и id страницы или posts |
theme | string | тема сайта |
Иконки в этой записи нет: её отдаёт GET /data/settings/icon.
PATCH /data/site.settings
Меняет только присланные поля, остальные остаются как были. Например, поменять описание сайта:
curl -s -X PATCH "$API/site/$SITE/data/site.settings" \
-H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
-d '{"description": "Бесплатный ИИ-чат без регистрации"}'
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
name | string | — | название; принимается и blogname; пустая строка — отказ |
description | string | — | описание; принимается и blogdescription |
blog_public | 0/1 или bool | — | открыт ли сайт поисковикам |
site_icon | int | — | id картинки медиатеки этого сайта; 0 снимает иконку |
analytics | object | — | ключи счётчиков как есть: ym_counter_id, ym_enabled, ym_counter_name, ga_measurement_id, ga_property_id, ga_property_name, ga_enabled, gsc_verification_token, gsc_site_url, gsc_verified, ywm_host_id, ywm_site_url, ywm_verification_token, ywm_verified, ywm_client_* (только чтение). Подключать счётчики проще полями metrika, ga, gsc и webmaster — см. Аналитика |
{
"success": true,
"site_id": "x9HTLHECq",
"changed": ["blogdescription"],
"settings": { "blogname": "Test", "blogdescription": "Бесплатный ИИ-чат без регистрации", "blog_public": 1, "site_icon": 4827, "site_icon_url": "https://test.onpress.pro/…/icon.png", "analytics": { "…": "…" }, "domain": "test.onpress.pro", "show_on_front": "page", "page_on_front": 5776, "…": "…" },
"cache": { "object": true, "supercache": { "status": "flushed" }, "…": "…" },
"source": "site.settings",
"rebaked": { "status": "ok", "total": 15, "baked": 15, "frames": ["…"] }
}
changed — записанные поля под их внутренними именами, settings — настройки после записи, cache — сброс кэшей, rebaked — пересборка фреймов, которые печатают название, иконку или адрес сайта. Проверки без записи у этого эндпоинта нет: dry_run — отказ.
| Код | Статус | Когда | Что делать |
|---|---|---|---|
nothing_to_change | 400 | в теле нет ни одного поля | пришлите хотя бы одно поле |
unknown_field | 400 | поле вне списка; допустимые — в message | уберите поле |
field_belongs_elsewhere | 400 | поле только читается здесь: show_on_front, front_page_id, posts_page_id, locale, home_url, site_url, theme; куда идти — в fields | главная — PUT /data/site.front_page, язык — PATCH /data/site.languages, адрес — POST /sites/{id}/domain или свой домен POST /sites/{id}/custom-domain; тема через API не меняется |
invalid_blogname, invalid_blogdescription | 400 | не строка или пустое название | пришлите непустую строку |
invalid_site_icon | 400 | не целое число или такой картинки на сайте нет | возьмите id из GET /media |
invalid_analytics | 400 | analytics не объект или незнакомый ключ; допустимые — в allowed | исправьте ключи |
secret_field | 400 | в analytics прислан секрет, например ywm_client_token; имена в fields | секрет ставит вход в Вебмастер из консоли, снимает PUT /data/settings/webmaster с null |
dry_run_not_supported | 400 | прислан dry_run | прочитайте текущее значение через GET |
wrong_method_for_source | 405 | PUT вместо PATCH | отправьте PATCH |
system_source_not_deletable | 409 | DELETE | настройки не удаляются, только меняются |
internal_unavailable | 502 | сайт не ответил | повторите запрос |
GET /data/settings
Отдаёт основные настройки по полям: у каждого поля своё значение и свой адрес записи. Например, проверить, закрыт ли сайт и какие счётчики подключены:
curl -s -H "Authorization: Bearer $OP_TOKEN" "$API/site/$SITE/data/settings"
{
"success": true,
"site_id": "x9HTLHECq",
"settings": {
"name": "Test",
"icon": 4827,
"closed": false,
"front_page": 5776,
"languages": [
{ "slug": "en", "locale": "en_US", "name": "English", "default": true, "front_page": 5776, "url": "https://test.onpress.pro/" },
{ "slug": "ru", "locale": "ru_RU", "name": "Русский", "default": false, "front_page": 6037, "url": "https://test.onpress.pro/ru/" }
],
"metrika": "12345678",
"ga": "G-XXXXXXX",
"gsc": null,
"webmaster": null
},
"details": {
"icon": { "url": "https://test.onpress.pro/…/icon.png" },
"closed": { "supported": true, "reason": null, "retry_after": 3600 },
"front_page": { "show_on_front": "page", "title": "home", "url": "/", "languages": { "en": 5776, "ru": 6037 } },
"languages": { "default": "en" },
"metrika": { "enabled": true, "name": "Test", "open_url": "https://metrika.yandex.ru/dashboard?id=12345678", "auto_available": true, "data": null },
"…": "…"
},
"fields": { "name": { "method": "PUT", "at": "/data/settings/name", "body": "{\"value\": …}", "forwards_to": "PATCH /site/settings {blogname}" }, "…": "…" }
}
settings — поле и его значение, details — что прилагается к значению, fields — как поле пишется. Одно поле — GET /data/settings/{field}: ответ field, value, поля из details и write. В имени поля можно писать дефис: front-page.
| Поле | value при чтении | Рядом |
|---|---|---|
name | название сайта | — |
icon | id картинки, 0 — иконки нет | url |
closed | true — сайт закрыт для посетителей; null, если режим недоступен | supported, reason (not_v2, main_site), retry_after |
front_page | id главной, 0 — в корне лента записей | show_on_front, title, url, languages — {язык: id} главной каждого языка |
languages | [{slug, locale, name, default, front_page, url}], только чтение | default |
metrika, ga, gsc, webmaster | номер счётчика, measurement ID, код тега, id сайта в Вебмастере | см. Аналитика |
| Код | Статус | Когда | Что делать |
|---|---|---|---|
unknown_settings_field | 404 | такого поля нет; список — в fields | возьмите поле из списка |
wrong_method_for_settings | 405 | метод, кроме GET и PUT, или PUT /data/settings без поля | пишите по одному полю |
PUT /data/settings/{field}
Записывает одно поле телом {"value": …}. Например, закрыть сайт на обслуживание:
curl -s -X PUT "$API/site/$SITE/data/settings/closed" \
-H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
-d '{"value": true}'
{
"success": true,
"site_id": "x9HTLHECq",
"field": "closed",
"value": true,
"supported": true,
"reason": null,
"retry_after": 3600,
"write": { "method": "PUT", "at": "/data/settings/closed", "…": "…" },
"changed": true,
"cache": { "…": "…" },
"forwards_to": "PUT /site/access {closed}",
"rebaked": { "status": "ok", "…": "…" }
}
| Поле | Что принимает value |
|---|---|
name | непустая строка, пробелы по краям срезаются |
icon | id картинки медиатеки этого сайта; 0 или null снимает иконку. Иконка — это favicon и логотип организации в разметке |
closed | true закрывает сайт, false открывает |
front_page | id или путь опубликованной страницы; на многоязычном сайте рядом с value — lang, язык страницы |
metrika, ga, gsc, webmaster | см. Аналитика |
Ответ — поле после записи в форме чтения, плюс changed — изменилось ли что-то, cache, forwards_to и rebaked: фреймы, которые печатают название, иконку или главную, пересобираются; при changed: false — rebaked.status: "nothing". Поле languages здесь не пишется — языки меняет PATCH /data/site.languages.
Закрытый сайт отвечает посетителям 503 с заглушкой «сайт на обслуживании», Retry-After: 3600 и X-Robots-Tag: noindex; robots.txt отдаёт Disallow: /, карты сайта отвечают 503, llms.txt — 404, статические копии страниц снимаются, кэш сбрасывается. Вошедший администратор и API видят сайт как обычно. Свой robots.txt сохраняется и возвращается при открытии. Главный сайт сети не закрывается (reason: "main_site"), как и сайт без поддержки этого режима (reason: "not_v2").
| Код | Статус | Когда | Что делать |
|---|---|---|---|
value_required | 400 | в теле нет value | пришлите {"value": …} |
invalid_name | 400 | пустое название или не строка | пришлите непустую строку |
invalid_icon | 400 | не целое неотрицательное число | пришлите id картинки |
invalid_site_icon | 400 | картинки с таким id на сайте нет | возьмите id из GET /media |
invalid_closed | 400 | не да/нет | пришлите true или false |
invalid_front_page | 400 | пусто или 0 | пришлите id или путь страницы |
invalid_lang | 400 | неверный lang | возьмите слаг из GET /data/site.languages |
page_not_found | 404 | страницы нет | проверьте id или путь |
unknown_settings_field | 404 | такого поля нет | возьмите поле из GET /data/settings |
field_written_elsewhere | 405 | запись в languages | языки — PATCH /data/site.languages |
not_supported | 409 | closed на сайте без поддержки режима | — |
main_site | 409 | closed на главном сайте сети | — |
page_not_published | 409 | главной делают черновик | опубликуйте страницу |
no_default_translation | 409 | у страницы нет перевода на основной язык | привяжите перевод через POST /pages/{ref}/translations/{lang} |
GET /data/site.front_page, PUT /data/site.front_page
Главная страница сайта: что открывается в корне. PUT ставит главной страницу по id или пути; на многоязычном сайте вместе с ней переезжают главные всех языков — это её переводы. Например, сделать главной страницу 5776:
curl -s -X PUT "$API/site/$SITE/data/site.front_page" \
-H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
-d '{"page": 5776}'
{
"success": true,
"site_id": "x9HTLHECq",
"changed": false,
"show_on_front": "page",
"page_on_front": 5776,
"front_pages": {
"en": { "id": 5776, "url": "https://test.onpress.pro/" },
"ru": { "id": 6037, "url": "https://test.onpress.pro/ru/" }
},
"before": { "show_on_front": "page", "page_on_front": 5776 },
"cache": { "…": "…" },
"source": "site.front_page",
"rebaked": { "status": "ok", "…": "…" }
}
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
page | int или string | — | id или путь страницы, обязательно; принимается и {"items": [{"id": …}]} из ответа чтения |
lang | string | — | язык страницы, если путь есть в нескольких языках |
GET отдаёт одну запись: id, show_on_front, title, slug, status, url (всегда /) и real_url — собственный адрес страницы. На многоязычном сайте записывается страница основного языка из группы переводов присланной, главные остальных языков — её переводы (front_pages). Главная языка, у которой ещё нет перевода, привязывается через POST /pages/{ref}/translations/{lang}. Проверки без записи нет.
| Код | Статус | Когда | Что делать |
|---|---|---|---|
invalid_page | 400 | нет page или пустой путь | пришлите id или путь |
invalid_lang | 400 | неверный lang | возьмите слаг из GET /data/site.languages |
dry_run_not_supported | 400 | прислан dry_run | — |
page_not_found | 404 | страницы нет | проверьте id или путь |
wrong_method_for_source | 405 | PATCH вместо PUT | отправьте PUT |
no_default_translation | 409 | у страницы нет перевода на основной язык | привяжите перевод |
page_not_published | 409 | страница не опубликована | опубликуйте её |
GET /content-stats
Отдаёт сравнение двух завершённых периодов по всему сайту из ночного снимка Google Analytics 4; к Google запрос не обращается. Например, неделя к предыдущей неделе:
curl -s -H "Authorization: Bearer $OP_TOKEN" "$API/site/$SITE/content-stats?period=week"
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
period | string | week | yesterday — вчера и позавчера, week — последние 7 полных дней и 7 до них, month — 30 и 30. Сегодняшние неполные сутки не входят |
Ответ: period, stored: true, updated_at и источник sources.ga с полями status, message, timezone, updated_at, completeness, windows (current и previous — включительные даты from и to в часовом поясе ресурса), current и previous, events, events_kind, events_status. В current и previous: visits — уникальные пользователи, sessions — сеансы, organic — сеансы Organic Search, bounce — отказы в процентах, time — средняя длительность сеанса в секундах, events — число событий; каждый показатель — число или null. events — массив {name, current, previous}; events_status — ok, unavailable или error, ошибка списка событий не стирает общие показатели. Ответ помечен Cache-Control: private, no-store.
| Код | Статус | Когда | Что делать |
|---|---|---|---|
invalid_period | 400 | неизвестный период | yesterday, week или month |
content_stats_pending | 404 | ночной снимок ещё не собран | повторите на следующий день |
v2_site_required | 409 | сайт не поддерживает статистику | — |