Общие правила
Здесь адреса запросов, ссылки на ресурсы, защита от перезаписи и пробный прогон. Токен и права описывает «Авторизация», форму ответа — «Ошибки».
API — https://onpress.pro/api/v2, SITE — id сайта, OP_TOKEN — токен op_XXXX. Пути на этой странице начинаются с $API/site/$SITE. Токен и права — в «Авторизации», общий формат — в «Общих правилах».
Адрес и формат
Эндпоинты сайта используют $API/site/$SITE. Путь /pages в справочнике означает https://onpress.pro/api/v2/site/{siteId}/pages. Запросы и ответы используют UTF-8. Для JSON-тела передайте Content-Type: application/json.
curl -s "$API/site/$SITE/pages?per_page=1" -H "Authorization: Bearer $OP_TOKEN"
SITE — внешний id сайта из списка сайтов. Таблица операции отдельно указывает параметры пути, строки запроса и тела. Не переносите свойство страницы из блока свойств Markdown в соседнее поле JSON, если эндпоинт не описывает такое поле.
Права
Эндпоинты сайта открыты администратору сайта. API проверяет и токен, и доступ к выбранному SITE. Подробности — в «Авторизации».
Ссылка на страницу
{ref} страницы обозначает id, слаг или путь. В пути замените / на ~. Для /ru/o-nas/ передайте ru~o-nas. Если адрес содержит специальные символы URL, закодируйте сегмент пути.
curl -s "$API/site/$SITE/pages/docs~v2~ru~guides~data/markdown" -H "Authorization: Bearer $OP_TOKEN"
Голый слаг API ищет на языке lang, а без lang — на основном языке сайта. Id и полный путь точнее слага. Если lang не совпадает с языком найденной страницы, API отказывает.
| Код | HTTP | Когда | Что делать |
|---|---|---|---|
page_not_found | 404 | Страницы нет. | Проверьте id или путь. |
ambiguous_page | 409 | Слаг обозначает несколько страниц. | Возьмите id или полный путь из candidates либо matches. |
page_language_mismatch | 409 | Язык страницы отличается от lang. | Проверьте actual_lang и исправьте запрос. |
Фрейм использует свой {ref} — id или слаг. Меню принимает id, слаг, имя или область с ~, например ~header. Сайдбар документации использует ссылки, подписи групп и координаты пунктов. Формы описаны у профильного эндпоинта.
Защита от перезаписи
Чтение страницы отдает modified. Передайте его полем if_modified в запись. API сравнит версии перед записью и вернет 409 page_changed, если кто-то успел изменить страницу.
curl -s -X PATCH "$API/site/$SITE/pages/example/markdown" \
-H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
-d '{"if_modified":"2026-10-30 12:00:00","patch":[{"action":"replace","find":"Старый текст.","with":"Новый текст."}]}'
Данные используют if_sha256 из поля sha256 чтения. Сайдбар документации использует свою версию меню с тем же именем поля. Семантический план требует version из GET /data/seo.semantic.
| Поле | Тип | Обязательное | По умолчанию | Описание |
|---|---|---|---|---|
if_modified | string | нет, если операция не требует иного | без сверки | Версия страницы в формате ответа modified. |
if_sha256 | string | нет, если операция не требует иного | без сверки | 64 шестнадцатеричных символа из чтения данных или меню. |
version | integer | да для записи семантики | — | Текущая версия семантического плана. |
| Код | HTTP | Когда | Что делать |
|---|---|---|---|
page_changed | 409 | Страница новее переданного if_modified. | Перечитайте страницу и примените правку к новой версии. |
page_not_matched | 409 | Версия передана без найденной страницы. | Укажите id существующей страницы. |
dataset_changed | 409 | Данные изменились после чтения. | Перечитайте данные и повторите правку. |
bad_if_sha256 | 400 | Неверная форма версии. | Скопируйте sha256 из чтения. |
sidebar_changed | 409 | Меню изменилось после чтения или во время запроса. | Перечитайте сайдбар. |
semantic_changed | 409 | План изменился после чтения. | Перечитайте план и передайте новую version. |
Пробный прогон
dry_run: true проверяет изменение без записи только у операций, которые явно описывают этот параметр. Для поддерживаемой строки запроса используйте ?dry_run=1. Если операция читает обе формы, поле тела имеет приоритет.
У публикации POST /pages/markdown, правки свойств PATCH /pages/{ref} и частотности PUT /pages/{id}/keyword-frequency запрос пробного прогона вызывает 400 dry_run_not_supported. Они ничего не записывают при таком отказе. Не добавляйте dry_run произвольной операции. Операции, которые его не читают, выполняют обычную запись.
Обновление кэша
Запись страницы обновляет ее копию и сбрасывает кэш адреса. При смене адреса API затрагивает и старый адрес. Поле cache описывает результат операции.
{"cache":{"status":"flushed","urls":["https://example.com/ru/start/"]}}
| Поле | Тип | Описание |
|---|---|---|
cache.status | string | flushed — API сбросил кэш, nothing — адреса для сброса нет. |
cache.urls | string[] | Адреса, по которым API сбросил кэш. |
Поля rebaked и отчеты сборки зависят от операции. Их значения описывает «Сборка». Ручной сброс кэша — в «Кэше».
Формат ответа
Не считайте HTTP 200 гарантией конкретного результата. Читайте поля операции, например changed, applied, warnings, pending и verified. Ошибку определяйте по HTTP-статусу и error либо code, а не по тексту message. Примеры — на странице «Ошибки».
Окружение
Рабочий адрес API — https://onpress.pro/api/v2. GET /health возвращает realm, ответы эндпоинтов сайта содержат X-OnPress-Realm. Если API вернул 409 wrong_realm, он отклонил запись. Отправьте запрос на рабочий адрес API. Состояние сервиса — в «Состоянии API».
Бета
Пометка «(бета)» означает, что форма ответа может измениться. Параметры и коды текущей реализации описывает соответствующая операция.
Лимиты
API допускает 120 запросов в минуту на пользователя и JSON-тело до 10 МБ при стандартной настройке сервиса. Авторизация отдельно ограничивает неверные токены. Заголовки и порядок повторного запроса — в «Авторизации» и «Ошибках».
| Что | Предел | Ответ при превышении |
|---|---|---|
Страниц в GET /pages | 200 на страницу выдачи | больше не отдается |
Страниц в серии POST /pages/series | 50 | 413 series_too_large |
Наборов в POST /pages/import | 80 | 413 import_too_large |
Страниц под поиском GET /pages/search | 3000 | 422 too_many_pages |
Запрос q поиска | 500 символов | 400 q_too_long |
| Регулярное выражение поиска | 2 секунды | 422 regex_timeout |
Страниц в сборке ссылок PUT /data/seo.page_links | 5000 опубликованных | 413 too_many_pages |
Страниц в GET /data/seo.page_links и GET /data/traffic | 500 за запрос | больше не отдается |
| Сохраненных представлений | 50 на пользователя на сайте | 409 views_limit |