# iikoCloud API: Отменить заказ и получать статусы вебхуками

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

Гость отменил заказ на сайте — отмена доходит до кассы; статусы заказов приходят к тебе сами, без опроса.

1. Отмени заказ: POST /api/1/deliveries/cancel с organizationId, orderId и, при необходимости, cancelCauseId и cancelComment. Это тоже команда — итог проверяй через POST /api/1/commands/status. Ответ 410 значит, что correlationId устарел.
2. Чтобы не опрашивать заказы, настрой вебхуки: POST /api/1/webhooks/update_settings с organizationId, webHooksUri (твой HTTPS-обработчик), authToken (iiko передаст его обработчику — проверяй его) и webHooksFilter.
3. Обработчик должен быстро отвечать 200 и обрабатывать событие асинхронно; по ID заказа из события сверяйся через POST /api/1/deliveries/by_id.

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

curl -s -X POST https://api-ru.iiko.services/api/1/deliveries/cancel "${H[@]}" \
  -d '{"organizationId": "<organizationId>", "orderId": "<orderId>", "cancelComment": "Гость отменил на сайте"}'

curl -s -X POST https://api-ru.iiko.services/api/1/webhooks/update_settings "${H[@]}" \
  -d '{"organizationId": "<organizationId>", "webHooksUri": "https://example.ru/iiko/webhook", "authToken": "<секрет>"}'
```

## Базовые 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/1/deliveries/by_id — Заказы доставки по ID

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `organizationId` | body | string | да | ID организации |
| `orderIds` | body | array | нет | ID заказов; обязательно, если нет posOrderIds |
| `posOrderIds` | body | array | нет | ID заказов в POS; обязательно, если нет orderIds |
| `sourceKeys` | body | array | нет | Ключи источников |
| `returnExternalDataKeys` | body | array | нет | Ключи внешних данных |

### POST /api/1/deliveries/cancel — Отмена заказа доставки

Команда; статус — через `/api/1/commands/status`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `organizationId` | body | string | да | ID организации |
| `orderId` | body | string | да | ID заказа |
| `cancelCauseId` | body | string | нет | Причина отмены из /api/1/cancel_causes |
| `cancelComment` | body | string | нет | Комментарий к отмене |
| `removalTypeId` | body | string | нет | Тип удаления для напечатанных позиций |
| `movedOrderId` | body | string | нет | ID нового заказа, если заказ перенесён |

### POST /api/1/commands/status — Статус команды

Код ответа `410` — `correlationId` больше не поддерживается.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `organizationId` | body | string | да | ID организации |
| `correlationId` | body | string | да | ID операции из ответа команды |

### POST /api/1/webhooks/update_settings — Настройка вебхуков

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `organizationId` | body | string | да | ID организации |
| `webHooksUri` | body | string | да | URL обработчика вебхуков |
| `authToken` | body | string | нет | Токен авторизации, передаваемый обработчику |
| `webHooksFilter` | body | object | нет | Фильтр событий |

## Нюансы

- Все запросы, кроме получения токена, требуют заголовок `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/vygruzit-menyu-na-sayt-s-uchetom-stop.md)
- [Передать заказ доставки с сайта на кассу](https://mcp-everything.ru/integrations/iiko/scenarios/peredat-zakaz-dostavki-s-sayta-na-kassu.md)

---

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