Каталог
Обновлено: 2026-06-24 17:30 MSK
Каталог — это структура меню ресторана: группы продуктов (категории), сами продукты (блюда), а также меню как набор секций с продуктами. Эти эндпоинты позволяют партнёру читать каталог и синхронизировать его с внешней системой (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 |
Связанные разделы. Привязку модификаторов и налогов к продуктам см. в Меню: Модификаторы и налоги. Управление остатками и стоп-листом — в Меню: Инвентарь и стоп-лист.