• Быстрый старт
    • Доступ и токен
  • СУЩНОСТИ
    • Страницы
      • Markdown
      • Аналитика страниц
    • Фреймы
      • Блоки
      • Бинды data-op-bind
      • Повторитель onpress/repeat
      • Сборка и копии
      • Фреймы в Markdown
      • Фреймы с данными
      • Готовые фреймы
    • Данные
    • Медиа
  • УСТРОЙСТВО САЙТА
    • Сайты
    • Настройки сайта
    • Меню
    • Языки и переводы
    • Стили и оформление
  • УПРАВЛЕНИЕ
    • Домены
    • Соцсети и контакты
    • SEO
    • Аналитика
    • Кэш
    • Дашборд и вход
    • Пользователи и профиль
    • Сайдбар документации
    • Ошибки и проблемы
  • КЕЙСЫ
    • Создание сайтов
    • Работа с контентом
    • Фреймы и данные
    • Настройка сайта
    • Перевод страницы
  • ПРИЛОЖЕНИЯ
    • Приложения
      • Закрытый доступ
      • Данные приложения
      • Внешние данные
      • Демо
    • Быстрый старт
    • Доступ и токен
  • СУЩНОСТИ
    • Страницы
    • Фреймы
    • Данные
    • Медиа
  • УСТРОЙСТВО САЙТА
    • Сайты
    • Настройки сайта
    • Меню
    • Языки и переводы
    • Стили и оформление
  • УПРАВЛЕНИЕ
    • Домены
    • Соцсети и контакты
    • SEO
    • Аналитика
    • Кэш
    • Дашборд и вход
    • Пользователи и профиль
    • Сайдбар документации
    • Ошибки и проблемы
    • Редиректы
    • Кредиты и автоматизация
    • Входящие
    • Кросспостинг
OnPress OnPress
  • Документация
  • Контакты
Войти
Обзор Справочник API
    • Быстрый старт
    • Доступ и токен
  • СУЩНОСТИ
    • Страницы
      • Markdown
      • Аналитика страниц
    • Фреймы
      • Блоки
      • Бинды data-op-bind
      • Повторитель onpress/repeat
      • Сборка и копии
      • Фреймы в Markdown
      • Фреймы с данными
      • Готовые фреймы
    • Данные
    • Медиа
  • УСТРОЙСТВО САЙТА
    • Сайты
    • Настройки сайта
    • Меню
    • Языки и переводы
    • Стили и оформление
  • УПРАВЛЕНИЕ
    • Домены
    • Соцсети и контакты
    • SEO
    • Аналитика
    • Кэш
    • Дашборд и вход
    • Пользователи и профиль
    • Сайдбар документации
    • Ошибки и проблемы
  • КЕЙСЫ
    • Создание сайтов
    • Работа с контентом
    • Фреймы и данные
    • Настройка сайта
    • Перевод страницы
  • ПРИЛОЖЕНИЯ
    • Приложения
      • Закрытый доступ
      • Данные приложения
      • Внешние данные
      • Демо
    • Быстрый старт
    • Доступ и токен
  • СУЩНОСТИ
    • Страницы
    • Фреймы
    • Данные
    • Медиа
  • УСТРОЙСТВО САЙТА
    • Сайты
    • Настройки сайта
    • Меню
    • Языки и переводы
    • Стили и оформление
  • УПРАВЛЕНИЕ
    • Домены
    • Соцсети и контакты
    • SEO
    • Аналитика
    • Кэш
    • Дашборд и вход
    • Пользователи и профиль
    • Сайдбар документации
    • Ошибки и проблемы
    • Редиректы
    • Кредиты и автоматизация
    • Входящие
    • Кросспостинг
Устройство сайта
Markdown
Открыть в ИИ
  • Открыть в ChatGPT
  • Открыть в Claude
  • Открыть в Gemini
  • Открыть в Perplexity
  • Открыть в Grok
  • Открыть в DeepSeek

Меню

Эндпоинты меню сайта: пункты меню в области темы как системные данные menu.{область} и сами меню — создание, переименование, удаление, постановка в область, правка пунктов и порядок; как меню устроены для человека — Меню.

info

Во всех примерах API — https://onpress.pro/api/v2, SITE — id сайта (SITE_ID), OP_TOKEN — токен op_XXXX. Права на всех эндпоинтах страницы — администратор сайта. Как выбирается сайт и в какой форме приходят отказы — Доступ и токен.

Области темы: header, footer_1, footer_2, footer_3. {ref} меню в адресе — id, слаг, имя или область с тильдой (~header — меню, которое сейчас стоит в шапке; принимается и @header). lang выбирает меню языка, theme — карту областей другой темы. Каждая запись, кроме переименования, пересобирает фреймы с меню и сбрасывает кэш их страниц — поле rebaked.

Пункт в теле записи: {"page": id|слаг|путь} — ссылка на страницу сайта, или {"url": "…"} — любой адрес; плюс title, target, classes (строка через пробел), children (вложенные пункты). Голое значение вместо объекта — ссылка на страницу. Путь в url дополняется адресом сайта. Пункт на неопубликованную страницу — отказ 409 menu_items_invalid, пропустить его — "allow_invalid": true.

GET /data/menu.{область}

Отдаёт пункты меню, которое стоит в области, деревом. Например, прочитать английское меню шапки:

curl -s -H "Authorization: Bearer $OP_TOKEN" "$API/site/$SITE/data/menu.header?lang=en"
{
  "success": true,
  "site_id": "x9HTLHECq",
  "name": "menu.header",
  "origin": "system",
  "writable": true,
  "write": { "method": "PUT", "at": "/data/menu.header", "…": "…" },
  "total": 2,
  "meta": { "menu_id": 83, "invalid_items": 0 },
  "items": [
    { "id": 6011, "title": "Docs", "url": "/en/docs/", "type": "post_type", "object": "page", "object_id": 4934, "target": "", "classes": [], "description": "", "parent": 0, "order": 1, "children": [] },
    { "id": 5603, "title": "Contacts", "url": "/en/contacts/", "type": "post_type", "object": "page", "object_id": 5600, "target": "", "classes": [], "description": "", "parent": 0, "order": 2, "children": [] }
  ]
}
ПараметрТипПо умолчаниюОписание
langstringосновной языкменю этого языка в области
themestringтема сайтакарта областей другой темы

Пункт: id, title, url, type (post_type — страница, custom — свой адрес), object и object_id — страница пункта, target, classes, parent, order, children. В meta — menu_id меню в области и invalid_items — сколько пунктов ведут на страницы, которых посетитель не увидит.

PUT /data/menu.{область}

Заменяет пункты меню в области целиком; то же делает PUT /menus/~{область}/items. Например, положить в английскую шапку две ссылки:

curl -s -X PUT "$API/site/$SITE/data/menu.header" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"lang": "en", "items": [{"page": "/en/docs/", "title": "Docs"}, {"page": "/en/contacts/"}]}'
ПолеТипПо умолчаниюОписание
itemsarray—дерево пунктов, обязательно; [] очищает меню
langstringосновной языкменю этого языка
allow_invalidboolfalseпропустить пункты на неопубликованные страницы
themestringтема сайтакарта областей другой темы

Ответ — как у PUT /menus/{ref}/items, плюс source и rebaked. Области без меню запись не создаёт: сначала POST /menus с location.

КодСтатусКогдаЧто делать
bad_menu_items400нет items или это не массивпришлите дерево пунктов
menu_not_assigned404в области нет менюсоздайте меню с location
menu_items_unresolved409пункт не нашёл страницу; разбор в errorsисправьте page
menu_items_invalid409пункт ведёт на неопубликованную страницу; список в invalidопубликуйте страницу или allow_invalid
wrong_method_for_source405PATCH вместо PUTотправьте PUT
system_source_not_deletable409DELETE /data/menu.{область}очистите меню PUT с "items": [] или снимите его с области

GET /menus

Отдаёт все меню сайта и где каждое стоит. Например:

curl -s -H "Authorization: Bearer $OP_TOKEN" "$API/site/$SITE/menus"
{
  "success": true,
  "site_id": "x9HTLHECq",
  "theme": "onpress-v2",
  "locations": ["header", "footer_1", "footer_2", "footer_3"],
  "default_lang": "en",
  "read_items_at": "/data/menu.{location}",
  "total": 14,
  "menus": [
    { "id": 83, "name": "header en", "slug": "header-en", "items": 3, "assigned": [ { "location": "header", "lang": "en" } ] },
    { "id": 87, "name": "footer center en", "slug": "footer-center-en", "items": 9, "assigned": [] }
  ]
}
ПараметрТипПо умолчаниюОписание
themestringтема сайтакарта областей другой темы

menus[].items — число пунктов, assigned — области и языки, где меню стоит.

POST /menus

Создаёт меню, сразу ставит его в область и наполняет пунктами. Например, меню шапки на английском:

curl -s -X POST "$API/site/$SITE/menus" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"name": "header en", "location": "header", "lang": "en", "items": [{"page": "/en/docs/", "title": "Docs"}, {"url": "https://onpress.pro/", "title": "OnPress", "target": "_blank", "children": [{"page": "/en/contacts/"}]}]}'
{
  "success": true,
  "site_id": "x9HTLHECq",
  "theme": null,
  "menu": { "id": 171, "name": "header en", "slug": "header-en", "items": 3 },
  "items": [
    { "id": 6433, "at": "0", "title": "Docs", "type": "post_type", "page": 4934, "url": "/en/docs/", "parent": 0, "order": 1, "valid": true },
    { "id": 6434, "at": "1", "title": "OnPress", "type": "custom", "page": null, "url": "https://onpress.pro/", "parent": 0, "order": 2, "valid": true },
    { "id": 6435, "at": "1.0", "title": "Contacts", "type": "post_type", "page": 5600, "url": "/en/contacts/", "parent": 6434, "order": 3, "valid": true }
  ],
  "invalid": [],
  "rebaked": { "status": "ok", "total": 9, "…": "…" }
}
ПолеТипПо умолчаниюОписание
namestring—название меню, обязательно
slugstringиз названияслаг, делается уникальным
locationstring—сразу поставить в область
langstringосновной языкязык для карты областей
itemsarray—сразу наполнить деревом пунктов
allow_invalidboolfalseпропустить пункты на неопубликованные страницы
themestringтема сайтатема для карты областей

at — место пункта в присланном дереве: "1.0" — первый вложенный пункт второго.

КодСтатусКогдаЧто делать
menu_name_required400нет nameпришлите название
bad_items400items не массивпришлите дерево пунктов
unknown_location400такой области нет; список в locationsвозьмите область из списка
unknown_language400такого языка на сайте нетвозьмите слаг из GET /data/site.languages
polylang_inactive409lang на одноязычном сайтеуберите lang
menu_items_unresolved409пункт не нашёл страницу; разбор в errorsисправьте page
menu_items_invalid409пункт ведёт на неопубликованную страницу; список в invalidопубликуйте страницу или allow_invalid
menu_assignment_not_stored500область не записаласьповторите запрос

PATCH /menus/{ref}

Переименовывает меню; пункты и области не меняются, фреймы не пересобираются. Например:

curl -s -X PATCH "$API/site/$SITE/menus/header-en" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"name": "Header EN"}'
{ "success": true, "site_id": "x9HTLHECq", "menu": { "id": 171, "term_taxonomy_id": 171, "name": "Header EN", "slug": "header-en", "count": 3 } }
ПолеТипПо умолчаниюОписание
namestring—новое название
slugstring—новый слаг, уникальный среди меню
КодСтатусКогдаЧто делать
nothing_to_update400нет ни name, ни slugпришлите поле
menu_not_found404меню нетвозьмите id из GET /menus
ambiguous_menu409имя подходит нескольким менюадресуйте меню по id

DELETE /menus/{ref}

Удаляет меню со всеми пунктами и снимает его со всех областей. Например:

curl -s -X DELETE "$API/site/$SITE/menus/171" -H "Authorization: Bearer $OP_TOKEN"
{ "success": true, "site_id": "x9HTLHECq", "deleted": { "id": 171, "name": "Header EN", "slug": "header-en" }, "removed_items": 3, "freed_locations": [ { "location": "header", "lang": "en" } ], "rebaked": { "…": "…" } }
КодСтатусКогдаЧто делать
menu_not_found404меню нетвозьмите id из GET /menus
ambiguous_menu409имя подходит нескольким менюадресуйте меню по id

PUT /menus/{ref}/location

Ставит меню в область; меню, которое стояло там раньше, остаётся на сайте. Например, поставить меню 171 в шапку английской версии:

curl -s -X PUT "$API/site/$SITE/menus/171/location" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"location": "header", "lang": "en"}'
ПолеТипПо умолчаниюОписание
locationstring—область, обязательно: header, footer_1, footer_2, footer_3
langstringосновной языкязык области
themestringтема сайтатема для карты областей

Записанные области перечитываются и сверяются с присланными.

КодСтатусКогдаЧто делать
location_required400нет location или пустая строкаснять меню с области — DELETE /menus/{ref}/location
unknown_location400такой области нет; список в locationsвозьмите область из списка
unknown_language400такого языка на сайте нетвозьмите слаг из GET /data/site.languages
menu_not_found404меню нетвозьмите id из GET /menus
polylang_inactive409lang на одноязычном сайтеуберите lang
menu_assignment_not_stored500область не записалась; что прочитано — в read_backповторите запрос

DELETE /menus/{ref}/location

Снимает меню с области, само меню остаётся. Например, убрать меню из английской шапки:

curl -s -X DELETE "$API/site/$SITE/menus/~header?lang=en" -H "Authorization: Bearer $OP_TOKEN"
{ "success": true, "site_id": "x9HTLHECq", "theme": "onpress-v2", "menu": { "id": 171, "name": "Header EN", "slug": "header-en" }, "freed_locations": [ { "location": "header", "lang": "en", "via": "polylang" } ], "rebaked": { "…": "…" } }
ПараметрТипПо умолчаниюОписание
locationstringобласть из ~область в адресе; у меню по id или слагу — всес какой области снять
langstringвсе языкис какого языка снять
themestringтема сайтатема для карты областей

Параметры принимаются в строке запроса или в теле.

КодСтатусКогдаЧто делать
unknown_location400такой области нетвозьмите область из GET /menus
unknown_language400такого языка на сайте нетвозьмите слаг из GET /data/site.languages
menu_not_found404меню нетвозьмите id из GET /menus
menu_not_in_location404меню не стоит в этой области; где стоит — в standingпроверьте location и lang
polylang_inactive409lang на одноязычном сайтеуберите lang

PUT /menus/{ref}/items

Заменяет дерево пунктов меню целиком. Например:

curl -s -X PUT "$API/site/$SITE/menus/171/items" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"items": [{"page": "/en/docs/", "title": "Docs"}, {"page": "/en/contacts/"}]}'
{
  "success": true,
  "site_id": "x9HTLHECq",
  "menu": { "id": 171, "name": "Header EN", "slug": "header-en" },
  "total": 2,
  "invalid": [],
  "items": [
    { "id": 6437, "at": "0", "title": "Docs", "type": "post_type", "page": 4934, "url": "/en/docs/", "parent": 0, "order": 1, "valid": true },
    { "id": 6438, "at": "1", "title": "Contacts", "type": "post_type", "page": 5600, "url": "/en/contacts/", "parent": 0, "order": 2, "valid": true }
  ],
  "read_items_at": "/data/menu.{location}",
  "rebaked": { "…": "…" }
}
ПолеТипПо умолчаниюОписание
itemsarray—дерево пунктов, обязательно
allow_invalidboolfalseпропустить пункты на неопубликованные страницы
lang, themestring—язык и тема для ~область
КодСтатусКогдаЧто делать
bad_items400нет items или это не массивпришлите дерево пунктов
menu_not_found404меню нетвозьмите id из GET /menus
menu_not_assigned404в области ~область нет менюпоставьте меню в область
menu_items_unresolved409пункт не нашёл страницу; разбор в errorsисправьте page
menu_items_invalid409пункт ведёт на неопубликованную страницу; список в invalidопубликуйте страницу или allow_invalid

POST /menus/{ref}/items

Добавляет один пункт в конец уровня; parent — id пункта, под который добавить. Тело — {"item": {…}} или сам пункт. Например:

curl -s -X POST "$API/site/$SITE/menus/171/items" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"item": {"page": "/en/pricing/", "title": "Pricing"}}'
{ "success": true, "site_id": "x9HTLHECq", "menu": { "id": 171, "name": "Header EN" }, "item": { "id": 6439, "title": "Pricing", "type": "post_type", "page": 5810, "url": "/en/pricing/", "parent": 0, "order": 3, "valid": true }, "total": 3, "rebaked": { "…": "…" } }
КодСтатусКогдаЧто делать
item_target_required400нет ни page, ни urlпришлите одно из двух
page_not_found404страницы нетпроверьте page
item_not_found404пункта-родителя нетвозьмите id из GET /data/menu.{область}
menu_items_invalid409пункт ведёт на неопубликованную страницуопубликуйте страницу или allow_invalid

PATCH /menus/{ref}/items/{id}

Меняет один пункт: title, page, url, target, classes, parent. page превращает пункт в ссылку на страницу, url — в ссылку на свой адрес. Например, переименовать пункт:

curl -s -X PATCH "$API/site/$SITE/menus/171/items/6434" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"title": "OnPress.pro"}'
{ "success": true, "site_id": "x9HTLHECq", "menu": { "id": 171, "name": "Header EN" }, "item": { "id": 6434, "title": { "from": "OnPress", "to": "OnPress.pro" } }, "warnings": [], "rebaked": { "…": "…" } }

В item изменённые поля приходят парой from и to.

КодСтатусКогдаЧто делать
nothing_to_update400в теле нет ни одного поляпришлите поле
item_not_found404пункта нетвозьмите id из GET /data/menu.{область}
page_not_found404страницы нетпроверьте page
bad_parent409пункт сам себе родительвыберите другого родителя
menu_items_invalid409пункт ведёт на неопубликованную страницуопубликуйте страницу или allow_invalid

DELETE /menus/{ref}/items/{id}

Удаляет пункт вместе с вложенными. Например:

curl -s -X DELETE "$API/site/$SITE/menus/171/items/6434" -H "Authorization: Bearer $OP_TOKEN"
{ "success": true, "site_id": "x9HTLHECq", "menu": { "id": 171, "name": "Header EN" }, "removed": [6434, 6435], "total": 2, "rebaked": { "…": "…" } }
КодСтатусКогдаЧто делать
item_not_found404пункта нетвозьмите id из GET /data/menu.{область}

POST /menus/{ref}/reorder

Задаёт порядок пунктов одного уровня. Например, поставить «Pricing» первым:

curl -s -X POST "$API/site/$SITE/menus/171/reorder" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"order": [6439, 6433]}'
{ "success": true, "site_id": "x9HTLHECq", "menu": { "id": 171, "name": "Header EN" }, "parent": 0, "order": [6439, 6433, 6434], "appended": [6434], "rebaked": { "…": "…" } }
ПолеТипПо умолчаниюОписание
orderint[]—id пунктов уровня в нужном порядке, обязательно
parentint0id пункта-родителя уровня, 0 — верхний уровень

Неназванные пункты уровня встают после названных — appended.

КодСтатусКогдаЧто делать
bad_reorder400order не массив idпришлите список id
item_not_found404пункта нет на этом уровневозьмите id из GET /data/menu.{область}
arrow_backНазад
Фреймы
Далееarrow_forward
Настройки сайта
На этой странице
  • GET /data/menu.{область}
    • PUT /data/menu.{область}
      • GET /menus
        • POST /menus
          • PATCH /menus/{ref}
            • DELETE /menus/{ref}
              • PUT /menus/{ref}/location
                • DELETE /menus/{ref}/location
                  • PUT /menus/{ref}/items
                    • POST /menus/{ref}/items
                      • PATCH /menus/{ref}/items/{id}
                        • DELETE /menus/{ref}/items/{id}
                          • POST /menus/{ref}/reorder
                          1. Главная
                          2. Docs
                          3. Документация OnPress v2
                          4. Справочник API
                          5. Меню
                          OnPress
                          OnPress
                          ИП Зуев И.В. ИНН: 360408359441
                          info@onpress.pro
                          © 2026
                          политика конфиденциальности публичная оферта
                          • visa
                          • mastercard
                          • sber
                          • tpay