# Системные страницы

Назначает страницы сайта на системные роли — корзину, оформление заказа, личный кабинет и другие — читает назначения, отдаёт адрес страницы по роли и снимает роли по одной или все сразу. Сами страницы при снятии роли остаются на сайте.

Битрикс24 API: `landing.syspage.get`, `landing.syspage.set`, `landing.syspage.getSpecialPage`, `landing.syspage.deleteForSite`
Скоуп: `landing`

## Операции

- [Список системных страниц сайта](./system-pages-list.md) — `GET /v1/sites/:id/system-pages`
- [Назначить системную страницу](./system-pages-set.md) — `PUT /v1/sites/:id/system-pages/:type`
- [Получить адрес системной страницы](./system-pages-url.md) — `GET /v1/sites/:id/system-pages/:type/url`
- [Снять системную страницу](./system-pages-delete-delete.md) — `DELETE /v1/sites/:id/system-pages/:type`
- [Снять все системные страницы сайта](./system-pages-delete.md) — `DELETE /v1/sites/:id/system-pages`

## Роли

Роль передаётся в пути запроса как `type` и приходит в ответе в поле `type`. Значения не из таблицы ниже отклоняются кодом `400 INVALID_PARAMS` до обращения к порталу.

| Роль | Страница |
|------|----------|
| `mainpage` | Главная страница |
| `catalog` | Каталог товаров |
| `personal` | Личный кабинет покупателя |
| `cart` | Корзина |
| `order` | Оформление заказа |
| `payment` | Оплата заказа |
| `compare` | Сравнение товаров |
| `feedback` | Обратная связь |

## Ключевые поля

Поля одной привязки. Они приходят в каждом элементе ответа списка, назначения и снятия одной роли.

| Поле | Описание |
|------|----------|
| `type` | Роль из таблицы выше |
| `pageId` | ID страницы, назначенной на роль. Список страниц сайта: [`GET /v1/pages?filter[siteId]=:id`](/docs/entities/pages/list) |
| `title` | Название страницы |
| `deleted` | Страница лежит в корзине |
| `active` | Страница опубликована |

## Что нужно знать перед работой

1. **На роли — одна страница, у страницы — сколько угодно ролей.** Назначение на занятую роль заменяет страницу на ней. Одна и та же страница может занимать несколько ролей сразу.
2. **Назначить можно только страницу этого же сайта.** Для страницы другого сайта приходит `400 INVALID_PARAMS`, для несуществующей — `404 ENTITY_NOT_FOUND`. Публиковать страницу перед назначением не нужно.
3. **Корзина не снимает роль.** Страница, перенесённая в корзину, остаётся на своей роли с `deleted: true`, и адрес по роли продолжает приходить. Снять роль можно только явно.
4. **Запись проверяется перечитыванием.** Методы записи после изменения заново читают привязки сайта и возвращают их. Если изменение не сохранилось, приходит `422 BITRIX_ERROR`, а не `200`.
5. **Повторы ведут себя по-разному.** Повторное назначение той же страницы и повторное снятие всех ролей отвечают `200`. Повторное снятие одной роли отвечает `404 ENTITY_NOT_FOUND`.
6. **Сайт в отдельной области: база знаний, группа или область `MAINPAGE`.** Для такого сайта передавайте query-параметр `scope` со значением `KNOWLEDGE`, `GROUP` или `MAINPAGE` — без него сайт не находится и приходит `404`. Для обычного сайта `scope` не передаётся.

## Типичный сценарий

1. Найти сайт: [`GET /v1/sites`](/docs/entities/sites/list).
2. Найти страницы сайта: [`GET /v1/pages?filter[siteId]=:id`](/docs/entities/pages/list).
3. Посмотреть, какие роли уже заняты: [`GET /v1/sites/:id/system-pages`](./system-pages-list.md).
4. Назначить страницу на роль: [`PUT /v1/sites/:id/system-pages/cart`](./system-pages-set.md) с `pageId`.
5. Получить адрес страницы по роли для ссылки: [`GET /v1/sites/:id/system-pages/cart/url`](./system-pages-url.md).

## Лимиты

| Лимит | Значение |
|-------|----------|
| Привязок у сайта | Не больше восьми — по одной на каждую роль. Пагинации у списка нет |
| Ролей за один вызов | Одна при назначении и снятии. Все сразу снимает [`DELETE /v1/sites/:id/system-pages`](./system-pages-delete.md) |
| Частота запросов | Общие лимиты API — [Лимиты и оптимизация](/docs/optimization) |

## Смотрите также

- [Сайты](/docs/entities/sites)
- [Страницы](/docs/entities/pages)
- [Системные роли страницы](/docs/entities/pages/system-pages)
- [Публичный адрес страницы](/docs/entities/pages/public-url)
- [Лимиты и оптимизация](/docs/optimization)
