# Меню торговой точки

### Общие концепции

Меню в заведении разбито на группы. При этом группы могут быть вложенными. Меню запрашивается на каждую торговую точку отдельно (в каждой торговой точке могут быть свои позиции и разные цены).

Меню в заведении разбито на два вида: блюда (то что готовится на точке по рецепту, например напитки или хот доги) и обычные товары, которые перепродаются в том виде, в котором их закупили (например, банка кока-колы).

Блюда имеют 1 или несколько вариантов порций (размеров). Например, Капучино может быть 250мл или 400мл. Цена задается на каждую порцию блюда отдельно.

В блюда можно добавлять добавки (например, сироп в кофе или выбор сосиски в хот-доге). Все добавки так же разбиты на группы. В каждом блюде указано, какие группы добавок разрешены для данного блюда (и сколько из них гость может выбрать бесплатно).&#x20;

Блюда, размеры порций, товары, добавки определяются уникальным идентификатором (поле guid), которые необходимо передавать в заказе. guid не меняется со временем, его можно запомнить на своей стороне для дальнейшей работы.

## /menu/v2/group/list

<mark style="color:blue;">`GET`</mark> `https://api.ytimes.ru/ex/menu/v2/group/list`

Получение структуры групп меню всего аккаунта или отдельной торговой точки. Запрашивать данный метод можно не чаще 10 раз в час (данные закешировать на своей стороне, запрашивать обновленную версию при получении webhook о том, что меню изменилось). <br>

#### Query Parameters

| Name     | Type   | Description                                                                                                |
| -------- | ------ | ---------------------------------------------------------------------------------------------------------- |
| shopGuid | string | GUID торговой точки, для которой запрашивается меню. Если не указать, в ответ поступит меню всего аккаунте |

#### Headers

| Name                                            | Type   | Description      |
| ----------------------------------------------- | ------ | ---------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Ключ авторизации |

{% tabs %}
{% tab title="200 Пример ответа с сервера:" %}

```javascript
{
  "success": true,
  "count": 5,
  "rows": [{
    "guid": "fd0cb63e-294f-4e83-b9cc-66344fb8cbcb",
    "name": "Основное меню",
    "priority": 0,
    "imageLink": url картинки, если она задана
    "groupList": [],  список вложенных групп
  }, {
    "guid": "0357c53c-0d1d-43fb-8617-36c4d6d6f96c",
    "name": "Выпечка и десерты",
    "priority": 10000,
    "imageLink": url картинки если она задана
    "groupList": [],  список вложенных групп
  }, {
    "guid": "6254ed51-9ee0-431e-9163-7d66aec868d6",
    "name": "Сувениры и подарки",
    "priority": 10000,
    "imageLink": url картинки если она задана
    "groupList": [],
  }],
  "error": null,
}
```

{% endtab %}
{% endtabs %}

## /menu/item/list

<mark style="color:blue;">`GET`</mark> `https://api.ytimes.ru/ex/menu/item/list`

Получение структуры меню торговой точки для создания заказов. Запрашивать данный метод можно не чаще 10 раз в час (данные закешировать на своей стороне, запрашивать обновленную версию при получении webhook о том, что меню изменилось). <br>

#### Query Parameters

| Name                                       | Type   | Description                                         |
| ------------------------------------------ | ------ | --------------------------------------------------- |
| shopGuid<mark style="color:red;">\*</mark> | string | GUID торговой точки, для которой запрашивается меню |

#### Headers

| Name                                            | Type   | Description      |
| ----------------------------------------------- | ------ | ---------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Ключ авторизации |

{% tabs %}
{% tab title="200 Возвращает список доступных групп меню. Внутри каждой группы могут быть как вложенные группы, так и список доступных позиций (блюд или товаров).

//Группы меню
MenuCategory {
guid: string,  (идентификатор группы)
name: string,
priority: int,  (приоритет по возрастанию для отображения списка групп)
categoryList: MenuCategory\[],   (список вложенных групп)
itemList: MenuItem\[],  (список доступных блюд и напитков)
goodsList: GoodsItem\[] (список доступных товаров)
}

//Данные блюда
MenuItem {
guid: string, (идентификатор пункта меню, используется для заказа)
name: string,
priority: int, (приоритет по возрастанию для отображения списка),
typeList: MenuItemType\[],  (список размеров порций блюда),
supplementCategoryToFreeCount: Map\<String, Int>,  (количество бесплатных добавок, доступных для данного блюда),
defaultSupplements: string\[] (список добавок, которые идут в блюдо по умолчанию)
}

//Данные порций блюда
MenuItemType {
guid: string,  (идентификатор размера порции, используется для заказа)
name: string,
price: double,  (цена порции этого блюда на данной торговой точке)
isTogo: boolean (обозначает, относится ли данная порция к заказам с собой или к залу)
}

//Данные продаваемых товаров
GoodsItem {
guid: string,  (идентификатор товара, используется для заказа)
name: string,
priority: int,  (приоритет по возрастанию для отображения списка)
price: double (цена позиции на данной торговой точке)
}

Пример ответа с сервера:" %}

<pre class="language-javascript"><code class="lang-javascript">{
  "success": true,
  "count": 5,
  "rows": [{
    "guid": "fd0cb63e-294f-4e83-b9cc-66344fb8cbcb",
    "name": "Основное меню",
    "priority": 0,
    "imageLink": url картинки, если она задана
    "categoryList": [],
    "itemList": [{
      "guid": "3663db4a-422f-4701-a216-7915c0f25b92",
      "name": "Эспрессо",
      "priority": 0,
      "imageLink": url картинки если она задана
      "description": описание пункта меню
      "recipe": описание рецепта приготовления блюда
      "typeList": [{
        "guid": "ab59e06f-5cc5-458b-9c82-d353fc05db3d",
        "name": "30мл",
        "price": 60,
        "isTogo": true
      }, {
        "guid": "ed6fb1b6-8f80-4c28-8216-eebf7cefa3b5",
        "name": "60мл",
        "price": 90,
        "isTogo": true
      }],
      "supplementCategoryToFreeCount": null,
      "defaultSupplements": [],
    }, {
      "guid": "733fa8dc-dea9-4ef2-a3d6-edb5c0c3eb8e",
      "name": "Американо",
      "priority": 1,
      "imageLink": url картинки если она задана
      "description": описание пункта меню
      "recipe": описание рецепта приготовления блюда
      "typeList": [{
        "guid": "4a0d08da-ebf3-497f-8e85-7200369c1354",
        "name": "250мл",
        "price": 90,
        "isTogo": true
      }, {
        "guid": "5ef722fd-e933-44a5-a148-7ac97dee589b",
        "name": "400мл",
        "price": 120,
        "isTogo": true
      }],
      "supplementCategoryToFreeCount": {
        "ed6fb1b6-8f80-4c28-8216-ed6fb1b6": 0,
        "794545c2-2dc1-47ee-95a8-4b9f830a": 0,
        "1584ff15-7b89-458e-99e8-f9dc7dfa": 0
      },
      "defaultSupplements": [],
    }, {
      "guid": "88f566f9-6546-4794-a2fd-26bbd9e736d7",
      "name": "Капучино",
      "priority": 2,
      "imageLink": url картинки если она задана
      "description": описание пункта меню
      "recipe": описание рецепта приготовления блюда
      "typeList": [{
        "guid": "2b1b2bd9-ed7c-4562-858c-b7792f3e8746",
        "name": "250мл",
        "price": 120,
        "isTogo": true
      }, {
        "guid": "9e72f0ee-1f54-40ae-b9b5-a7ba4588b015",
        "name": "400мл",
        "price": 170,
        "isTogo": true
      }],
      "supplementCategoryToFreeCount": {
        "ed6fb1b6-8f80-4c28-8216-ed6fb1b6": 0,
        "794545c2-2dc1-47ee-95a8-4b9f830a": 0,
        "1584ff15-7b89-458e-99e8-f9dc7dfa": 0
      },
      "defaultSupplements": [],
    }],
    "goodsList": [],
  }, {
    "guid": "0357c53c-0d1d-43fb-8617-36c4d6d6f96c",
    "name": "Выпечка и десерты",
    "priority": 10000,
    "imageLink": url картинки если она задана
    "categoryList": [],
    "itemList": [],
    "goodsList": [{
      "guid": "52ff15ae-6869-4120-b422-738c44e8bf48",
      "name": "Круассан",
      "priority": 0,
      "price": 100,
<strong>      "imageLink": url картинки если она задана
</strong>      "description": описание пункта меню
      "recipe": описание рецепта 
    }, {
      "guid": "ce1e0ee9-4a08-4784-b40a-96897d3ad7b2",
      "name": "Пончик",
      "priority": 1,
      "price": 60,
      "imageLink": url картинки если она задана
      "description": описание пункта меню
      "recipe": описание рецепта
    }],
  }, {
    "guid": "6254ed51-9ee0-431e-9163-7d66aec868d6",
    "name": "Сувениры и подарки",
    "priority": 10000,
    "imageLink": url картинки если она задана
    "categoryList": [],
    "itemList": [],
    "goodsList": [{
      "guid": "9161f46d-ad85-49fd-93ff-b88f39544e51",
      "name": "Подарочный сертификат",
      "priority": 2,
      "price": 150,
      "imageLink": url картинки если она задана
      "description": описание пункта меню
      "recipe": описание рецепта
    }],
  }],
  "error": null,
}
</code></pre>

{% endtab %}
{% endtabs %}

## /menu/supplement/list

<mark style="color:blue;">`GET`</mark> `https://api.ytimes.ru/ex/menu/supplement/list`

Получение структуры добавок, которые можно добавлять в блюда. Запрашивать данный метод можно не чаще 10 раз в час (данные закешировать на своей стороне, запрашивать обновленную версию при получении webhook о том, что меню изменилось).

#### Query Parameters

| Name                                       | Type   | Description                                           |
| ------------------------------------------ | ------ | ----------------------------------------------------- |
| shopGuid<mark style="color:red;">\*</mark> | string | GUID торговой точки, для которой запрашиваются данные |

#### Headers

| Name                                            | Type   | Description      |
| ----------------------------------------------- | ------ | ---------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Ключ авторизации |

{% tabs %}
{% tab title="200 Возвращает список доступных групп добавок и список добавок каждой группы//Данные группы добавокSupplementCategory {  guid: string,  (идентификатор группы)  name: string,  priority: int,  (приоритет по возрастанию для отображения списка)  allowSeveralItem: boolean,  (разрешено или нет добавлять в блюдо одну и ту же добавку несколько раз. Например, двойной или тройной сахар)  maxSelectedCount: int,  (сколько максимум добавок данной группы можно добавить в блюдо, например, не более 4-х)  itemList: SupplementItem\[]  (добавки данной группы) }//Данные добавкиSupplementItem {  guid: string,  (идентификатор добавки, используется для указания в заказе)  name: string,  priority: int, (приоритет по возрастанию для отображения списка)  defaultPrice: double,  (стандартная цена добавки для блюда в зале)  defaultTogoPrice: double,  (стандартная цена добавки для блюда с собой)  menuTypeToPrice: Map\<string, double> (дополнительные цены, относящиеся к конкретным порциям блюда. Например Кокосовое молоко для большого стакана может стоить больше, чем стандартная цена)}Пример ответа с сервера:" %}

```javascript
{
  "success": true,
  "count": 3,
  "rows": [
    {
      "guid": "b33596ac-bffa-4f6c-a497-fa753818adcd",
      "name": "Сиропы",
      "priority": 0,
      "allowSeveralItem": true,
      "maxSelectedCount": 3,
      "itemList": [
        {
          "guid": "c7ef8d4c-f72c-4171-a005-981cd15d4c6d",
          "name": "Амаретто",
          "priority": 0,
          "defaultPrice": 15,
          "defaultTogoPrice": 15,
          "menuTypeToPrice": null
        },
        {
          "guid": "59499009-efe4-4bc3-a752-863165ed99e3",
          "name": "Бабл Гамм",
          "priority": 1,
          "defaultPrice": 15,
          "defaultTogoPrice": 15,
          "menuTypeToPrice": null
        },
        {
          "guid": "01e80c9e-5cb5-4460-911b-27b0b7cf9050",
          "name": "Банан",
          "priority": 2,
          "defaultPrice": 15,
          "defaultTogoPrice": 15,
          "menuTypeToPrice": null
        }
      ]
    },
    {
      "guid": "6b21e491-75c0-442d-afd8-7cfdbadefa19",
      "name": "Молочко",
      "priority": 1,
      "allowSeveralItem": false,
      "maxSelectedCount": 1,
      "itemList": [
        {
          "guid": "a620755d-bc1a-467d-ad6f-98412b981864",
          "name": "Кокосовое молоко",
          "priority": 0,
          "defaultPrice": 0,
          "defaultTogoPrice": 50,
          "menuTypeToPrice": {
            "5ef722fd-e933-44a5-a148-7ac97dee589b": 70
          }
        },
        {
          "guid": "b492a0df-1a6c-4a0f-b4d1-7d28de1f52ba",
          "name": "Овсяное молоко",
          "priority": 1,
          "defaultPrice": 0,
          "defaultTogoPrice": 30,
          "menuTypeToPrice": {
            "5ef722fd-e933-44a5-a148-7ac97dee589b": 50
          }
        },
        {
          "guid": "fb280f5a-a0c7-4c2c-9a7a-4b4ea123f6cb",
          "name": "Соевое молоко",
          "priority": 2,
          "defaultPrice": 0,
          "defaultTogoPrice": 30,
          "menuTypeToPrice": {
            "5ef722fd-e933-44a5-a148-7ac97dee589b": 50
          }
        }
      ]
    },
    {
      "guid": "a8f6fa87-f85a-4235-a95f-3efe18678cf2",
      "name": "Прочее",
      "priority": 2,
      "allowSeveralItem": true,
      "maxSelectedCount": 2,
      "itemList": [{
          "guid": "d70f90e3-1f45-4a68-b1b6-9cd76d0bb0be",
          "name": "Корица",
          "priority": 4,
          "defaultPrice": 0,
          "defaultTogoPrice": 0,
          "menuTypeToPrice": null
        },
        {
          "guid": "6a83eae5-5585-465f-91b5-5030160dfe15",
          "name": "Сахар",
          "priority": 5,
          "defaultPrice": 0,
          "defaultTogoPrice": 0,
          "menuTypeToPrice": null
        },
        {
          "guid": "3e80a05d-f1c9-41b0-952b-4d9a709afdf7",
          "name": "Молоко",
          "priority": 6,
          "defaultPrice": 15,
          "defaultTogoPrice": 15,
          "menuTypeToPrice": null
        }
      ]
    }
  ],
  "error": null
}
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ytimes-2.gitbook.io/ytimes-kafe/integracii/vneshnii-api/menyu-torgovoi-tochki.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
