Получить актуальное меню ресторана

Позиции, содержащие схематические или логические несоответствия (слишком длинная строка, цена равная 0.00) могут быть проигнорированы. Актуальная версия модели ответа - application/vnd.eats.menu.composition.v2+json

Request

GET

/menu/{restaurantId}/composition

Path parameters

Name

Description

restaurantId*

Type: string

Идентификатор ресторана в системе партнера

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": "string",
                    "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,
            "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": "string",
                    "url": "string"
                }
            ],
            "additional_descriptions": {
                "consisting_ingredients": [
                    "мука"
                ],
                "badges": [
                    {
                        "category": "cooking_method",
                        "value": "fried"
                    }
                ]
            },
            "adult_info": {
                "age_group": 18,
                "alcohol_percentage": "12.34"
            },
            "onlyForCombo": false
        }
    ],
    "combos": [
        {
            "id": "fa494dc1-2578-4adb-a8fa-e270de8c3d28",
            "categoryId": "fa494dc1-2578-4adb-a8fa-e270de8c3d28",
            "name": "Комбо с Воппер По-Итальянски",
            "description": "string",
            "image": {
                "hash": "string",
                "url": "string"
            },
            "components": [
                {
                    "id": "string",
                    "name": "Горячее",
                    "items": [
                        {
                            "itemId": "e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9",
                            "isDefault": false
                        }
                    ]
                }
            ],
            "price": {
                "type": "fixed",
                "price": "string"
            }
        }
    ],
    "lastChange": "1937-01-01T12:00:27.870000+00:20"
}

Name

Description

categories*

Type: Category[]

Категории меню

items*

Type: MenuCompositionItem[]

Список блюд, доступных для заказа

lastChange*

Type: string<date-time>

Дата последнего изменения меню ресторана (на стороне партнера). Важно: дата в формате RFC3339 с дробной частью секунд (Y-m-d\TH:i:s.uP)! Если эта дата не менялась, Яндекс Еда может в автоматическом режиме принять решение о том, что обновлять меню не требуется. Если дата обновления в этом поле отличается от даты во время последнего обновления меню, то оно будет загружено заново

Example: 1937-01-01T12:00:27.870000+00:20

combos

Type: MenuCompositionCombo[]

Список комбо, доступных для заказа

schedules

Type: Schedule

Описание возможных типов расписаний категорий меню

Category

Name

Description

id*

Type: string

Внутренний идентификатор категории в системе партнера. Может быть любым значением, приводимым к строке. Рекомендация - UUID4

Example: 5af86d5a-d92d-4e07-9271-aea0f7ef95a6

Max length: 64

name*

Type: string

Наименование категории (например "Завтраки")

Example: Завтраки

images

Type: CategoryImages[]

Изображение категории ресторана

parentId

Type: string

Уникальный идентификатор родительской категории для древовидной структуры. nullable: true. Не может быть пустой строкой. Ссылается на существующие категории. При загрузке адаптируется к плоской структуре категорий Яндекс.Еды (товары из подкатегорий попадают в родительские категории первого уровня)

Example: 5af86d5a-d92d-4e07-9271-aea0f7ef95a6

Max length: 64

schedules

Type: string[]

Тип расписания категории. Если указать пустой список или сослаться на пустую категорию, находящуюся в отдельном блоке schedules, то считаем категорию всегда доступной.

Example: breakfasts

sortOrder

Type: integer

Порядок сортировки от меньшего к большему. Если не указан, считаем за 100

Example: 0

Name

Description

categoryId*

Type: string

Идентификатор категории в системе партнера

Example: fa494dc1-2578-4adb-a8fa-e270de8c3d28

Max length: 64

id*

Type: string

Внутренний идентификатор блюда в ресторане в системе партнера. Может быть любым значением, приводимым к строке. Рекомендация - UUID4

Example: e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9

Max length: 64

measure*

Type: integer

Характеристика измерений блюда - например вес или объем

Example: 666

measureUnit*

Type: string

Единица измерения. Допустимые значения - граммы и миллилитры

Example: г

Enum: г, мл, g, ml

name*

Type: string

Наименование блюда в ресторане (например "Пирожки с вишней")

Example: Вареники с творогом и вишней

price*

Type: number<double>

Цена продукта. Блюда с нулевой ценой пропускаются и не попадают в меню

Example: 1000

additional_descriptions

Type: MenuCompositionItemAdditionalDescriptions

Дополнительные поля для описания блюда

adult_info

Type: AdultInfo

Информация о adult-свойствах товара

description

Type: string

Полное описание блюда

Example: Мука, вода, яичный порошок, вишня замороженная, творог 5%

excise

Type: string

Признак акцизного товара. Также можно вместо ключа excise передавать метку [AT] (заглавными латинскими буквами в квадратных скобках) в name товара.

Example: sugary_drink

Enum: sugary_drink, other

images

Type: ItemsImages[]

Изображение блюда

isCatchweight

Type: boolean

Флаг того, что позиция весовая

Default: false

Example: false

modifierGroups

Type: ModifierGroups[]

Группы модификаторов для блюда. Обязательность модификаторов определяется параметром minSelectedModifiers в группе модификаторов.

nutrients

Type: Nutrients

Параметры КБЖУ

onlyForCombo

Type: boolean

Блюдо только для комбо

sortOrder

Type: integer

Порядок сортировки от меньшего к большему. Если не указан, считаем за 100

Example: 0

vat

Type: number<int32>

НДС, включенный в стоимость, в процентах, если не указан, считается за 0

Example: 20

weightQuantum

Type: number<float>

Наименьшее количество продукта (квант) доступное для заказа. Поле является обязательным, если значение isCatchweight равно true, иначе значение поля не используется

Example: 0.1

Name

Description

categoryId*

Type: string

Идентификатор категории в системе партнера

Example: fa494dc1-2578-4adb-a8fa-e270de8c3d28

components*

Type: ComboComponent[]

Компонент комбо

id*

Type: string

Идентификатор комбо

Example: fa494dc1-2578-4adb-a8fa-e270de8c3d28

name*

Type: string

Название комбо

Example: Комбо с Воппер По-Итальянски

price*

Type: ComboFixedPrice
or ComboSingleDiscountPrice
or ComboItemDiscountsPrice

description

Type: string

Описание комбо

image

Type: ItemsImages

Schedule

Name

Description

scheduleName

Type: ScheduleName[]

Объявление необходимого типа расписания. Тип определяется названием ключа. Например, breakfasts. Далее этот ключ используется в массиве расписаний у категорий меню.

CategoryImages

Name

Description

updatedAt*

Type: string<date-time>

Дата обновления изображения, в формате RFC3339 с дробной частью секунд (Y-m-d\TH:i:s.uP)

Example: 1937-01-01T12:00:27.870000+00:20

url*

Type: string<uri>

Ссылка на изображение для скачивания

Дополнительные поля для описания блюда

Name

Description

badges

Type: 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 - комбо

consisting_ingredients

Type: string[]

Перечень ингредиентов, из которых состоит блюдо. Это исходные компоненты блюда, а не его составные части. Желательно указать все ингредиенты, которые могут вызвать аллергию или сильно влияют на вкус. Так пользователи сразу увидят важные подробности о блюде.
Например: мука, яйца, вода, мясо.

Example: мука

Max length: 100

Max items: 100

AdultInfo

Информация о adult-свойствах товара

Name

Description

age_group*

Type: AgeGroup

Возрастное ограничение на товар

Enum: 18, 21

alcohol_percentage

Type: string

Процент содержания алкоголя в блюде. Число указывается только через точку.

Example: 12.34

Pattern: ^[0-9]+(\.[0-9]{1,2})?$

ItemsImages

Name

Description

hash*

Type: string

SHA1-хэш от содержимого файла изображения. Рассчитывается партнером, служит признаком уникальности. В случае если он меняется, Яндекс Еда перезагружает картинку

url*

Type: string<uri>

Ссылка на изображение для скачивания

ModifierGroups

Name

Description

id*

Type: string

Идентификатор группы модификаторов на стороне партнера. Может быть любым значением, приводимым к строке. Рекомендация - UUID4

Example: 9987c815-3069-46ad-9626-74799fb22210

maxSelectedModifiers*

Type: integer<int32>

Максимальное количество модификаторов, которые возможно выбрать для данной группы. Не должно быть меньше общего числа возможных "modifiers" (с учетом их maxAmount) и не должно быть меньше minSelectedModifiers

Example: 10

Min value: 0

Max value: 255

minSelectedModifiers*

Type: integer<int32>

Минимальное количество модификаторов, которые необходимо выбрать для данной группы. Не должно быть больше общего числа необходимых "modifiers" (с учетом их minAmount) и не должно быть больше maxSelectedModifiers

Example: 0

Min value: 0

Max value: 255

name*

Type: string

Наименование группы модификаторов

Example: Выбор приборов

modifiers

Type: Modifiers[]

Опции, включаемые в группу

sortOrder

Type: integer

Порядок сортировки от меньшего к большему. Если не указан, считаем за 100.

Example: 0

Nutrients

Энергетическая ценность продукта на 100гр

Name

Description

calories*

Type: number

Калории на 100гр

Example: 12.5

carbohydrates*

Type: number

Углеводы на 100гр

Example: 15.3

fats*

Type: number

Жиры на 100гр

Example: 12.5

proteins*

Type: number

Белки на 100гр

Example: 15.3

ComboComponent

Компонент комбо

Name

Description

id*

Type: string

Идентификатор компонента

items*

Type: ComboComponentItem[]

Список позиций, которые можно выбрать как компонент комбо
Позиция в меню, которую можно выбрать как компонент комбо

name*

Type: string

Название компонента

Example: Горячее

ComboFixedPrice

Фиксированная цена на комбо.
Цена на блюда в заказе будет распределена пропорционально их цене в меню.
Например, если цена комбо 2500 и оно состоит из блюд, цена которых в меню 1000 и 2000,
то в заказе цены блюд будут 833.33 и 1666.67 соответственно

Name

Description

price*

Type: string

Pattern: ^-?[0-9]+(\.[0-9]{1,2})?$

type*

Type: string

Enum: fixed

ComboSingleDiscountPrice

На комбо предоставляется процентная скидка, применяемая к сумме позиций в комбо

Name

Description

discount*

Type: integer

Размер скидки в процентах

Min value: 0

Max value: 100

type*

Type: string

Enum: single_discount

ComboItemDiscountsPrice

На каждую позицию в комбо предоставляется отдельная процентная скидка

Name

Description

discounts*

Type: ComboItemDiscount[]

Скидка для блюда в комбо

type*

Type: string

Enum: item_discounts

ScheduleName

Name

Description

from*

Type: string

Время начала работы объявленного типа расписания, может принимать значения от 00:00 до 24:00

Example: 08:00

till*

Type: string

Время окончания работы объявленного типа расписания, может принимать значения от 00:00 до 24:00

Example: 09:45

weekdays*

Type: string[]

Дни недели работы объявленного типа расписания

Example: monday

Enum: monday, tuesday, wednesday, thursday, friday, saturday, sunday

Тэги блюда разделены на категории и значения. В каждой категории можно выбрать всего один вариант. При обработке из каждой категории будет браться первое валидное значение. Дублирующие, неизвестные категории или несоответствие значения категории будут пропущены.
Доступные категории и их значения:

  • 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

Example: cooking_method

Enum: food_specifics, food_spiciness, cooking_method, food_portion

value*

Type: string

Example: fried

Enum: halal, meat_free, spicy, fried, baked, grilled, not_cooked, portion_for_several_people, big_portion, combo

AgeGroup

Возрастное ограничение на товар

Type

Description

AgeGroup

Enum: 18, 21

Modifiers

Name

Description

id*

Type: string

Идентификатор модификатора на стороне партнера. Может быть любым значением, приводимым к строке. Рекомендация – UUID4. Этот идентификатор передаётся в заказе вместе с выбранным количеством

Example: 916cfc99-acb4-4a96-9a42-b29159e88189

maxAmount*

Type: integer<int32>

Максимальное количество указанного модификатора для блюда в заказе. Это число не должно превышать значение параметра maxSelectedModifiers в модели ModifierGroup для заказа целиком. Например, вы поддерживаете 5 модификаторов в группе целиком, но максимальное значение модификатора для отдельного блюда указано 10 – такой модификатор не пройдет валидацию. Не будут загружены: некорректный модификатор, группа, к которой он принадлежит, а также пункты меню, в которых используются некорректные данные

Example: 10

Min value: 0

Max value: 255

minAmount*

Type: integer<int32>

Минимальное количество указанного модификатора для блюда в заказе. Должно быть меньше maxAmount.

Example: 0

Min value: 0

Max value: 255

name*

Type: string

Название модификатора

Example: Европейские приборы

price*

Type: number<double>

Цена модификатора

Example: 150

excise

Type: string

Признак акцизного товара. Вместо ключа excise можно передавать метку [AT] (заглавными латинскими буквами в квадратных скобках) в поле name модификатора.

Example: sugary_drink

Enum: sugary_drink, other

originalPrice

Type: number<double>

Отдельное поле для передачи исходых цен опций/модификаторов. Пользователю не показывается. Используется для расчета суммы при частичных возвратах.

Example: 150

vat

Type: integer<int32>

НДС, включенный в стоимость, в процентах. Если не указан, считается за 0

Example: 20

ComboComponentItem

Позиция в меню, которую можно выбрать как компонент комбо

Name

Description

itemId*

Type: string

Внутренний идентификатор блюда в ресторане в системе партнера. Может быть любым значением, приводимым к строке. Рекомендация - UUID4

Example: e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9

isDefault

Type: boolean

Является ли данный продукт выбором по умолчанию
Если не указано ни одного продукта в списке с такой опцией,
то дефолтным будет первый продукт в списке

ComboItemDiscount

Скидка для блюда в комбо

Name

Description

discount*

Type: integer

Размер скидки в процентах

Min value: 0

Max value: 100

itemId*

Type: string

Внутренний идентификатор блюда в ресторане в системе партнера. Может быть любым значением, приводимым к строке. Рекомендация - UUID4

Example: e6709e9a-d3ab-4d1e-aa69-7ce30073cbc9

400 Bad Request

Bad request. Ошибка в параметрах. В теле ответа ожидается массив с объектом из списка ошибок

Body

application/json
[
    {
        "code": 100,
        "description": "Description of error"
    }
]

ErrorItem[]

ErrorItem

Name

Description

code

Type: integer

Согласованный с Яндекс.Еда числовой код ошибки

Example: 100

description

Type: string

Сообщение об ошибке

Example: 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: Access token has been expired. You should request a new one

404 Not Found

Не найден ресторан. В теле ответа ожидается массив с объектом из списка ошибок

Body

application/json
[
    {
        "code": 100,
        "description": "Description of error"
    }
]

ErrorItem[]

500 Internal Server Error

Внутренние ошибки сервера. В теле ответа ожидается массив с объектом из списка ошибок

Body

application/json
[
    {
        "code": 100,
        "description": "Description of error"
    }
]

ErrorItem[]

No longer supported, please use an alternative and newer version.