Отрасль: Ритейл и e-commerce. Актуально на 2026-10-24.
Облачный API ресторанной системы iiko для внешних интеграций: организации и терминальные группы, внешние меню и стоп-листы, заказы на доставку и заказы в зале, банкеты и резервы, курьеры, программа лояльности iikoCard, складские и финансовые документы, номенклатура, сотрудники и OLAP-отчёты. Почти все методы — POST с JSON-телом; в спецификации около 350 путей, здесь — основные для доставки и меню.
Первый шаг любой интеграции: токен, организации и терминальные группы, куда будут уходить заказы.
TOKEN=$(curl -s -X POST https://api-ru.iiko.services/api/v2/access_token \
-H 'Content-Type: application/json' \
-d '{"apiKey": "<apiKey>", "appId": "<appId>", "clientSecret": "<clientSecret>"}' | jq -r .token)
curl -s -X POST https://api-ru.iiko.services/api/1/organizations \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"organizationIds": [], "returnAdditionalInfo": true}'
curl -s -X POST https://api-ru.iiko.services/api/1/terminal_groups \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"organizationIds": ["<organizationId>"]}'
Меню сайта или приложения доставки всегда совпадает с кассой: цены, позиции и то, что сейчас закончилось.
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}'
Заказ с сайта сразу появляется на кухне и у курьеров — без ручного переноса оператором.
import time, uuid, requests
API = "https://api-ru.iiko.services/api/1"
H = {"Authorization": f"Bearer {token}"}
org, tg = "<organizationId>", "<terminalGroupId>"
order_id = str(uuid.uuid4())
resp = requests.post(f"{API}/deliveries/create", headers=H, json={
"organizationId": org,
"terminalGroupId": tg,
"createOrderSettings": {"checkStopList": True},
"order": {
"id": order_id,
"externalNumber": "SITE-1042",
"phone": "+79990001122",
"orderServiceType": "DeliveryByCourier",
"deliveryPoint": {"address": {"street": {"name": "Ленина", "city": "Екатеринбург"}, "house": "10"},
"comment": "Домофон 45"},
"items": [{"type": "Product", "productId": "<productId>", "amount": 2}],
"payments": [{"paymentTypeKind": "Card", "paymentTypeId": "<paymentTypeId>", "sum": 1580}],
"comment": "Без лука",
},
}).json()
while True:
st = requests.post(f"{API}/commands/status", headers=H,
json={"organizationId": org, "correlationId": resp["correlationId"]}).json()
if st["state"] != "InProgress":
break
time.sleep(2)
print(st["state"])
Гость отменил заказ на сайте — отмена доходит до кассы; статусы заказов приходят к тебе сами, без опроса.
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": "<секрет>"}'
https://api-ru.iiko.servicesТип: Bearer-токен
https://public-api.iikoweb.ru/portal и создайте приложение — получите appId и одноразово показываемый clientSecret.apiKey.POST /api/v2/access_token и передавайте его во всех запросах: Authorization: Bearer {token}.Токен (JWT) действует 1 час; refresh-токена нет — запрашивайте новый до истечения срока. Старый метод POST /api/1/access_token с apiLogin устарел.
В ответе: correlationId и token.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
apiKey |
body | string | да | API-ключ из iikoWeb; определяет доступные организации |
appId |
body | string | да | ID приложения с портала разработчика (uuid) |
clientSecret |
body | string | да | Секрет приложения с портала разработчика |
Timeout |
header | integer | нет | Таймаут в секундах, по умолчанию 15 |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
organizationIds |
body | array | нет | ID организаций; по умолчанию — все доступные |
returnAdditionalInfo |
body | boolean | нет | Вернуть доп. информацию (версия RMS, страна, адрес) |
includeDisabled |
body | boolean | нет | Включить отключённые организации |
returnExternalData |
body | array | нет | Ключи внешних данных |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
organizationIds |
body | array | да | ID организаций |
includeDisabled |
body | boolean | нет | Включить отключённые группы |
returnExternalData |
body | array | нет | Ключи внешних данных |
Без параметров. В ответе: correlationId, externalMenus, priceCategories.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
externalMenuId |
body | string | да | ID внешнего меню из /api/2/menu |
organizationId |
body | string | да | ID организации (uuid) |
priceCategoryId |
body | string | нет | Ценовая категория из /api/2/menu |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
organizationIds |
body | array | да | ID организаций |
terminalGroupsIds |
body | array | нет | ID терминальных групп |
returnSize |
body | boolean | нет | Возвращать размеры блюд |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
organizationIds |
body | array | да | ID организаций |
Команда: статус выполнения проверяется через /api/1/commands/status.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
organizationId |
body | string | да | ID организации (uuid) |
terminalGroupId |
body | string | нет | ID терминальной группы, куда отправить заказ |
createOrderSettings.transportToFrontTimeout |
body | integer | нет | Сколько секунд даётся на доставку заказа в iikoFront |
createOrderSettings.checkStopList |
body | boolean | нет | Проверять позиции по стоп-листу |
order |
body | object | да | Заказ |
order.id |
body | string | нет | ID заказа (уникальный uuid); если не передан — генерируется |
order.externalNumber |
body | string | нет | Внешний номер заказа |
order.completeBefore |
body | string | нет | Время выполнения yyyy-MM-dd HH:mm:ss.fff, локальное для терминала |
order.phone |
body | string | да | Телефон: начинается с +, не меньше 8 цифр |
order.orderTypeId |
body | string | нет | Тип заказа; указывается он или orderServiceType |
order.orderServiceType |
body | string | нет | Тип обслуживания; указывается он или orderTypeId |
order.deliveryPoint.address |
body | object | нет | Адрес доставки (не нужен для самовывоза) |
order.deliveryPoint.coordinates |
body | object | нет | Координаты адреса |
order.deliveryPoint.comment |
body | string | нет | Доп. информация |
order.comment |
body | string | нет | Комментарий к заказу |
order.customer.type |
body | string | да | Тип клиента (если передаётся customer) |
order.guests.count |
body | integer | да | Число персон — определяет число приборов (если передаётся guests) |
order.items |
body | array | да | Позиции заказа |
order.items[].type |
body | string | да | Тип позиции |
order.items[].amount |
body | number | да | Количество |
order.items[].productSizeId |
body | string | нет | Размер; обязателен, если у позиции есть шкала размеров |
order.items[].comment |
body | string | нет | Комментарий |
order.combos |
body | array | нет | Комбо: id, name, amount, price, sourceId |
order.payments |
body | array | нет | Оплаты заказа |
order.marketingSourceId |
body | string | нет | Рекламный источник |
order.priceCategoryId |
body | string | нет | Ценовая категория |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
organizationId |
body | string | да | ID организации |
orderIds |
body | array | нет | ID заказов; обязательно, если нет posOrderIds |
posOrderIds |
body | array | нет | ID заказов в POS; обязательно, если нет orderIds |
sourceKeys |
body | array | нет | Ключи источников |
returnExternalDataKeys |
body | array | нет | Ключи внешних данных |
Команда; статус — через /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 нового заказа, если заказ перенесён |
Команда; статус — через /api/1/commands/status.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
organizationId |
body | string | да | ID организации |
terminalGroupId |
body | string | да | ID терминальной группы |
order.items |
body | array | да | Позиции заказа |
order.tableIds |
body | array | нет | ID столов |
order.phone |
body | string | нет | Телефон гостя |
order.guestCount |
body | integer | нет | Число гостей |
order.payments |
body | array | нет | Оплаты |
createOrderSettings.servicePrint |
body | boolean | нет | Автоматическая сервисная печать |
Код ответа 410 — correlationId больше не поддерживается.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
organizationId |
body | string | да | ID организации |
correlationId |
body | string | да | ID операции из ответа команды |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
organizationId |
body | string | да | ID организации |
webHooksUri |
body | string | да | URL обработчика вебхуков |
authToken |
body | string | нет | Токен авторизации, передаваемый обработчику |
webHooksFilter |
body | object | нет | Фильтр событий |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
type |
body | string | да | Критерий поиска гостя |
organizationId |
body | string | нет | ID организации |
Authorization; в каждом можно передать заголовок Timeout (секунды).correlationId, итог — через /api/1/commands/status.yyyy-MM-dd HH:mm:ss.fff без часового пояса, локальное время терминала.Data: dictionaries, Data: menu, Orders: creating и др.) — права API-ключа настраиваются по этим группам./api/1/access_token, /api/1/nomenclature, /api/2/menu/by_id — используйте /api/v2/access_token и /api/menu/v3/by_id.| Код | Описание |
|---|---|
400 |
Некорректный запрос |
401 |
Нет авторизации или токен истёк |
408 |
Таймаут запроса |
410 |
correlationId больше не поддерживается (commands/status) |
500 |
Внутренняя ошибка |
Если этого недостаточно — официальная документация: https://api-ru.iiko.services/docs JSON: https://mcp-everything.ru/api/integrations/iiko. MCP: https://mcp-everything.ru/mcp