Каталог
Структура меню ресторана: категории, продукты (блюда) и их состав — чтение и синхронизация каталога через 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
| Поле | Тип | Описание |
|---|---|---|
id | string? | Идентификатор группы |
name | string? | Название категории |
imageLocation | string? | URL/путь к изображению категории |
sequence | integer | Порядок отображения |
visible | boolean | Видимость категории |
productsCount | integer | Количество продуктов в группе |
taxeRate | number? | Ставка налога по умолчанию (зал) |
takeawayTaxeRate | number? | Ставка налога для самовывоза |
deliveryTaxeRate | number? | Ставка налога для доставки |
Список групп
GET /productgroups
curl -G https://api.hostmeapp.com/api/core/admin/restaurants/123/productgroups \ -H "Authorization: Bearer $TOKEN"Создать группу
POST /productgroups
Тело — VendorProductGroup. Ответ — созданная группа.
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 * | path | integer |
groupId * | path | string |
Тело — VendorProductGroup. Ответ — обновлённая группа.
Удалить группу
DELETE /productgroups/{groupId}
| Параметр | Где | Тип |
|---|---|---|
restaurantId * | path | integer |
groupId * | path | string |
curl -X DELETE https://api.hostmeapp.com/api/core/admin/restaurants/123/productgroups/GROUP_ID \ -H "Authorization: Bearer $TOKEN"Продукты (блюда)
Продукт (VendorProduct) — это позиция меню: блюдо или напиток. Несёт цену по каналам
(зал/самовывоз/доставка), привязку к группе, остаток, ссылки на модификаторы и налоги.
Поля VendorProduct
| Поле | Тип | Описание |
|---|---|---|
id | string? | Идентификатор продукта |
productPLU | string? | Артикул/штрихкод (PLU/barcode) |
name | string? | Название |
description | string? | Описание |
visible | boolean | Видимость продукта |
imageLocation | string? | URL/путь к изображению |
price | number | Цена (зал) |
takeawayPrice | number? | Цена для самовывоза |
deliveryPrice | number? | Цена для доставки |
productType | string? | Тип продукта на стороне вашего POS |
groupId | string? | ID группы (категории) |
stockAmount | integer? | Остаток на складе |
modifiers | array<string> | Список ID модификаторов и групп модификаторов (см. Модификаторы и налоги) |
taxIds | array<string> | Список ID применённых налогов |
taxeRate | number? | Ставка налога (зал) |
takeawayTaxeRate | number? | Ставка налога для самовывоза |
deliveryTaxeRate | number? | Ставка налога для доставки |
Список продуктов
GET /products
Возвращает страницу продуктов (ProductsPage). Элементы — VendorProductSummary: те же поля,
что у VendorProduct, но вместо массива modifiers отдаётся флаг hasModifiers (boolean).
Параметры
| Параметр | Где | Тип | Описание |
|---|---|---|---|
restaurantId * | path | integer | Идентификатор ресторана |
productGroup | query | string | Фильтр по ID группы |
search | query | string | Поиск по названию |
visible | query | boolean | Фильтр по видимости |
skip | query | integer | Сдвиг для пагинации |
take | query | integer | Размер страницы |
Поля ответа ProductsPage
| Поле | Тип | Описание |
|---|---|---|
items | array<VendorProductSummary> | Продукты на странице |
total | integer | Всего продуктов по фильтру |
skip | integer | Применённый сдвиг |
take | integer | Применённый размер страницы |
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. Ответ — созданный продукт.
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 * | path | integer |
productId * | path | string |
Тело — VendorProduct. Ответ — обновлённый продукт.
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 * | path | integer |
productId * | path | string |
Меню и секции
Меню (VendorMenu) — это набор секций (VendorMenuSection), каждая из которых содержит продукты.
Один ресторан может иметь несколько меню (например, основное, барное, завтраки). Эндпоинт GET /menu
отдаёт лёгкий список меню (VendorMenuInfo); детальные эндпоинты по {menuId} отдают полное дерево
с секциями и продуктами.
Поля VendorMenuInfo (список меню)
| Поле | Тип | Описание |
|---|---|---|
id | string? | Идентификатор меню |
name | string? | Название меню |
imageLocation | string? | URL/путь к изображению |
sequence | integer | Порядок отображения |
visible | boolean | Видимость меню |
productsCount | integer | Количество продуктов в меню |
menuUrl | string? | Публичная ссылка на меню |
Поля VendorMenu (полное меню)
| Поле | Тип | Описание |
|---|---|---|
id | string? | Идентификатор меню |
name | string? | Название |
imageLocation | string? | URL/путь к изображению |
sequence | integer | Порядок отображения |
visible | boolean | Видимость |
sections | array<VendorMenuSection> | Секции меню |
Каждая секция (VendorMenuSection) содержит: name (string?), description (string?) и
products (array<VendorProduct>) — продукты в формате, описанном выше.
Список меню
GET /menu
Возвращает массив VendorMenuInfo.
curl -G https://api.hostmeapp.com/api/core/admin/restaurants/123/menu \ -H "Authorization: Bearer $TOKEN"Обновить список меню
PUT /menu
Принимает массив VendorMenuInfo — используется для пакетного обновления порядка (sequence)
и видимости (visible) меню.
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 (с секциями и продуктами). Ответ — созданное меню.
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 * | path | integer | Идентификатор ресторана |
menuId * | path | string | Идентификатор меню |
sections | query | string | Фильтр по секциям |
Ответ — VendorMenu с полным деревом секций и продуктов.
Изменить меню
PUT /menu/{menuId}
| Параметр | Где | Тип |
|---|---|---|
restaurantId * | path | integer |
menuId * | path | string |
Тело — VendorMenu. Ответ — обновлённое меню.
Удалить меню
DELETE /menu/{menuId}
| Параметр | Где | Тип |
|---|---|---|
restaurantId * | path | integer |
menuId * | path | string |
Связанные разделы. Привязку модификаторов и налогов к продуктам см. в Меню: Модификаторы и налоги. Управление остатками и стоп-листом — в Меню: Инвентарь и стоп-лист.