- Request
- Responses
- 200 OK
- Body
- ScheduleName
- Schedule
- CategoryImages
- Category
- Nutrients
- Modifiers
- ModifierGroups
- ItemsImages
- MenuCompositionItemAdditionalDescriptionsBadge
- MenuCompositionItemAdditionalDescriptions
- AgeGroup
- AlcoholPercentage
- AdultInfo
- MenuCompositionItem
- ItemId
- ComboComponentItem
- ComboComponent
- Price
- ComboFixedPrice
- ComboItemPrice
- ComboItemFixedPrice
- DiscountPercent
- ComboSingleDiscountPrice
- ComboItemDiscount
- ComboItemDiscountsPrice
- ComboPrice
- MenuCompositionCombo
- 400 Bad Request
- 401 Unauthorized
- 404 Not Found
- 500 Internal Server Error
Получить актуальное меню ресторана
Позиции, содержащие схематические или логические несоответствия (слишком длинная строка, цена равная 0.00) могут быть проигнорированы. Актуальная версия модели ответа - application/vnd.eats.menu.composition.v2+json
Request
GET
/menu/{restaurantId}/composition
Path parameters
|
Name |
Description |
|
restaurantId |
Type: string Идентификатор ресторана в системе партнера Example: `` |
Responses
200 OK
OK, возвращается актуальное на данный момент меню для указанного ресторана
Body
application/vnd.eats.menu.composition.v2+json
{
"schedules": {
"scheduleName": [
{
"from": "08:00",
"till": "09:45",
"weekdays": [
"monday"
]
}
]
},
"categories": [
{
"id": "5af86d5a-d92d-4e07-9271-aea0f7ef95a6",
"parentId": "5af86d5a-d92d-4e07-9271-aea0f7ef95a6",
"schedules": [
"breakfasts"
],
"name": "Завтраки",
"sortOrder": 0,
"images": [
{
"url": "https://example.com",
"updatedAt": "1937-01-01T12:00:27.870000+00:20"
}
]
}
],
"items": [
{
"id": "e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9",
"categoryId": "fa494dc1-2578-4adb-a8fa-e270de8c3d28",
"name": "Вареники с творогом и вишней",
"description": "Мука, вода, яичный порошок, вишня замороженная, творог 5%",
"price": 1000,
"vat": 20,
"shippingType": "delivery",
"isCatchweight": false,
"measure": 666,
"weightQuantum": 0.1,
"measureUnit": "г",
"excise": "sugary_drink",
"nutrients": {
"calories": 12.5,
"proteins": 15.3,
"fats": 12.5,
"carbohydrates": 15.3
},
"sortOrder": 0,
"modifierGroups": [
{
"id": "9987c815-3069-46ad-9626-74799fb22210",
"name": "Выбор приборов",
"modifiers": [
null
],
"minSelectedModifiers": 0,
"maxSelectedModifiers": 10,
"sortOrder": 0
}
],
"images": [
{
"hash": "example",
"url": "https://example.com"
}
],
"additional_descriptions": {
"consisting_ingredients": [
"мука"
],
"badges": [
{}
]
},
"adult_info": {
"age_group": 18,
"alcohol_percentage": "12.34"
},
"onlyForCombo": true
}
],
"combos": [
{
"id": "fa494dc1-2578-4adb-a8fa-e270de8c3d28",
"categoryId": "fa494dc1-2578-4adb-a8fa-e270de8c3d28",
"name": "Комбо с Воппер По-Итальянски",
"description": "example",
"image": null,
"components": [
{
"id": "example",
"name": "Горячее",
"sortOrder": 0,
"items": [
null
]
}
],
"price": {
"type": "fixed",
"price": "example"
}
}
],
"lastChange": "1937-01-01T12:00:27.870000+00:20"
}
|
Name |
Description |
|
categories |
Type: Category[] Категории меню Example
|
|
items |
Type: MenuCompositionItem[] Список блюд, доступных для заказа Example
|
|
lastChange |
Type: string<date-time> Дата последнего изменения меню ресторана (на стороне партнера). Важно: дата в формате RFC3339 с дробной частью секунд (Y-m-d\TH:i:s.uP)! Если эта дата не менялась, Яндекс Еда может в автоматическом режиме принять решение о том, что обновлять меню не требуется. Если дата обновления в этом поле отличается от даты во время последнего обновления меню, то оно будет загружено заново Example: |
|
combos |
Type: MenuCompositionCombo[] Список комбо, доступных для заказа Example
|
|
schedules |
Type: Schedule Описание возможных типов расписаний категорий меню Example
|
ScheduleName
|
Name |
Description |
|
from |
Type: string Время начала работы объявленного типа расписания, может принимать значения от 00:00 до 24:00 Example: |
|
till |
Type: string Время окончания работы объявленного типа расписания, может принимать значения от 00:00 до 24:00 Example: |
|
weekdays |
Type: string[] Дни недели работы объявленного типа расписания Example
|
Example
{
"from": "08:00",
"till": "09:45",
"weekdays": [
"monday"
]
}
Schedule
|
Name |
Description |
|
scheduleName |
Type: ScheduleName[] Объявление необходимого типа расписания. Тип определяется названием ключа. Например, breakfasts. Далее этот ключ используется в массиве расписаний у категорий меню. Example
|
Example
{
"scheduleName": [
{
"from": "08:00",
"till": "09:45",
"weekdays": [
"monday"
]
}
]
}
CategoryImages
|
Name |
Description |
|
updatedAt |
Type: string<date-time> Дата обновления изображения, в формате RFC3339 с дробной частью секунд (Y-m-d\TH:i:s.uP) Example: |
|
url |
Type: string<uri> Ссылка на изображение для скачивания Example: |
Example
{
"url": "https://example.com",
"updatedAt": "1937-01-01T12:00:27.870000+00:20"
}
Category
|
Name |
Description |
|
id |
Type: string Внутренний идентификатор категории в системе партнера. Может быть любым значением, приводимым к строке. Рекомендация - UUID4 Max length: Example: |
|
name |
Type: string Наименование категории (например "Завтраки") Example: |
|
images |
Type: CategoryImages[] Изображение категории ресторана Example
|
|
parentId |
Type: string Уникальный идентификатор родительской категории для древовидной структуры. nullable: true. Не может быть пустой строкой. Ссылается на существующие категории. При загрузке адаптируется к плоской структуре категорий Яндекс.Еды (товары из подкатегорий попадают в родительские категории первого уровня) Max length: Example: |
|
schedules |
Type: string[] Example
|
|
sortOrder |
Type: integer Порядок сортировки от меньшего к большему. Если не указан, считаем за 100 |
Example
{
"id": "5af86d5a-d92d-4e07-9271-aea0f7ef95a6",
"parentId": "5af86d5a-d92d-4e07-9271-aea0f7ef95a6",
"schedules": [
"breakfasts"
],
"name": "Завтраки",
"sortOrder": 0,
"images": [
{
"url": "https://example.com",
"updatedAt": "1937-01-01T12:00:27.870000+00:20"
}
]
}
Nutrients
Энергетическая ценность продукта на 100гр
|
Name |
Description |
|
calories |
Type: number Калории на 100гр |
|
carbohydrates |
Type: number Углеводы на 100гр |
|
fats |
Type: number Жиры на 100гр |
|
proteins |
Type: number Белки на 100гр |
Example
{
"calories": 12.5,
"proteins": 15.3,
"fats": 12.5,
"carbohydrates": 15.3
}
Modifiers
|
Name |
Description |
|
id |
Type: string Идентификатор модификатора на стороне партнера. Может быть любым значением, приводимым к строке. Рекомендация – UUID4. Этот идентификатор передаётся в заказе вместе с выбранным количеством Example: |
|
maxAmount |
Type: integer Максимальное количество указанного модификатора для блюда в заказе. Это число не должно превышать значение параметра Min value: Max value: |
|
minAmount |
Type: integer Минимальное количество указанного модификатора для блюда в заказе. Должно быть меньше maxAmount. Min value: Max value: |
|
name |
Type: string Название модификатора Example: |
|
price |
Type: number Цена модификатора |
|
excise |
Type: string Признак акцизного товара. Вместо ключа excise можно передавать метку [AT] (заглавными латинскими буквами в квадратных скобках) в поле Enum: |
|
originalPrice |
Type: number Отдельное поле для передачи исходых цен опций/модификаторов. Пользователю не показывается. Используется для расчета суммы при частичных возвратах. |
|
vat |
Type: integer НДС, включенный в стоимость, в процентах. Если не указан, считается за 0 |
Example
{
"id": "916cfc99-acb4-4a96-9a42-b29159e88189",
"name": "Европейские приборы",
"price": 150,
"originalPrice": 150,
"vat": 20,
"excise": "sugary_drink",
"minAmount": 0,
"maxAmount": 10
}
ModifierGroups
|
Name |
Description |
|
id |
Type: string Идентификатор группы модификаторов на стороне партнера. Может быть любым значением, приводимым к строке. Рекомендация - UUID4 Example: |
|
maxSelectedModifiers |
Type: integer Максимальное количество модификаторов, которые возможно выбрать для данной группы. Не должно быть меньше общего числа возможных "modifiers" (с учетом их maxAmount) и не должно быть меньше minSelectedModifiers Min value: Max value: |
|
minSelectedModifiers |
Type: integer Минимальное количество модификаторов, которые необходимо выбрать для данной группы. Не должно быть больше общего числа необходимых "modifiers" (с учетом их minAmount) и не должно быть больше maxSelectedModifiers Min value: Max value: |
|
name |
Type: string Наименование группы модификаторов Example: |
|
modifiers |
Type: Modifiers[] Опции, включаемые в группу Example
|
|
sortOrder |
Type: integer Порядок сортировки от меньшего к большему. Если не указан, считаем за 100. |
Example
{
"id": "9987c815-3069-46ad-9626-74799fb22210",
"name": "Выбор приборов",
"modifiers": [
{
"id": "916cfc99-acb4-4a96-9a42-b29159e88189",
"name": "Европейские приборы",
"price": 150,
"originalPrice": 150,
"vat": 20,
"excise": "sugary_drink",
"minAmount": 0,
"maxAmount": 10
}
],
"minSelectedModifiers": 0,
"maxSelectedModifiers": 10,
"sortOrder": 0
}
ItemsImages
|
Name |
Description |
|
hash |
Type: string SHA1-хэш от содержимого файла изображения. Рассчитывается партнером, служит признаком уникальности. В случае если он меняется, Яндекс Еда перезагружает картинку Example: |
|
url |
Type: string<uri> Ссылка на изображение для скачивания Example: |
Example
{
"hash": "example",
"url": "https://example.com"
}
MenuCompositionItemAdditionalDescriptionsBadge
Тэги блюда разделены на категории и значения. В каждой категории можно выбрать всего один вариант. При обработке из каждой категории будет браться первое валидное значение. Дублирующие, неизвестные категории или несоответствие значения категории будут пропущены.
Доступные категории и их значения:
food_specifics- Особенности питанияhalal- халяльmeat_free- без мяса
food_spiciness- остротаspicy- острое
cooking_method- способ готовкиfried- жареноеbaked- запечённоеgrilled- на грилеnot_cooked- нужно готовить
food_portion- размерportion_for_several_people- на компаниюbig_portion- мегапорцияcombo- комбо
|
Name |
Description |
|
category |
Type: string Enum: |
|
value |
Type: string Enum: |
Example
{
"category": "cooking_method",
"value": "fried"
}
MenuCompositionItemAdditionalDescriptions
Дополнительные поля для описания блюда
|
Name |
Description |
|
badges |
Type: MenuCompositionItemAdditionalDescriptionsBadge[] Example
|
|
consisting_ingredients |
Type: string[] Перечень ингредиентов, из которых состоит блюдо. Это исходные компоненты блюда, а не его составные части. Желательно указать все ингредиенты, которые могут вызвать аллергию или сильно влияют на вкус. Так пользователи сразу увидят важные подробности о блюде. Max items: Example
|
Example
{
"consisting_ingredients": [
"мука"
],
"badges": [
{
"category": "cooking_method",
"value": "fried"
}
]
}
AgeGroup
Возрастное ограничение на товар
Type: integer
Enum: 18, 21
AlcoholPercentage
Процент содержания алкоголя в блюде. Число указывается только через точку.
Type: string
Pattern: ^[0-9]+(\.[0-9]{1,2})?$
Example: 12.34
AdultInfo
Информация о adult-свойствах товара
|
Name |
Description |
|
age_group |
Type: AgeGroup Возрастное ограничение на товар Enum: Example: |
|
alcohol_percentage |
Type: AlcoholPercentage Процент содержания алкоголя в блюде. Число указывается только через точку. Pattern: Example: |
Example
{
"age_group": 18,
"alcohol_percentage": "12.34"
}
MenuCompositionItem
|
Name |
Description |
|
categoryId |
Type: string Идентификатор категории в системе партнера Max length: Example: |
|
id |
Type: string Внутренний идентификатор блюда в ресторане в системе партнера. Может быть любым значением, приводимым к строке. Рекомендация - UUID4 Max length: Example: |
|
measure |
Type: integer Характеристика измерений блюда - например вес или объем |
|
measureUnit |
Type: string Единица измерения. Допустимые значения - граммы и миллилитры Enum: |
|
name |
Type: string Наименование блюда в ресторане (например "Пирожки с вишней") Example: |
|
price |
Type: number Цена продукта. Блюда с нулевой ценой пропускаются и не попадают в меню |
|
additional_descriptions |
Type: MenuCompositionItemAdditionalDescriptions Дополнительные поля для описания блюда Example
|
|
adult_info |
Type: AdultInfo Информация о adult-свойствах товара Example
|
|
description |
Type: string Полное описание блюда Example: |
|
excise |
Type: string Признак акцизного товара. Также можно вместо ключа excise передавать метку [AT] (заглавными латинскими буквами в квадратных скобках) в name товара. Enum: |
|
images |
Type: ItemsImages[] Изображение блюда Example
|
|
isCatchweight |
Type: boolean Флаг того, что позиция весовая Default: |
|
modifierGroups |
Type: ModifierGroups[] Группы модификаторов для блюда. Обязательность модификаторов определяется параметром Example
|
|
nutrients |
Type: Nutrients Параметры КБЖУ Энергетическая ценность продукта на 100гр Example
|
|
onlyForCombo |
Type: boolean Блюдо только для комбо |
|
shippingType |
Type: string Тип доставки доступный для блюда - доставка или самовывоз. Если не указан, то блюдо доступно как для доставки, так и для самовывоза Enum: |
|
sortOrder |
Type: integer Порядок сортировки от меньшего к большему. Если не указан, считаем за 100 |
|
vat |
Type: number НДС, включенный в стоимость, в процентах, если не указан, считается за 0 |
|
weightQuantum |
Type: number Наименьшее количество продукта (квант) доступное для заказа. Поле является обязательным, если значение isCatchweight равно true, иначе значение поля не используется |
Example
{
"id": "e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9",
"categoryId": "fa494dc1-2578-4adb-a8fa-e270de8c3d28",
"name": "Вареники с творогом и вишней",
"description": "Мука, вода, яичный порошок, вишня замороженная, творог 5%",
"price": 1000,
"vat": 20,
"shippingType": "delivery",
"isCatchweight": false,
"measure": 666,
"weightQuantum": 0.1,
"measureUnit": "г",
"excise": "sugary_drink",
"nutrients": {
"calories": 12.5,
"proteins": 15.3,
"fats": 12.5,
"carbohydrates": 15.3
},
"sortOrder": 0,
"modifierGroups": [
{
"id": "9987c815-3069-46ad-9626-74799fb22210",
"name": "Выбор приборов",
"modifiers": [
{
"id": "916cfc99-acb4-4a96-9a42-b29159e88189",
"name": "Европейские приборы",
"price": 150,
"originalPrice": 150,
"vat": 20,
"excise": "sugary_drink",
"minAmount": 0,
"maxAmount": 10
}
],
"minSelectedModifiers": 0,
"maxSelectedModifiers": 10,
"sortOrder": 0
}
],
"images": [
{
"hash": "example",
"url": "https://example.com"
}
],
"additional_descriptions": {
"consisting_ingredients": [
"мука"
],
"badges": [
{
"category": "cooking_method",
"value": "fried"
}
]
},
"adult_info": {
"age_group": 18,
"alcohol_percentage": "12.34"
},
"onlyForCombo": true
}
ItemId
Внутренний идентификатор блюда в ресторане в системе партнера. Может быть любым значением, приводимым к строке. Рекомендация - UUID4
Type: string
Example: e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9
ComboComponentItem
Позиция в меню, которую можно выбрать как компонент комбо
|
Name |
Description |
|
itemId |
Type: ItemId Внутренний идентификатор блюда в ресторане в системе партнера. Может быть любым значением, приводимым к строке. Рекомендация - UUID4 Example: |
|
isDefault |
Type: boolean Является ли данный продукт выбором по умолчанию |
|
sortOrder |
Type: integer Порядок сортировки товара внутри компоненты комбо Min value: |
Example
{
"itemId": "e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9",
"sortOrder": 0,
"isDefault": true
}
ComboComponent
Компонент комбо
|
Name |
Description |
|
id |
Type: string Идентификатор компонента Example: |
|
items |
Type: ComboComponentItem[] Список позиций, которые можно выбрать как компонент комбо Example
|
|
name |
Type: string Название компонента Example: |
|
sortOrder |
Type: integer Порядок сортировки компоненты комбо Min value: |
Example
{
"id": "example",
"name": "Горячее",
"sortOrder": 0,
"items": [
{
"itemId": "e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9",
"sortOrder": 0,
"isDefault": true
}
]
}
Price
Type: string
Pattern: ^-?[0-9]+(\.[0-9]{1,2})?$
Example: example
ComboFixedPrice
Фиксированная цена на комбо.
Цена на блюда в заказе будет распределена пропорционально их цене в меню.
Например, если цена комбо 2500 и оно состоит из блюд, цена которых в меню 1000 и 2000,
то в заказе цены блюд будут 833.33 и 1666.67 соответственно
|
Name |
Description |
|
price |
Type: Price Pattern: Example: |
|
type |
Type: string Const: Example: |
Example
{
"type": "fixed",
"price": "example"
}
ComboItemPrice
Цена для блюда в комбо
|
Name |
Description |
|
itemId |
Type: ItemId Внутренний идентификатор блюда в ресторане в системе партнера. Может быть любым значением, приводимым к строке. Рекомендация - UUID4 Example: |
|
price |
Type: Price Pattern: Example: |
Example
{
"itemId": "e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9",
"price": "example"
}
ComboItemFixedPrice
На каждую позицию в комбо предоставляется отдельная цена
|
Name |
Description |
|
prices |
Type: ComboItemPrice[] Example
|
|
type |
Type: string Const: Example: |
Example
{
"type": "item_fixed",
"prices": [
{
"itemId": "e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9",
"price": "example"
}
]
}
DiscountPercent
Размер скидки в процентах
Type: integer
Min value: 0
Max value: 100
ComboSingleDiscountPrice
На комбо предоставляется процентная скидка, применяемая к сумме позиций в комбо
|
Name |
Description |
|
discount |
Type: DiscountPercent Размер скидки в процентах Min value: Max value: Example: |
|
type |
Type: string Const: Example: |
Example
{
"type": "single_discount",
"discount": 0
}
ComboItemDiscount
Скидка для блюда в комбо
|
Name |
Description |
|
discount |
Type: DiscountPercent Размер скидки в процентах Min value: Max value: Example: |
|
itemId |
Type: ItemId Внутренний идентификатор блюда в ресторане в системе партнера. Может быть любым значением, приводимым к строке. Рекомендация - UUID4 Example: |
Example
{
"itemId": "e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9",
"discount": 0
}
ComboItemDiscountsPrice
На каждую позицию в комбо предоставляется отдельная процентная скидка
|
Name |
Description |
|
discounts |
Type: ComboItemDiscount[] Example
|
|
type |
Type: string Const: Example: |
Example
{
"type": "item_discounts",
"discounts": [
{
"itemId": "e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9",
"discount": 0
}
]
}
ComboPrice
One of 4 types
-
Type: ComboFixedPrice
Фиксированная цена на комбо.
Цена на блюда в заказе будет распределена пропорционально их цене в меню.
Например, если цена комбо 2500 и оно состоит из блюд, цена которых в меню 1000 и 2000,
то в заказе цены блюд будут 833.33 и 1666.67 соответственноExample
{ "type": "fixed", "price": "example" } -
Type: ComboItemFixedPrice
На каждую позицию в комбо предоставляется отдельная цена
Example
{ "type": "item_fixed", "prices": [ { "itemId": "e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9", "price": "example" } ] } -
Type: ComboSingleDiscountPrice
На комбо предоставляется процентная скидка, применяемая к сумме позиций в комбо
Example
{ "type": "single_discount", "discount": 0 } -
Type: ComboItemDiscountsPrice
На каждую позицию в комбо предоставляется отдельная процентная скидка
Example
{ "type": "item_discounts", "discounts": [ { "itemId": "e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9", "discount": 0 } ] }
Example
{
"type": "fixed",
"price": "example"
}
MenuCompositionCombo
|
Name |
Description |
|
categoryId |
Type: string Идентификатор категории в системе партнера Example: |
|
components |
Type: ComboComponent[] Example
|
|
id |
Type: string Идентификатор комбо Example: |
|
name |
Type: string Название комбо Example: |
|
price |
Type: ComboPrice Example
|
|
description |
Type: string Описание комбо Example: |
|
image |
Type: ItemsImages Example
|
Example
{
"id": "fa494dc1-2578-4adb-a8fa-e270de8c3d28",
"categoryId": "fa494dc1-2578-4adb-a8fa-e270de8c3d28",
"name": "Комбо с Воппер По-Итальянски",
"description": "example",
"image": {
"hash": "example",
"url": "https://example.com"
},
"components": [
{
"id": "example",
"name": "Горячее",
"sortOrder": 0,
"items": [
{
"itemId": "e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9",
"sortOrder": 0,
"isDefault": true
}
]
}
],
"price": {
"type": "fixed",
"price": "example"
}
}
400 Bad Request
Bad request. Ошибка в параметрах. В теле ответа ожидается массив с объектом из списка ошибок
ErrorItem
|
Name |
Description |
|
code |
Type: integer Согласованный с Яндекс.Еда числовой код ошибки |
|
description |
Type: string Сообщение об ошибке Example: |
Example
{
"code": 100,
"description": "Description of error"
}
401 Unauthorized
Не пройдена авторизация - истек токен, либо не был передан в запросе. Будет сделан ретрай
Body
application/json
{
"reason": "Access token has been expired. You should request a new one"
}
|
Name |
Description |
|
reason |
Type: string Причина, по которой не прошла авторизация Example: |
404 Not Found
Не найден ресторан. В теле ответа ожидается массив с объектом из списка ошибок
500 Internal Server Error
Внутренние ошибки сервера. В теле ответа ожидается массив с объектом из списка ошибок