---
title: "Update Menu Layout"
method: PUT
path: "/menu-layout"
tags: ["menu-layout"]
---

# Update Menu Layout

`PUT /menu-layout`

## Request

- The document declares no server URL.
- Auth: API key in header `X-API-Key`
- TypeScript: <https://skmtc.dev/bedolagam/apis/remnawave-bot-admin-api/docs/menu-layout/put.ts> (a function with typed inputs; its response is checked against the schema)

Обновить конфигурацию меню полностью.

## Request body

- MenuLayoutUpdateRequest: Запрос на обновление конфигурации меню.
  - `rows` MenuRowConfig[], nullable: Новая конфигурация строк
    - `id` string, required: Уникальный ID строки
    - `buttons` string[], required: Список ID кнопок в строке
    - `conditions` ButtonConditions: Условия показа кнопки.
      - `has_active_subscription` boolean, nullable: Требуется активная подписка
      - `subscription_is_active` boolean, nullable: Подписка должна быть активна (не приостановлена)
      - `has_traffic_limit` boolean, nullable: Подписка с лимитом трафика
      - `is_admin` boolean, nullable: Пользователь - админ
      - `is_moderator` boolean, nullable: Пользователь - модератор
      - `referral_enabled` boolean, nullable: Реферальная программа включена
      - `contests_visible` boolean, nullable: Конкурсы видимы
      - `support_enabled` boolean, nullable: Поддержка включена
      - `language_selection_enabled` boolean, nullable: Выбор языка включен
      - `happ_enabled` boolean, nullable: Кнопка Happ включена
      - `simple_subscription_enabled` boolean, nullable: Простая подписка включена
      - `show_trial` boolean, nullable: Показать пробный период
      - `show_buy` boolean, nullable: Показать кнопку покупки
      - `has_saved_cart` boolean, nullable: Есть сохраненная корзина
      - `min_balance_kopeks` integer, nullable: Минимальный баланс в копейках
      - `max_balance_kopeks` integer, nullable: Максимальный баланс в копейках
      - `min_registration_days` integer, nullable: Минимум дней с регистрации
      - `max_registration_days` integer, nullable: Максимум дней с регистрации
      - `min_referrals` integer, nullable: Минимальное количество рефералов
      - `has_referrals` boolean, nullable: Есть рефералы
      - `promo_group_ids` string[], nullable: Список ID промо-групп (пользователь должен быть в одной из них)
      - `exclude_promo_group_ids` string[], nullable: Исключить пользователей из этих промо-групп
      - `has_subscription_days_left` integer, nullable: Минимум дней до окончания подписки
      - `max_subscription_days_left` integer, nullable: Максимум дней до окончания подписки
      - `is_trial_user` boolean, nullable: Пользователь на пробном периоде
      - `has_autopay` boolean, nullable: Автоплатёж включён
    - `max_per_row` integer: Максимум кнопок в строке
  - `buttons` object, nullable: Новая конфигурация кнопок

## Response `200`

Successful Response

- MenuLayoutResponse: Ответ с конфигурацией меню.
  - `version` integer, required
  - `rows` MenuRowConfig[], required
    - `id` string, required: Уникальный ID строки
    - `buttons` string[], required: Список ID кнопок в строке
    - `conditions` ButtonConditions: Условия показа кнопки.
      - `has_active_subscription` boolean, nullable: Требуется активная подписка
      - `subscription_is_active` boolean, nullable: Подписка должна быть активна (не приостановлена)
      - `has_traffic_limit` boolean, nullable: Подписка с лимитом трафика
      - `is_admin` boolean, nullable: Пользователь - админ
      - `is_moderator` boolean, nullable: Пользователь - модератор
      - `referral_enabled` boolean, nullable: Реферальная программа включена
      - `contests_visible` boolean, nullable: Конкурсы видимы
      - `support_enabled` boolean, nullable: Поддержка включена
      - `language_selection_enabled` boolean, nullable: Выбор языка включен
      - `happ_enabled` boolean, nullable: Кнопка Happ включена
      - `simple_subscription_enabled` boolean, nullable: Простая подписка включена
      - `show_trial` boolean, nullable: Показать пробный период
      - `show_buy` boolean, nullable: Показать кнопку покупки
      - `has_saved_cart` boolean, nullable: Есть сохраненная корзина
      - `min_balance_kopeks` integer, nullable: Минимальный баланс в копейках
      - `max_balance_kopeks` integer, nullable: Максимальный баланс в копейках
      - `min_registration_days` integer, nullable: Минимум дней с регистрации
      - `max_registration_days` integer, nullable: Максимум дней с регистрации
      - `min_referrals` integer, nullable: Минимальное количество рефералов
      - `has_referrals` boolean, nullable: Есть рефералы
      - `promo_group_ids` string[], nullable: Список ID промо-групп (пользователь должен быть в одной из них)
      - `exclude_promo_group_ids` string[], nullable: Исключить пользователей из этих промо-групп
      - `has_subscription_days_left` integer, nullable: Минимум дней до окончания подписки
      - `max_subscription_days_left` integer, nullable: Максимум дней до окончания подписки
      - `is_trial_user` boolean, nullable: Пользователь на пробном периоде
      - `has_autopay` boolean, nullable: Автоплатёж включён
    - `max_per_row` integer: Максимум кнопок в строке
  - `buttons` object, required
  - `is_enabled` boolean, required: Включен ли конструктор меню
  - `updated_at` string, date-time, nullable

## Other responses

- `422`: Validation Error

## Changes

- **2026-11-03** `2360876ff9c5`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/bedolagam/apis/remnawave-bot-admin-api/changes/menu-layout/put.md)

---

[API](https://skmtc.dev/bedolagam/apis/remnawave-bot-admin-api.md) - [All operations](https://skmtc.dev/bedolagam/apis/remnawave-bot-admin-api/llms.txt) - [OpenAPI document](https://skmtc.dev/bedolagam/apis/remnawave-bot-admin-api/revisions/2360876ff9c5?raw)
