Управление перенаправлениями страниц с помощью API Notiondesk

Создавайте, перечисляйте, обновляйте и удаляйте перенаправления страниц справочного центра Notiondesk через REST API. Импортируйте старые URL-адреса сразу после миграции.

3 мин чтения

Перенаправление страницы отправляет читателей, открывших старый путь в вашем справочном центре, на статью или подборку. API Notiondesk позволяет просматривать, создавать, обновлять и удалять перенаправления страниц, так что вы можете импортировать сотни старых URL-адресов после миграции, вместо того чтобы добавлять их по одному на панели управления. Закладки, общие ссылки и результаты поиска остаются работоспособными.

Чтобы управлять перенаправлениями на панели управления, см. раздел «Как управлять перенаправлениями страниц» в справочном центре .

Метод Путь Объем Делает
GET/sites/{site_id}/page-redirectsreadСписок перенаправлений, самые новые в начале.
POST/sites/{site_id}/page-redirectswriteСоздает перенаправление
PATCH/sites/{site_id}/page-redirects/{redirect_id}writeОбновляет перенаправление
DELETE/sites/{site_id}/page-redirects/{redirect_id}adminУдаляет перенаправление

Для создания и обновления перенаправлений требуется тарифный план, включающий перенаправления страниц.

Список перенаправлений страниц

Список охватывает все языки, начиная с самых новых. Он включает в себя как созданные вами перенаправления, так и те, которые Notiondesk создает автоматически после изменения слага.

curl "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/page-redirects?page_size=100" \
  -H "Authorization: Bearer $NOTIONDESK_API_KEY" \
  -H "nd-version: 2026-10-16"
{
  "object": "list",
  "data": [
    {
      "id": "3f1c2a9e-8b7d-4c6e-9a5f-1e2d3c4b5a69",
      "locale": "en",
      "type": "article",
      "origin": "manual",
      "source_path": "/legacy/getting-started",
      "target_id": "1761580412",
      "target_title": "Getting started",
      "target_slug": "getting-started",
      "target_status": "published"
    }
  ],
  "has_more": false,
  "next_cursor": null
}
Поле Значение
idИдентификатор перенаправления, используемый как redirect_id
localeЯзык целевого объекта
typearticle или category (коллекция)
originmanual для перенаправления, созданного кем-то, system для перенаправления Notiondesk, созданного при изменении слага.
source_pathПуть, который перенаправляет
target_idid целевого предмета или коллекции
target_title, target_slug Заголовок и сегмент пути целевого объекта в locale
target_statusСтатус цели, например, published или draft
Примечание: Перенаправление отправляет читателей только в том случае, если целевой ресурс опубликован. Перенаправление на черновик ожидает публикации целевого ресурса.

Список содержит максимум 10 000 самых новых перенаправлений. Если ваша интеграция удаляет перенаправления во время их отображения, начните заново с первой страницы: удаление сдвигает следующие элементы, поэтому на следующей странице можно пропустить один из них. См. раздел «Пагинация» и запросы API версии Notiondesk .

Создать перенаправление страницы

Все поля обязательны для заполнения:

curl -X POST "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/page-redirects" \
  -H "Authorization: Bearer $NOTIONDESK_API_KEY" \
  -H "nd-version: 2026-10-16" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f0d6b1e-create-getting-started" \
  -d '{"type": "article", "source_path": "/legacy/getting-started", "target_id": "1761580412", "locale": "en"}'
Поле Тип Примечания
typeнить article или category
source_pathнить Путь для перенаправления, до 512 символов, например, /legacy/getting-started. Никакое другое перенаправление справочного центра не может использовать его.
target_idнить id целевой статьи или коллекции из списка статей или коллекций . До 255 символов.
localeнить Язык целевого текста. Целевой текст должен иметь перевод на этот язык.

Маршрут отвечает 201 Created новым перенаправлением, используя те же поля, что и список.

  • В сообщении source_path другой редирект уже использует ответ 409 conflict_error, и в сообщении указан путь.
  • Сообщение target_id без перевода в locale отвечает кодом 404 not_found, и в сообщении указывается идентификатор.

Отправляйте Idempotency-Key при каждом создании. Повторная попытка с тем же ключом и телом запроса возвращает тот же 201 без создания второго перенаправления. См. раздел «Обработка ошибок API Notiondesk, ограничений скорости и повторных попыток» .

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

Отправлять только поля, которые нужно изменить. Для каждого поля, которое вы пропустите, значение останется прежним.

Поля соответствуют правилам создания. Маршрут отвечает 200 OK с обновленным перенаправлением.

Перенаправление должно по-прежнему указывать на целевой объект, который существует в его locale после внесения изменений. Чтобы перенаправить статью на коллекцию, отправьте type и target_id вместе.

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

Удаление необратимо, поэтому маршруту необходимы две меры предосторожности:

curl -X PATCH "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/page-redirects/3f1c2a9e-8b7d-4c6e-9a5f-1e2d3c4b5a69" \
  -H "Authorization: Bearer $NOTIONDESK_API_KEY" \
  -H "nd-version: 2026-10-16" \
  -H "Content-Type: application/json" \
  -d '{"source_path": "/legacy/start"}'
curl -i -X DELETE "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/page-redirects/3f1c2a9e-8b7d-4c6e-9a5f-1e2d3c4b5a69" \
  -H "Authorization: Bearer $NOTIONDESK_API_KEY" \
  -H "nd-version: 2026-10-16" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true}'
  • область действия admin;
  • Тело запроса {"confirm": true} содержит логическое значение JSON true.

Маршрут отвечает 204 No Content. Пользователи, открывающие старый путь, перестают получать перенаправление. Повторное удаление того же перенаправления приводит к ошибке 404 not_found, если только вы не повторите попытку с тем же Idempotency-Key.

Данная область действия распространяется только на ключ, созданный владельцем рабочей области или администратором. Редактор может удалить перенаправление на панели управления, но не с помощью ключа API.admin

Импорт перенаправлений после миграции

Переходите с другого инструмента для создания справочных центров? Сопоставьте каждый старый путь с новой статьей, а затем создайте одно перенаправление для каждой строки. Этот скрипт считывает CSV-файл со столбцами source_path,target_id,locale:

import { readFileSync } from "node:fs";
import { createHash } from "node:crypto";

const siteId = "c74781f6-1aea-4e17-ab23-bbb8b4d174b6";
const rows = readFileSync("redirects.csv", "utf8").trim().split(/\r?\n/).slice(1);

for (const row of rows) {
  const [source_path, target_id, locale] = row.split(",");
  const idempotencyKey = createHash("sha256").update(`${source_path}|${target_id}|${locale}`).digest("hex");

  const response = await fetch(`https://api.notiondesk.so/sites/${siteId}/page-redirects`, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.NOTIONDESK_API_KEY}`,
      "nd-version": "2026-10-16",
      "Content-Type": "application/json",
      "Idempotency-Key": idempotencyKey,
    },
    body: JSON.stringify({ type: "article", source_path, target_id, locale }),
  });

  if (response.status === 429) {
    const seconds = Number(response.headers.get("Retry-After")) || 5;
    console.log(`Rate limited, waiting ${seconds}s`);
    await new Promise((resolve) => setTimeout(resolve, seconds * 1000));
    rows.push(row);
    continue;
  }

  const result = await response.json();
  console.log(response.status, source_path, response.ok ? result.id : result.code);
}
  • Ключ определяется по строке, поэтому двукратное выполнение скрипта ничего не создаст дважды. Исправленная строка получит новый ключ.
  • Путь, для которого уже существует перенаправление, записывает в журнал conflict_error. Обновите его или оставьте как есть.
  • Количество запросов на запись ограничено 20 в минуту на каждый ключ, поэтому 500 перенаправлений займут около 25 минут. Скрипт ожидает, когда будет достигнуто ограничение по количеству запросов, а затем повторяет попытку обработки строки.
  • Используйте ключ только с областями действия read и write.

Ошибки

Статус Когдаcode
400 Отсутствует или пустое поле, не принимаются значения type или locale, значение слишком длинное, confirm не равно true, или в теле запроса содержится неизвестное поле.validation_error
403 В зависимости от маршрута, в ключе отсутствуют read, write или admin.insufficient_scope
403 Ваш тарифный план не включает перенаправление страниц, или создатель ключа не может изменить этот справочный центр.permission_denied
404 Центр поддержки или перенаправление отсутствуют в вашем рабочем пространстве, либо для целевого объекта отсутствует перевод в localenot_found
409 В другом перенаправлении справочного центра уже используется source_pathconflict_error

См. раздел «Обработка ошибок API Notiondesk, ограничений скорости и повторных попыток» для получения информации о коде ошибки и других кодах.

Часто задаваемые вопросы

Нужно ли создавать перенаправления при изменении URL-адреса (slug)?

Обычно нет. Notiondesk создает перенаправление самостоятельно, когда вы изменяете слаг, установленный вручную в опубликованной статье или коллекции, автоматические перенаправления для справочного центра включены, и ваш тарифный план включает перенаправления страниц. В таких случаях в списке отображается origin: "system". В любом другом случае создайте перенаправление самостоятельно. Подробнее о слагах см. в статье «Как создавать красивые URL-адреса для статей и коллекций» .

Может ли перенаправление указывать на внешний URL-адрес?

Нет. Перенаправление страницы ведет к статье или подборке материалов в том же справочном центре.

Почему мой ключ может создавать перенаправления, но не удалять их?

Для удаления требуется область действия admin, чего не требуется для создания и обновления. Добавьте admin к ключу и убедитесь, что его создатель является владельцем рабочей области или администратором.

Что дальше?

Связанные статьи

Эта страница была полезной?

Still need help? Ask us