> For the complete documentation index, see [llms.txt](https://ytimes-2.gitbook.io/ytimes-kafe/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ytimes-2.gitbook.io/ytimes-kafe/integracii/vneshnii-api/menyu-torgovoi-tochki.md).

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

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

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

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

Блюда имеют 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 %}
