Перейти к содержанию

Страницы

Эндпоинты для управления страницами Grav: список, создание, обновление, удаление, копирование, перемещение и изменение порядка, а также переводы страниц, пакетные операции, токены предпросмотра черновиков, таксономия и список языков сайта.

Список страниц

GET /pages

Выводит страницы с фильтрацией, сортировкой и постраничной разбивкой. Использует директорию страниц Flex, когда она доступна (с индексацией и кэшированием), а в остальных случаях — стандартную службу Pages. При translations=true каждый элемент содержит has_default_file и explicit_language_files, чтобы клиенты могли отличить настоящие файлы переводов от подстановки языка по умолчанию.

Параметры

Имя Тип Обязательный Описание
page integer Нет Номер страницы для постраничной разбивки (по умолчанию 1).
per_page integer Нет Число результатов на странице (по умолчанию 20, не больше plugins.api.pagination.max_per_page, по умолчанию 1000).
sort string Нет Поле сортировки: date, title, slug, modified, order или default. Если не указано, страницы сортируются по date по убыванию. default вместе с children_of использует собственный порядок страниц родителя; без children_of сортирует по order по возрастанию. Неизвестное поле возвращает 422.
order string Нет Направление сортировки: asc (по умолчанию) или desc. Игнорируется, если sort не указан.
search string Нет Полнотекстовый поиск по индексируемым полям страниц (только при использовании Flex).
published boolean Нет Фильтр по состоянию публикации.
visible boolean Нет Фильтр по видимости.
routable boolean Нет Фильтр по маршрутизируемости.
template string Нет Фильтр по имени шаблона страницы.
parent string Нет Фильтр по потомкам, маршрут которых начинается с этого родительского пути (например, /blog вернёт /blog/post-1, /blog/sub/post-2).
children_of string Нет Фильтр по прямым дочерним страницам заданного маршрута.
root boolean Нет true возвращает только страницы верхнего уровня (прямых потомков корня страниц, поэтому дочерние страницы главной не учитываются). false возвращает все страницы, кроме страниц верхнего уровня.
locate string Нет Маршрут страницы, к которой нужно перейти. Если он есть в отфильтрованных и отсортированных результатах, сервер возвращает часть результатов, содержащую его (переопределяя page), и сообщает его позицию в meta.pagination.located_at_index.
lang string Нет Выводит страницы на определённом языке. Код, не являющийся настроенным языком, возвращает 422.
translations boolean Нет Включать в каждый элемент метаданные переводов: translated_languages, untranslated_languages, has_default_file, explicit_language_files.

Ответ

{"data": [{"route": "/blog", "slug": "blog", "title": "Blog", "template": "blog", "published": true, "visible": true, "routable": true, "has_children": true, "permissions": {"create": true, "read": true, "update": true, "delete": true, "publish": true, "list": true}}], "meta": {"pagination": {"page": 1, "per_page": 20, "total": 42, "total_pages": 3}}, "links": {"self": "/api/v1/pages?page=1&per_page=20", "next": "/api/v1/pages?page=2&per_page=20", "last": "/api/v1/pages?page=3&per_page=20"}}

Коды ответов

Код Описание
200 Успех.
401 Не авторизован.
403 Нет разрешения api.pages.read.
422 Неизвестное поле сортировки или неверный код языка.

Получение страницы

GET /pages/{route}

Возвращает одну страницу с полным содержимым, метаданными и медиафайлами, а также объект permissions с возможностями вызывающей стороны для этой страницы. Возвращает ETag; используйте If-None-Match для условных запросов. Требуется api.pages.read с учётом собственного правила read страницы. Для страницы с process.twig: true также нужно разрешение на Twig в контенте.

Параметры

Имя Тип Обязательный Описание
route string Да Маршрут страницы (например, /blog/my-post).
summary boolean Нет Не возвращать необработанный content, а вместо него вернуть простой текст summary (отрендеренный, без тегов, обрезанный).
summary_size integer Нет Максимальная длина summary в символах (по умолчанию 300). Используется только с summary=true.
render boolean Нет Дополнительно вернуть отрендеренный HTML в content_html.
children boolean Нет Включить в ответ дочерние страницы.
children_depth integer Нет Сколько уровней дочерних страниц включать (по умолчанию 1). Используется только с children=true.
translations boolean Нет Включить метаданные переводов: translated_languages, untranslated_languages, has_default_file (есть ли файл {template}.md без языкового суффикса), explicit_language_files (подмножество языков, для которых на диске есть настоящий файл {template}.{lang}.md).
lang string Нет Вернуть страницу на определённом языке (переопределяет активный язык запроса).

Ответ

{"data": {"route": "/blog/my-post", "slug": "my-post", "title": "My Post", "template": "post", "content": "# Hello World", "header": {"published": true}, "media": [], "has_default_file": true, "explicit_language_files": ["fr"]}}

Коды ответов

Код Описание
200 Успех.
304 Не изменено (совпадение ETag).
401 Не авторизован.
403 Нет разрешения api.pages.read, доступ запрещён собственными правилами страницы, либо страница использует Twig в контенте, а у вызывающей стороны нет этого разрешения.
404 Страница не найдена.
422 Неверный код языка.

Создание страницы

POST /pages

Создаёт новую страницу. Родительская страница должна уже существовать (кроме страниц верхнего уровня), а целевая папка должна быть свободна. Метаданные страницы формируются из значений по умолчанию схемы шаблона, затем из title, затем из переданного header. Возвращает 201 с новой страницей и заголовком Location. Требуется api.pages.write с учётом собственного правила create родительской страницы; установка process.twig: true также требует разрешения на Twig в контенте.

Параметры

Имя Тип Обязательный Описание
route string Да Маршрут, по которому будет создана страница
title string Да Заголовок страницы
template string Нет Используемый шаблон страницы
content string Нет Содержимое Markdown для тела страницы
header object Нет Значения заголовка/метаданных страницы
order integer Нет Числовой префикс порядка для папки страницы. Передайте "auto", чтобы использовать следующий свободный номер среди соседних страниц (или не использовать префикс, если ни у одной соседней страницы его нет).
kind string Нет Одно из значений: page (по умолчанию), folder (папка без файла .md) или module (модульная секция, её slug получает префикс _). Для folder ответ может содержать только route и kind.
lang string Нет Код языка для многоязычных сайтов (поле тела запроса или параметр запроса ?lang=). Записывает файл {template}.{lang}.md.

Запрос

{"route": "/blog/new-post", "title": "New Post", "template": "post", "content": "# New Post\nContent here"}

Ответ

{"data": {"route": "/blog/new-post", "slug": "new-post", "title": "New Post", "template": "post", "published": true, "content": "# New Post\nContent here", "media": [], "permissions": {"create": true, "read": true, "update": true, "delete": true, "publish": true, "list": true}}}

Коды ответов

Код Описание
201 Страница создана
401 Не авторизован
403 Нет разрешения api.pages.write, доступ запрещён правилами родительской страницы, либо Twig в контенте не разрешён
422 Не передан route или title, неверный kind, родительская страница не найдена, страница по этому маршруту уже существует, неверный код языка или не пройдена валидация по схеме

Обновление страницы

PATCH /pages/{route}

Частичное обновление страницы. Меняются только переданные поля, а результат валидируется по схеме страницы. Возвращает обновлённую страницу с новым ETag. Требуется api.pages.write с учётом собственного правила update страницы; включение process.twig или редактирование страницы, где он уже включён, также требует разрешения на Twig в контенте.

Параметры

Имя Тип Обязательный Описание
route string Да Маршрут страницы (параметр пути)
title string Нет Новый заголовок страницы
content string Нет Новое содержимое Markdown
header object Нет Значения заголовка, которые нужно слить с существующими метаданными страницы. Значение null удаляет соответствующий ключ.
header_mode string Нет Установите replace, чтобы заменить все метаданные страницы значением header вместо слияния (используется редакторами необработанных метаданных).
template string Нет Изменить шаблон страницы
published boolean Нет Установить состояние публикации
visible boolean Нет Установить видимость
lang string Нет Параметр запроса. Обновить версию на определённом языке; этот перевод должен уже существовать (создайте его через POST /pages/{route}/translate).

Запрос

{"title": "Updated Title", "header": {"subtitle": "New subtitle"}}

Ответ

{"data": {"route": "/blog/my-post", "slug": "my-post", "title": "Updated Title", "template": "post", "header": {"title": "Updated Title", "subtitle": "New subtitle"}, "content": "# Hello World", "media": [], "permissions": {"create": true, "read": true, "update": true, "delete": true, "publish": true, "list": true}}}

Коды ответов

Код Описание
200 Успех
401 Не авторизован
403 Нет разрешения api.pages.write, доступ запрещён правилами страницы, либо Twig в контенте не разрешён
404 Страница не найдена
409 Конфликт (If-Match не совпадает с текущим ETag)
422 Не пройдена валидация по схеме, неверный код языка или запрошенный перевод не существует

Поддерживает оптимистичный контроль конкурентного доступа через заголовок If-Match. Передавайте ETag из последнего GET-запроса, чтобы не перезаписать параллельные изменения.


Удаление страницы

DELETE /pages/{route}

Удаляет страницу и её папку. Дочерние страницы тоже удаляются, если не указано children=false; в этом случае страница с дочерними страницами отклоняется с кодом 422. С ?lang= на многоязычном сайте удаляется только файл этого языка; если это единственный перевод страницы, удаляется вся папка, и children=false действует так же. Требуется api.pages.write с учётом собственного правила delete страницы.

Параметры

Имя Тип Обязательный Описание
route string Да Маршрут удаляемой страницы
children boolean Нет Также удалить дочерние страницы. false запрещает удалять страницу, у которой есть дочерние.
lang string Нет Удалить только версию на определённом языке (404, если у страницы нет такого перевода)

Коды ответов

Код Описание
204 Страница удалена
401 Не авторизован
403 Нет разрешения api.pages.write или доступ запрещён правилами страницы
404 Страница не найдена или нет перевода для запрошенного языка
422 У страницы есть дочерние страницы, а указано children=false, либо неверный код языка

Перемещение страницы

POST /pages/{route}/move

Перемещает страницу к новому родителю, при необходимости переименовывая её slug или меняя префикс порядка. Возвращает перемещённую страницу с ETag; если страницу не удаётся получить по новому маршруту, возвращаются только route и slug. Требуется api.pages.write с учётом собственного правила update страницы и правила create целевого родителя.

Параметры

Имя Тип Обязательный Описание
route string Да Текущий маршрут страницы (параметр пути)
parent string Да Маршрут целевого родителя (/ для верхнего уровня)
slug string Нет При необходимости переименовать slug во время перемещения. Должен быть одним сегментом пути.
order integer Нет Числовой префикс порядка на новом месте. По умолчанию используется текущий префикс; null удаляет его.

Запрос

{"parent": "/blog", "slug": "moved-post"}

Ответ

{"data": {"route": "/blog/moved-post", "slug": "moved-post", "title": "My Post", "template": "post", "content": "# Hello World", "media": []}}

Коды ответов

Код Описание
200 Страница перемещена
401 Не авторизован
403 Нет разрешения api.pages.write или доступ запрещён правилами страницы
404 Страница не найдена
422 Не передан parent, неверный slug, целевой родитель не найден, место назначения уже занято или страница уже находится там

Изменение порядка страниц

POST /pages/{route}/reorder

Меняет порядок дочерних страниц под родителем. Перечисленные slug'и получают числовые префиксы папок 1, 2, 3 в указанном порядке с сохранением самой широкой ширины префикса, уже используемой соседними страницами. Дочерние страницы, которых нет в списке, сохраняют текущее имя папки. Возвращает всех потомков страницы в новом порядке. Требуется api.pages.write с учётом собственного правила update родительской страницы.

Параметры

Имя Тип Обязательный Описание
route string Да Маршрут родительской страницы (параметр пути)
order array Да Массив slug'ов дочерних страниц в нужном порядке

Запрос

{"order": ["first-post", "second-post", "third-post"]}

Ответ

{"data": [{"route": "/blog/first-post", "slug": "first-post", "title": "First Post", "order": "01."}, {"route": "/blog/second-post", "slug": "second-post", "title": "Second Post", "order": "02."}, {"route": "/blog/third-post", "slug": "third-post", "title": "Third Post", "order": "03."}]}

Коды ответов

Код Описание
200 Порядок страниц изменён
401 Не авторизован
403 Нет разрешения api.pages.write или доступ запрещён правилами родительской страницы
404 Родительская страница не найдена
422 order отсутствует или не является массивом, либо slug не является дочерней страницей этой страницы

Копирование страницы

POST /pages/{route}/copy

Дублирует страницу (включая всё содержимое и медиафайлы) по новому маршруту. Целевой родитель должен существовать, а целевой путь должен быть свободен. Если в метаданных источника задан slug:, у копии он переписывается на новое имя папки. Возвращает 201 с новой страницей (только route и slug, если копию потом не удаётся получить). Добавляет теги инвалидации кэша pages:create:<dest> и pages:list. Требуется api.pages.write с учётом правила read исходной страницы и правила create целевого родителя.

Параметры

Имя Тип Обязательный Описание
route string Да Маршрут исходной страницы (параметр пути).
route string Да Целевой маршрут для копии (поле тела запроса).

Запрос

{"route": "/blog/my-post-copy"}

Ответ

{"data": {"route": "/blog/my-post-copy", "slug": "my-post-copy", "title": "My Post", "template": "post"}}

Коды ответов

Код Описание
201 Страница скопирована; заголовок Location указывает на новую страницу.
401 Не авторизован.
403 Нет разрешения api.pages.write или доступ запрещён правилами исходной либо целевой страницы.
404 Исходная страница не найдена.
422 Не передан целевой route, целевой родитель не найден или место назначения уже занято.

Список языков страницы

GET /pages/{route}/languages

Выводит переведённые и непереведённые языки страницы. Используется для переключателя языков в редакторах страниц: translated — языки, для которых есть содержимое, untranslated — языки, настроенные для сайта, но отсутствующие у этой страницы. translated сопоставляет каждый код языка с маршрутом страницы на этом языке. На одноязычном сайте оба списка пусты. Требуется api.pages.read с учётом собственного правила read страницы.

Параметры

Имя Тип Обязательный Описание
route string Да Маршрут страницы (параметр пути).

Ответ

{"data": {"route": "/blog/my-post", "default_language": "en", "translated": {"en": "/blog/my-post", "fr": "/blog/mon-article"}, "untranslated": ["de", "es"]}}

Коды ответов

Код Описание
200 Статус языков возвращён.
401 Не авторизован.
403 Нет разрешения api.pages.read или доступ запрещён правилами страницы.
404 Страница не найдена.

Примечание

Если на сайте есть только простой default.md (без языкового суффикса) и включена многоязычность, Grav сообщит язык по умолчанию в translated как подстановку. Используйте GET /pages/{route}?translations=true, чтобы получить поля has_default_file / explicit_language_files, которые показывают, какие языки обеспечены настоящим файлом на диске.


Создание перевода

POST /pages/{route}/translate

Создаёт новый перевод страницы на указанном языке. Записывает новый файл {template}.{lang}.md рядом с существующей страницей. Результат валидируется по схеме страницы. Вызывает onApiBeforePageTranslate (изменяемое), onAdminSave/onAdminAfterSave и onApiPageTranslated. Возвращает 201 со страницей на новом языке; в заголовке Location нет параметра lang, поэтому добавьте ?lang=<code>, чтобы получить перевод. Требуется включённая многоязычность и api.pages.write с учётом собственного правила update страницы. Включение process.twig в header также требует разрешения на Twig в контенте.

Параметры

Имя Тип Обязательный Описание
route string Да Маршрут страницы (параметр пути).
lang string Да Код целевого языка (должен совпадать с настроенным языком сайта).
title string Нет Заголовок перевода (по умолчанию — заголовок исходной страницы).
content string Нет Необработанное содержимое Markdown (по умолчанию — содержимое исходной страницы).
header object Нет Объект метаданных страницы (по умолчанию — копия заголовка исходной страницы со слитым в неё title). Отсутствующие значения заполняются значениями по умолчанию из схемы шаблона.

Запрос

{"lang": "fr", "title": "Mon article", "content": "# Bonjour"}

Ответ

{"data": {"route": "/blog/my-post", "slug": "my-post", "title": "Mon article", "template": "post", "language": "fr", "header": {"title": "Mon article"}, "content": "# Bonjour", "media": []}}

Коды ответов

Код Описание
201 Перевод создан.
401 Не авторизован.
403 Нет разрешения api.pages.write, доступ запрещён правилами страницы или Twig в контенте не разрешён.
404 Исходная страница не найдена.
422 Не передан lang, код языка не является строкой или не настроен, многоязычность не включена, перевод для этого языка уже существует (для обновления используйте PATCH) или не пройдена валидация по схеме.

Принятие языка

POST /pages/{route}/adopt-language

Объявляет базовый файл страницы без языкового суффикса (например, default.md) определённым языком, переименовывая его на месте в {template}.{lang}.md. Это чисто переименование в файловой системе плюс сброс кэша — содержимое не затрагивается. Предназначено для сайтов, которые начинали как одноязычные, а позже включили многоязычность: позволяет администратору объявить «этот существующий контент — английская версия», не редактируя YAML. Вызывает onApiBeforePageAdoptLanguage и onApiPageLanguageAdopted. Возвращает страницу в том виде, в каком она загружается на принятом языке. Требуется api.pages.write с учётом собственного правила update страницы.

Параметры

Имя Тип Обязательный Описание
route string Да Маршрут страницы (параметр пути).
lang string Да Код языка, который нужно назначить базовому файлу.

Запрос

{"lang": "en"}

Ответ

{"data": {"route": "/blog/my-post", "slug": "my-post", "title": "My Post", "template": "default", "language": "en", "content": "# Hello", "media": []}}

Коды ответов

Код Описание
200 Базовый файл переименован в имя файла с языковым суффиксом.
401 Не авторизован.
403 Нет разрешения api.pages.write или доступ запрещён правилами страницы.
404 Страница не найдена.
422 lang отсутствует или неверен (в том числе если код не является строкой), многоязычность не включена, базового файла без суффикса нет (страница уже использует файлы с языковыми суффиксами — используйте /translate), файл перевода для этого языка уже существует или имя целевого файла совпадает с именем базового.
500 Не удалось переименовать файл в файловой системе.

Синхронизация перевода

POST /pages/{route}/sync

Перезаписывает содержимое и заголовок одного языка содержимым и заголовком другого. Удобно для сценариев «вернуть эту французскую страницу к английской версии». Файлы перевода источника и цели должны уже существовать. Действуют те же проверки Twig в контенте и валидация по схеме, что и при обычном сохранении страницы. Вызывает onApiBeforePageSync (изменяемые заголовок и содержимое) и onApiPageSynced. Возвращает обновлённую целевую страницу. Требуется включённая многоязычность и api.pages.write с учётом собственного правила update страницы.

Параметры

Имя Тип Обязательный Описание
route string Да Маршрут страницы (параметр пути).
source_lang string Да Код языка, из которого копируется содержимое.
target_lang string Да Код языка, который перезаписывается.

Запрос

{"source_lang": "en", "target_lang": "fr"}

Ответ

{"data": {"route": "/blog/my-post", "slug": "my-post", "title": "My Post", "template": "post", "language": "fr", "content": "# Hello", "media": []}}

Коды ответов

Код Описание
200 Целевой перевод перезаписан содержимым источника.
401 Не авторизован.
403 Нет разрешения api.pages.write, доступ запрещён правилами страницы или Twig в контенте не разрешён.
404 Страница не найдена для одного из переданных языков.
422 Отсутствуют поля, источник и цель совпадают, файла целевого перевода нет (сначала создайте его через /translate), код языка не является строкой или не настроен, многоязычность не включена или не пройдена валидация по схеме.

Сравнение переводов

GET /pages/{route}/compare

Возвращает параллельно заголовок, содержимое, метаданные и дату изменения для двух языковых версий страницы. Используется интерфейсами сравнения переводов в Admin2. Сторона равна null, если страница не существует на этом языке, а exists равно false, если она находится только через подстановку языка по умолчанию, а не через собственный файл, — так клиенты всё равно могут показывать состояние «цель отсутствует». Требуется включённая многоязычность и api.pages.read, причём ни исходная, ни целевая версия не должны запрещать вызывающей стороне чтение.

Параметры

Имя Тип Обязательный Описание
route string Да Маршрут страницы (параметр пути).
source string Да Код исходного языка (параметр запроса).
target string Да Код целевого языка (параметр запроса).

Ответ

{"data": {"route": "/blog/my-post", "source": {"lang": "en", "exists": true, "title": "My Post", "content": "# Hello", "header": {"title": "My Post"}, "modified": "2026-04-17T10:00:00+00:00"}, "target": {"lang": "fr", "exists": false, "title": "My Post", "content": "# Hello", "header": {"title": "My Post"}, "modified": null}}}

Коды ответов

Код Описание
200 Сравнение возвращено (источник или цель могут быть null или иметь exists: false).
401 Не авторизован.
403 Нет разрешения api.pages.read или исходная либо целевая версия запрещает чтение.
422 Не передан параметр запроса source / target, код языка не является строкой (например, source[]=) или не настроен, либо многоязычность не включена.

Пакетные операции со страницами

POST /pages/batch

Выполняет одну и ту же операцию (publish, unpublish, delete или copy) над несколькими страницами за один запрос. Результаты по каждой странице возвращаются отдельно, поэтому один сбой не прерывает пакет; страница, правила которой запрещают действие, возвращается как результат с error. До запуска любой операции каждый маршрут должен указывать на существующую страницу. Ограничено plugins.api.batch.max_items (по умолчанию 50). Добавляет теги инвалидации кэша по каждой странице в соответствии с операцией. Требуется api.pages.write.

Параметры

Имя Тип Обязательный Описание
operation string Да Одно из значений: publish, unpublish, delete, copy.
routes array Да Непустой массив маршрутов страниц.
options object Нет Используется только для copy: destination (родительский маршрут для копирования, / для верхнего уровня, по умолчанию — текущий родитель каждой страницы) и suffix (добавляется к каждому slug, по умолчанию -copy, должен быть одним сегментом пути).

Запрос

{"operation": "publish", "routes": ["/blog/post-1", "/blog/post-2"]}

Ответ

{"data": {"operation": "publish", "results": [{"route": "/blog/post-1", "status": "success"}, {"route": "/blog/post-2", "status": "error", "message": "Page permissions deny 'publish' on this page."}], "total": 2, "successful": 1, "failed": 1}}

Коды ответов

Код Описание
200 Пакет обработан; результаты по отдельным страницам в results[].
401 Не авторизован.
403 Нет разрешения api.pages.write.
422 Неверная операция, пустой массив маршрутов, превышен лимит пакета или маршрут не существует.

Реорганизация страниц

POST /pages/reorganize

Атомарно перемещает и/или изменяет порядок нескольких страниц за один запрос. Все операции проверяются до внесения изменений в файловую систему, а затем выполняются по двухфазной стратегии с временным переименованием и откатом по возможности при сбое. Нельзя переместить страницу в её собственное поддерево или в родителя, который сам перемещается в этом же запросе. Ограничено plugins.api.batch.max_items (по умолчанию 50). Вызывает onApiBeforePagesReorganize, onApiPagesReorganized и onApiPageMoved для каждой фактически перемещённой страницы. Требуется api.pages.write; если правила страницы запрещают update или целевой родитель запрещает create, весь запрос завершается с 403.

Параметры

Имя Тип Обязательный Описание
operations array Да Непустой массив объектов операций. У каждого должен быть route; необязательные поля: parent (маршрут нового родителя, / для верхнего уровня; не указывайте, чтобы остаться под текущим родителем) и position (целое число от 1, задаёт числовой префикс папки).

Запрос

{"operations": [{"route": "/blog/post-1", "parent": "/archive", "position": 1}, {"route": "/blog/post-2", "position": 3}]}

Ответ

{"data": [{"route": "/archive/post-1", "slug": "post-1", "title": "Post 1", "order": 1, "parent": "/archive"}, {"route": "/blog/post-2", "slug": "post-2", "title": "Post 2", "order": 3, "parent": "/blog"}]}

Коды ответов

Код Описание
200 Все операции выполнены; ответ перечисляет всех потомков каждого затронутого родителя.
401 Не авторизован.
403 Нет разрешения api.pages.write или страница либо целевой родитель запрещает действие.
422 Не пройдена валидация (пустой список операций, слишком много операций, повторяющиеся маршруты, отсутствует страница или родитель, конфликт позиций, перемещение в собственное поддерево страницы или целевой родитель, который сам перемещается), либо ошибка файловой системы при выполнении (предпринята попытка отката).

Список таксономии

GET /taxonomy

Возвращает каждый тип таксономии (например, category, tag) с полным списком значений, используемых на всех страницах. Включается каждый тип, объявленный в site.taxonomies, с пустым списком, если его пока не использует ни одна страница. Внутренние пути к файлам удаляются, поэтому возвращаются только значения терминов.

Ответ

{"data": {"category": ["blog", "docs"], "tag": ["php", "grav", "api"], "author": []}}

Коды ответов

Код Описание
200 Карта таксономии возвращена.
401 Не авторизован.
403 Нет разрешения api.pages.read.

Список языков сайта

GET /languages

Возвращает настроенные языки сайта с отображаемыми названиями, флагами RTL и кодами по умолчанию и активного языка. Если многоязычность выключена, возвращает enabled: false, пустой список languages и null для default/active. Используется переключателями языков и интерфейсами переводов.

Ответ

{"data": {"enabled": true, "languages": [{"code": "en", "name": "English", "native_name": "English", "rtl": false, "is_default": true}, {"code": "fr", "name": "French", "native_name": "Français", "rtl": false, "is_default": false}], "default": "en", "active": "en"}}

Коды ответов

Код Описание
200 Языки возвращены.
401 Не авторизован.
403 Нет разрешения api.pages.read.

Получение токена предпросмотра

POST /pages/{route}/preview-token

Выдаёт кратковременный подписанный токен, который позволяет фронтенду отрендерить эту страницу, даже если она не опубликована, — для предпросмотра черновиков. Загрузите фронтенд-URL страницы с ?admin_preview=1&preview_token=<token>; токен открывает доступ только к этой странице. Для модульной секции route — это родительская страница, которую нужно загрузить, а anchor предлагает идентификатор элемента для прокрутки (в остальных случаях он равен null). Токен действует plugins.api.preview_token_ttl секунд (по умолчанию 300, минимум 30). Требуется api.pages.read и доступ на чтение страницы, а при предпросмотре модуля — и её родительской страницы.

Параметры

Имя Тип Обязательный Описание
route string Да Маршрут страницы (параметр пути).
lang string Нет Получить страницу на определённом языке (параметр запроса).

Ответ

{"data": {"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "expires_in": 300, "route": "/blog/my-post", "anchor": null}}

Коды ответов

Код Описание
200 Токен предпросмотра возвращён.
401 Не авторизован.
403 Предпросмотр черновиков отключён (plugins.api.allow_draft_preview: false), нет разрешения api.pages.read или доступ запрещён правилами страницы.
404 Страница не найдена.
422 Неверный код языка.