# iikoCloud API: Выгрузить меню на сайт с учётом стоп-листа

Сценарий из mcp-everything. Актуально на 2026-10-24.

Меню сайта или приложения доставки всегда совпадает с кассой: цены, позиции и то, что сейчас закончилось.

1. Получи список внешних меню и ценовых категорий: POST /api/2/menu (тело пустое). В ответе externalMenus и priceCategories.
2. Загрузи нужное меню: POST /api/menu/v3/by_id с externalMenuId, organizationId и при необходимости priceCategoryId. Старые /api/1/nomenclature и /api/2/menu/by_id устарели — не используй их.
3. Получи стоп-листы: POST /api/1/stop_lists с organizationIds (и terminalGroupsIds, если нужен конкретный ресторан). Скрывай или помечай позиции из стопа.
4. Меню обновляй по расписанию, а стоп-лист — часто: он меняется в течение дня.

```bash
H=(-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json')

curl -s -X POST https://api-ru.iiko.services/api/2/menu "${H[@]}" -d '{}'

curl -s -X POST https://api-ru.iiko.services/api/menu/v3/by_id "${H[@]}" \
  -d '{"externalMenuId": "<externalMenuId>", "organizationId": "<organizationId>", "priceCategoryId": null}'

curl -s -X POST https://api-ru.iiko.services/api/1/stop_lists "${H[@]}" \
  -d '{"organizationIds": ["<organizationId>"], "returnSize": true}'
```

## Базовые URL

- Боевой: `https://api-ru.iiko.services`

## Авторизация

Тип: Bearer-токен

- Зарегистрируйтесь на портале разработчика `https://public-api.iikoweb.ru/portal` и создайте приложение — получите `appId` и одноразово показываемый `clientSecret`.
- В iikoWeb → «Интеграции» → «API-ключи» сгенерируйте `apiKey`.
- Получите токен методом `POST /api/v2/access_token` и передавайте его во всех запросах: `Authorization: Bearer {token}`.

Токен (JWT) действует 1 час; refresh-токена нет — запрашивайте новый до истечения срока. Старый метод `POST /api/1/access_token` с `apiLogin` устарел.

## Методы сценария

### POST /api/2/menu — Внешние меню и ценовые категории

Без параметров. В ответе: `correlationId`, `externalMenus`, `priceCategories`.

### POST /api/menu/v3/by_id — Внешнее меню по ID

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `externalMenuId` | body | string | да | ID внешнего меню из /api/2/menu |
| `organizationId` | body | string | да | ID организации (uuid) |
| `priceCategoryId` | body | string | нет | Ценовая категория из /api/2/menu |

### POST /api/1/stop_lists — Стоп-листы

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `organizationIds` | body | array | да | ID организаций |
| `terminalGroupsIds` | body | array | нет | ID терминальных групп |
| `returnSize` | body | boolean | нет | Возвращать размеры блюд |

## Нюансы

- Все запросы, кроме получения токена, требуют заголовок `Authorization`; в каждом можно передать заголовок `Timeout` (секунды).
- Методы-команды (создание, отмена, изменение заказов) выполняются асинхронно: в ответе `correlationId`, итог — через `/api/1/commands/status`.
- Форматы: uuid — строка UUID; дата-время — `yyyy-MM-dd HH:mm:ss.fff` без часового пояса, локальное время терминала.
- Методы сгруппированы по группам ограничений (`Data: dictionaries`, `Data: menu`, `Orders: creating` и др.) — права API-ключа настраиваются по этим группам.
- Часть полей доступна только с определённой версии iikoRMS (в документации — пометки «Allowed from version»).
- Устаревшие методы: `/api/1/access_token`, `/api/1/nomenclature`, `/api/2/menu/by_id` — используйте `/api/v2/access_token` и `/api/menu/v3/by_id`.

## Другие сценарии

- [Подключиться и найти свои рестораны](https://mcp-everything.ru/integrations/iiko/scenarios/podklyuchitsya-i-nayti-svoi-restorany.md)
- [Передать заказ доставки с сайта на кассу](https://mcp-everything.ru/integrations/iiko/scenarios/peredat-zakaz-dostavki-s-sayta-na-kassu.md)
- [Отменить заказ и получать статусы вебхуками](https://mcp-everything.ru/integrations/iiko/scenarios/otmenit-zakaz-i-poluchat-statusy.md)

---

Если этого недостаточно — официальная документация: https://api-ru.iiko.services/docs
Вся интеграция одним документом: https://mcp-everything.ru/integrations/iiko.md
