Hostme | Каталог

Каталог

Обновлено: 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

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

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 *pathinteger
groupId *pathstring

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

DELETE /productgroups/{groupId} — удалить группу

ПараметрГдеТип
restaurantId *pathinteger
groupId *pathstring
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Применённый размер страницы
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 *pathinteger
productId *pathstring

Тело — 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 *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.

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 *pathintegerИдентификатор ресторана
menuId *pathstringИдентификатор меню
sectionsquerystringФильтр по секциям

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

PUT /menu/{menuId} — изменить меню

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

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

DELETE /menu/{menuId} — удалить меню

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

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