API для партнёров

Каталог

Структура меню ресторана: категории, продукты (блюда) и их состав — чтение и синхронизация каталога через API.

Каталог — это структура меню ресторана: группы продуктов (категории), сами продукты (блюда), а также меню как набор секций с продуктами. Эти эндпоинты позволяют партнёру читать каталог и синхронизировать его с внешней системой (POS, CRM, агрегатор).

Все запросы — под Bearer-токеном (см. Аутентификация). restaurantId — числовой path-параметр. Общие соглашения по форматам и ошибкам — в разделах Соглашения и Ошибки.

Базовый путь: /api/core/admin/restaurants/{restaurantId}.

МетодПутьНазначение
GET/productgroupsСписок групп продуктов (категорий)
POST/productgroupsСоздать группу
PUT/productgroups/{groupId}Изменить группу
DELETE/productgroups/{groupId}Удалить группу
GET/productsСписок продуктов (с фильтрами и пагинацией)
POST/productsСоздать продукт
PUT/products/{productId}Изменить продукт
DELETE/products/{productId}Удалить продукт
GET/menuСписок меню ресторана
POST/menuСоздать меню (с секциями и продуктами)
PUT/menuОбновить порядок/видимость меню (массив)
GET/menu/{menuId}Получить меню по ID
PUT/menu/{menuId}Изменить меню
DELETE/menu/{menuId}Удалить меню

Группы продуктов (категории)

Группа продуктов (VendorProductGroup) объединяет продукты в категорию (например, «Закуски», «Напитки»). Группа задаёт порядок отображения, видимость и может нести ставки налога по умолчанию.

Поля VendorProductGroup

ПолеТипОписание
idstring?Идентификатор группы
namestring?Название категории
imageLocationstring?URL/путь к изображению категории
sequenceintegerПорядок отображения
visiblebooleanВидимость категории
productsCountintegerКоличество продуктов в группе
taxeRatenumber?Ставка налога по умолчанию (зал)
takeawayTaxeRatenumber?Ставка налога для самовывоза
deliveryTaxeRatenumber?Ставка налога для доставки

Список групп

GET /productgroups

Terminal window
curl -G https://api.hostmeapp.com/api/core/admin/restaurants/123/productgroups \
-H "Authorization: Bearer $TOKEN"

Создать группу

POST /productgroups

Тело — VendorProductGroup. Ответ — созданная группа.

Terminal window
curl -X POST https://api.hostmeapp.com/api/core/admin/restaurants/123/productgroups \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "name": "Закуски", "sequence": 1, "visible": true }'

Изменить группу

PUT /productgroups/{groupId}

ПараметрГдеТип
restaurantId *pathinteger
groupId *pathstring

Тело — VendorProductGroup. Ответ — обновлённая группа.

Удалить группу

DELETE /productgroups/{groupId}

ПараметрГдеТип
restaurantId *pathinteger
groupId *pathstring
Terminal window
curl -X DELETE https://api.hostmeapp.com/api/core/admin/restaurants/123/productgroups/GROUP_ID \
-H "Authorization: Bearer $TOKEN"

Продукты (блюда)

Продукт (VendorProduct) — это позиция меню: блюдо или напиток. Несёт цену по каналам (зал/самовывоз/доставка), привязку к группе, остаток, ссылки на модификаторы и налоги.

Поля VendorProduct

ПолеТипОписание
idstring?Идентификатор продукта
productPLUstring?Артикул/штрихкод (PLU/barcode)
namestring?Название
descriptionstring?Описание
visiblebooleanВидимость продукта
imageLocationstring?URL/путь к изображению
pricenumberЦена (зал)
takeawayPricenumber?Цена для самовывоза
deliveryPricenumber?Цена для доставки
productTypestring?Тип продукта на стороне вашего POS
groupIdstring?ID группы (категории)
stockAmountinteger?Остаток на складе
modifiersarray<string>Список ID модификаторов и групп модификаторов (см. Модификаторы и налоги)
taxIdsarray<string>Список ID применённых налогов
taxeRatenumber?Ставка налога (зал)
takeawayTaxeRatenumber?Ставка налога для самовывоза
deliveryTaxeRatenumber?Ставка налога для доставки

Список продуктов

GET /products

Возвращает страницу продуктов (ProductsPage). Элементы — VendorProductSummary: те же поля, что у VendorProduct, но вместо массива modifiers отдаётся флаг hasModifiers (boolean).

Параметры

ПараметрГдеТипОписание
restaurantId *pathintegerИдентификатор ресторана
productGroupquerystringФильтр по ID группы
searchquerystringПоиск по названию
visiblequerybooleanФильтр по видимости
skipqueryintegerСдвиг для пагинации
takequeryintegerРазмер страницы

Поля ответа ProductsPage

ПолеТипОписание
itemsarray<VendorProductSummary>Продукты на странице
totalintegerВсего продуктов по фильтру
skipintegerПрименённый сдвиг
takeintegerПрименённый размер страницы
Terminal window
curl -G https://api.hostmeapp.com/api/core/admin/restaurants/123/products \
-H "Authorization: Bearer $TOKEN" \
--data-urlencode "productGroup=GROUP_ID" \
--data-urlencode "visible=true" \
--data-urlencode "skip=0" \
--data-urlencode "take=50"

Создать продукт

POST /products

Тело — VendorProduct. Ответ — созданный продукт.

Terminal window
curl -X POST https://api.hostmeapp.com/api/core/admin/restaurants/123/products \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Цезарь с курицей",
"groupId": "GROUP_ID",
"price": 590,
"takeawayPrice": 560,
"visible": true,
"productPLU": "1001",
"taxIds": ["TAX_ID"]
}'

Изменить продукт

PUT /products/{productId}

ПараметрГдеТип
restaurantId *pathinteger
productId *pathstring

Тело — VendorProduct. Ответ — обновлённый продукт.

Terminal window
curl -X PUT https://api.hostmeapp.com/api/core/admin/restaurants/123/products/PRODUCT_ID \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "name": "Цезарь с курицей", "price": 620, "visible": true }'

Удалить продукт

DELETE /products/{productId}

ПараметрГдеТип
restaurantId *pathinteger
productId *pathstring

Меню и секции

Меню (VendorMenu) — это набор секций (VendorMenuSection), каждая из которых содержит продукты. Один ресторан может иметь несколько меню (например, основное, барное, завтраки). Эндпоинт GET /menu отдаёт лёгкий список меню (VendorMenuInfo); детальные эндпоинты по {menuId} отдают полное дерево с секциями и продуктами.

Поля VendorMenuInfo (список меню)

ПолеТипОписание
idstring?Идентификатор меню
namestring?Название меню
imageLocationstring?URL/путь к изображению
sequenceintegerПорядок отображения
visiblebooleanВидимость меню
productsCountintegerКоличество продуктов в меню
menuUrlstring?Публичная ссылка на меню

Поля VendorMenu (полное меню)

ПолеТипОписание
idstring?Идентификатор меню
namestring?Название
imageLocationstring?URL/путь к изображению
sequenceintegerПорядок отображения
visiblebooleanВидимость
sectionsarray<VendorMenuSection>Секции меню

Каждая секция (VendorMenuSection) содержит: name (string?), description (string?) и products (array<VendorProduct>) — продукты в формате, описанном выше.

Список меню

GET /menu

Возвращает массив VendorMenuInfo.

Terminal window
curl -G https://api.hostmeapp.com/api/core/admin/restaurants/123/menu \
-H "Authorization: Bearer $TOKEN"

Обновить список меню

PUT /menu

Принимает массив VendorMenuInfo — используется для пакетного обновления порядка (sequence) и видимости (visible) меню.

Terminal window
curl -X PUT https://api.hostmeapp.com/api/core/admin/restaurants/123/menu \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '[
{ "id": "MENU_ID_1", "sequence": 1, "visible": true },
{ "id": "MENU_ID_2", "sequence": 2, "visible": false }
]'

Точная схема успешного ответа (200) для этого эндпоинта в спецификации не зафиксирована.

Создать меню

POST /menu

Тело — VendorMenu (с секциями и продуктами). Ответ — созданное меню.

Terminal window
curl -X POST https://api.hostmeapp.com/api/core/admin/restaurants/123/menu \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Завтраки",
"sequence": 1,
"visible": true,
"sections": [
{
"name": "Каши",
"description": "Подаются с 8:00 до 12:00",
"products": [
{ "name": "Овсянка", "price": 250, "visible": true }
]
}
]
}'

Получить меню

GET /menu/{menuId}

ПараметрГдеТипОписание
restaurantId *pathintegerИдентификатор ресторана
menuId *pathstringИдентификатор меню
sectionsquerystringФильтр по секциям

Ответ — VendorMenu с полным деревом секций и продуктов.

Изменить меню

PUT /menu/{menuId}

ПараметрГдеТип
restaurantId *pathinteger
menuId *pathstring

Тело — VendorMenu. Ответ — обновлённое меню.

Удалить меню

DELETE /menu/{menuId}

ПараметрГдеТип
restaurantId *pathinteger
menuId *pathstring

Связанные разделы. Привязку модификаторов и налогов к продуктам см. в Меню: Модификаторы и налоги. Управление остатками и стоп-листом — в Меню: Инвентарь и стоп-лист.