Перейти к содержимому
Разделы

Доступ к столу и заказы по QR

Прочитать текущий нативный каталог заказа за столом

GET/public/table-sessions/{sessionId}/order-menu

Требует действующего нативного участия и его фактического разрешённого Origin. Определяет совместимый нативный канал и опубликованный конфигуратор; locator или платёжный токен не дают права заказывать.

Авторизация

Authorization: Bearer <HALLIFY_TABLE_GUEST_TOKEN>

Гостевой ключ участия в сессии стола, ограниченный заведением, сессией, гостем, текущими эпохами доступа, ресурсом представления и Origin браузера.

Руководство по подключению

Параметры

originЗаголовок · Обязательно

Фактический Origin запроса, которым управляет браузер: используется для проверки разрешённого источника представления и его текущей привязки ресурса. Браузерные клиенты сохраняют это значение; авторизацию гостя предоставляет отдельный ключ запроса присоединения или участия в сессии.

string · uri
Полное определение
{
  "type": "string",
  "format": "uri",
  "example": "https://example.test/resource"
}
sessionIdПуть · Обязательно

Основная сессия обслуживания стола Hallify, которой принадлежат публичный доступ, запросы допуска и участие гостей, адресуемые этой операцией.

string · uuid
Полное определение
{
  "format": "uuid",
  "type": "string",
  "example": "9b6163a8-afea-4877-818b-8e2ae28a2845"
}

Ответы

200Нативный опубликованный каталог с текущей версией и непрозрачным токеном графа.
PublicMenuResponseDto
Полное определение
{
  "$ref": "#/components/schemas/PublicMenuResponseDto"
}
Пример ответа · 200 · application/json
{
  "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
  "salesChannelId": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc",
  "menuVersionId": "490ccfcb-caa6-472e-836a-a8416e8cee92",
  "versionNumber": 1,
  "graphHash": "menu-cost-v1.graph.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "currency": "GEL",
  "timeZone": "Asia/Tbilisi",
  "publishedAt": "2026-01-15T12:00:00.000Z",
  "servedAt": "2026-01-15T12:00:00.000Z",
  "categories": [
    {
      "id": "a5038d8c-af77-49d1-8b1c-095a41971c2c",
      "menuCategoryId": null,
      "name": "Example name",
      "sortOrder": 1,
      "items": [
        {
          "id": "1f29df05-cd6f-4563-8c71-ad1b872b9447",
          "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
          "name": "Example name",
          "description": null,
          "price": 0,
          "allergenCodes": [
            "GLUTEN"
          ],
          "isAlcoholic": true,
          "modifiers": [
            {
              "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
              "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
              "name": "Example name",
              "isRequired": true,
              "maxSelections": 0,
              "options": [
                {
                  "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                  "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                  "name": "Example name",
                  "priceDelta": 0,
                  "isDefault": true,
                  "allergenCodes": [
                    "GLUTEN"
                  ]
                }
              ]
            }
          ],
          "variants": [
            {
              "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
              "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
              "name": "Example name",
              "price": 0,
              "allergenCodes": [
                "GLUTEN"
              ],
              "isAlcoholic": true,
              "modifiers": [
                {
                  "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                  "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                  "name": "Example name",
                  "isRequired": true,
                  "maxSelections": 0,
                  "options": [
                    {
                      "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                      "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                      "name": "Example name",
                      "priceDelta": 0,
                      "isDefault": true,
                      "allergenCodes": [
                        "GLUTEN"
                      ]
                    }
                  ]
                }
              ],
              "availability": {
                "available": true,
                "reason": "AVAILABLE"
              }
            }
          ],
          "structure": {
            "executionMode": "DIRECT_ITEM",
            "configuratorMode": "DIRECT_ITEM",
            "pricingBehavior": "BASE_PRICE",
            "sellableVersions": "NONE",
            "groups": [
              {
                "id": "example-id",
                "name": "Example name",
                "sourceType": "CATALOG_ITEMS",
                "mode": "FIXED_CONTENTS",
                "minSelections": 0,
                "maxSelections": 0,
                "required": true,
                "choices": [
                  {
                    "id": "example-id",
                    "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
                    "name": "Example name",
                    "quantity": 1,
                    "upcharge": 0,
                    "isDefault": true,
                    "isIncluded": true,
                    "variants": [
                      {
                        "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
                        "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
                        "name": "Example name",
                        "price": 0,
                        "allergenCodes": [
                          "GLUTEN"
                        ],
                        "isAlcoholic": true,
                        "modifiers": [
                          {
                            "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                            "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                            "name": "Example name",
                            "isRequired": true,
                            "maxSelections": 0,
                            "options": [
                              {
                                "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                                "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                                "name": "Example name",
                                "priceDelta": 0,
                                "isDefault": true,
                                "allergenCodes": [
                                  "GLUTEN"
                                ]
                              }
                            ]
                          }
                        ],
                        "availability": {
                          "available": true,
                          "reason": "AVAILABLE"
                        }
                      }
                    ],
                    "modifiers": [
                      {
                        "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                        "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                        "name": "Example name",
                        "isRequired": true,
                        "maxSelections": 0,
                        "options": [
                          {
                            "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                            "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                            "name": "Example name",
                            "priceDelta": 0,
                            "isDefault": true,
                            "allergenCodes": [
                              "GLUTEN"
                            ]
                          }
                        ]
                      }
                    ],
                    "availability": {
                      "available": true,
                      "reason": "AVAILABLE"
                    }
                  }
                ],
                "modifierGroup": null
              }
            ],
            "courses": [
              {
                "groupId": "example",
                "name": "Example name",
                "sequence": 0
              }
            ],
            "measuredPolicy": null,
            "preorderPolicy": null
          },
          "availability": {
            "available": true,
            "reason": "AVAILABLE"
          },
          "sortOrder": 1
        }
      ]
    }
  ]
}
400Некорректный формат переданного идентификатора, запроса или ключа доступа.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 400 · application/json
{
  "statusCode": 400,
  "error": "errors:http.badRequest",
  "code": "HTTP_BAD_REQUEST",
  "message": "errors:http.badRequest",
  "translationKey": "errors:http.badRequest"
}
401QR-ключ, текущие права Hallify или точный Origin запроса не разрешены.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 401 · application/json
{
  "statusCode": 401,
  "error": "errors:http.unauthorized",
  "code": "HTTP_UNAUTHORIZED",
  "message": "errors:http.unauthorized",
  "translationKey": "errors:http.unauthorized"
}
404Текущий публичный идентификатор, привязка представления или принадлежащий ему ресурс Hallify недоступны.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 404 · application/json
{
  "statusCode": 404,
  "error": "errors:http.notFound",
  "code": "HTTP_NOT_FOUND",
  "message": "errors:http.notFound",
  "translationKey": "errors:http.notFound"
}
429Исчерпан хешированный бюджет попыток участия и источника. TABLE_PUBLIC_THROTTLED содержит retryAfterSeconds; новая нативная работа не выполняется.

Заголовки ответа

Retry-After

Целое количество секунд ожидания перед повтором отклонённого запроса.

integer
Полное определение
{
  "type": "integer",
  "minimum": 1,
  "example": 60
}
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 429 · application/json
{
  "statusCode": 429,
  "error": "errors:http.tooManyRequests",
  "code": "HTTP_TOO_MANY_REQUESTS",
  "message": "errors:http.tooManyRequests",
  "translationKey": "errors:http.tooManyRequests"
}
503Невозможно безопасно использовать QR-ключи или достоверное состояние Hallify.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 503 · application/json
{
  "statusCode": 503,
  "error": "errors:http.serviceUnavailable",
  "code": "HTTP_SERVICE_UNAVAILABLE",
  "message": "errors:http.serviceUnavailable",
  "translationKey": "errors:http.serviceUnavailable"
}

Схемы

PublicMenuResponseDto

Строго привязанное опубликованное гостевое меню одного активного заведения и точного канала продаж.

venueIdОбязательно

UUID заведения Hallify, которому принадлежит меню.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "UUID заведения Hallify, которому принадлежит меню.",
  "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
}
salesChannelIdОбязательно

Точный UUID активного канала продаж для каждого чтения опубликованных данных.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "Точный UUID активного канала продаж для каждого чтения опубликованных данных.",
  "example": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc"
}
menuVersionIdОбязательно

UUID текущей опубликованной версии меню для этого заведения и канала продаж.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "UUID текущей опубликованной версии меню для этого заведения и канала продаж.",
  "example": "490ccfcb-caa6-472e-836a-a8416e8cee92"
}
versionNumberОбязательно

Номер опубликованной версии меню Hallify.

integer
Полное определение
{
  "type": "integer",
  "minimum": 1,
  "description": "Номер опубликованной версии меню Hallify.",
  "example": 1
}
graphHashОбязательно

Непрозрачный токен опубликованного графа, обязательный для запросов ценового предложения гостя Hallify. Исходный хеш графа не раскрывается.

string
Полное определение
{
  "type": "string",
  "pattern": "^menu-cost-v1\\.graph\\.[A-Za-z0-9_-]{43}$",
  "description": "Непрозрачный токен опубликованного графа, обязательный для запросов ценового предложения гостя Hallify. Исходный хеш графа не раскрывается.",
  "example": "menu-cost-v1.graph.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
currencyОбязательно

Единая валюта заведения для всех опубликованных цен продажи в этом меню.

string
Полное определение
{
  "type": "string",
  "pattern": "^[A-Z]{3}$",
  "description": "Единая валюта заведения для всех опубликованных цен продажи в этом меню.",
  "example": "GEL"
}
timeZoneОбязательно

Часовой пояс заведения IANA для опубликованных правил пакетов и исполнения.

string
Полное определение
{
  "type": "string",
  "description": "Часовой пояс заведения IANA для опубликованных правил пакетов и исполнения.",
  "example": "Asia/Tbilisi"
}
publishedAtОбязательно

Время публикации активной версии меню в формате RFC 3339.

string · date-time
Полное определение
{
  "type": "string",
  "format": "date-time",
  "description": "Время публикации активной версии меню в формате RFC 3339.",
  "example": "2026-01-15T12:00:00.000Z"
}
servedAtОбязательно

Время оценки текущей публичной доступности в формате RFC 3339.

string · date-time
Полное определение
{
  "type": "string",
  "format": "date-time",
  "description": "Время оценки текущей публичной доступности в формате RFC 3339.",
  "example": "2026-01-15T12:00:00.000Z"
}
categoriesОбязательно

Опубликованные категории и явные гостевые проекции позиций без внутренних себестоимостей.

array
Полное определение
{
  "maxItems": 500,
  "description": "Опубликованные категории и явные гостевые проекции позиций без внутренних себестоимостей.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/PublicMenuCategoryDto"
  },
  "example": [
    {
      "id": "a5038d8c-af77-49d1-8b1c-095a41971c2c",
      "menuCategoryId": null,
      "name": "Example name",
      "sortOrder": 1,
      "items": [
        {
          "id": "1f29df05-cd6f-4563-8c71-ad1b872b9447",
          "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
          "name": "Example name",
          "description": null,
          "price": 0,
          "allergenCodes": [
            "GLUTEN"
          ],
          "isAlcoholic": true,
          "modifiers": [
            {
              "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
              "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
              "name": "Example name",
              "isRequired": true,
              "maxSelections": 0,
              "options": [
                {
                  "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                  "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                  "name": "Example name",
                  "priceDelta": 0,
                  "isDefault": true,
                  "allergenCodes": [
                    "GLUTEN"
                  ]
                }
              ]
            }
          ],
          "variants": [
            {
              "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
              "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
              "name": "Example name",
              "price": 0,
              "allergenCodes": [
                "GLUTEN"
              ],
              "isAlcoholic": true,
              "modifiers": [
                {
                  "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                  "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                  "name": "Example name",
                  "isRequired": true,
                  "maxSelections": 0,
                  "options": [
                    {
                      "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                      "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                      "name": "Example name",
                      "priceDelta": 0,
                      "isDefault": true,
                      "allergenCodes": [
                        "GLUTEN"
                      ]
                    }
                  ]
                }
              ],
              "availability": {
                "available": true,
                "reason": "AVAILABLE"
              }
            }
          ],
          "structure": {
            "executionMode": "DIRECT_ITEM",
            "configuratorMode": "DIRECT_ITEM",
            "pricingBehavior": "BASE_PRICE",
            "sellableVersions": "NONE",
            "groups": [
              {
                "id": "example-id",
                "name": "Example name",
                "sourceType": "CATALOG_ITEMS",
                "mode": "FIXED_CONTENTS",
                "minSelections": 0,
                "maxSelections": 0,
                "required": true,
                "choices": [
                  {
                    "id": "example-id",
                    "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
                    "name": "Example name",
                    "quantity": 1,
                    "upcharge": 0,
                    "isDefault": true,
                    "isIncluded": true,
                    "variants": [
                      {
                        "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
                        "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
                        "name": "Example name",
                        "price": 0,
                        "allergenCodes": [
                          "GLUTEN"
                        ],
                        "isAlcoholic": true,
                        "modifiers": [
                          {
                            "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                            "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                            "name": "Example name",
                            "isRequired": true,
                            "maxSelections": 0,
                            "options": [
                              {
                                "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                                "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                                "name": "Example name",
                                "priceDelta": 0,
                                "isDefault": true,
                                "allergenCodes": [
                                  "GLUTEN"
                                ]
                              }
                            ]
                          }
                        ],
                        "availability": {
                          "available": true,
                          "reason": "AVAILABLE"
                        }
                      }
                    ],
                    "modifiers": [
                      {
                        "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                        "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                        "name": "Example name",
                        "isRequired": true,
                        "maxSelections": 0,
                        "options": [
                          {
                            "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                            "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                            "name": "Example name",
                            "priceDelta": 0,
                            "isDefault": true,
                            "allergenCodes": [
                              "GLUTEN"
                            ]
                          }
                        ]
                      }
                    ],
                    "availability": {
                      "available": true,
                      "reason": "AVAILABLE"
                    }
                  }
                ],
                "modifierGroup": null
              }
            ],
            "courses": [
              {
                "groupId": "example",
                "name": "Example name",
                "sequence": 0
              }
            ],
            "measuredPolicy": null,
            "preorderPolicy": null
          },
          "availability": {
            "available": true,
            "reason": "AVAILABLE"
          },
          "sortOrder": 1
        }
      ]
    }
  ]
}
Полное определение
{
  "type": "object",
  "properties": {
    "venueId": {
      "type": "string",
      "format": "uuid",
      "description": "UUID заведения Hallify, которому принадлежит меню.",
      "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
    },
    "salesChannelId": {
      "type": "string",
      "format": "uuid",
      "description": "Точный UUID активного канала продаж для каждого чтения опубликованных данных.",
      "example": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc"
    },
    "menuVersionId": {
      "type": "string",
      "format": "uuid",
      "description": "UUID текущей опубликованной версии меню для этого заведения и канала продаж.",
      "example": "490ccfcb-caa6-472e-836a-a8416e8cee92"
    },
    "versionNumber": {
      "type": "integer",
      "minimum": 1,
      "description": "Номер опубликованной версии меню Hallify.",
      "example": 1
    },
    "graphHash": {
      "type": "string",
      "pattern": "^menu-cost-v1\\.graph\\.[A-Za-z0-9_-]{43}$",
      "description": "Непрозрачный токен опубликованного графа, обязательный для запросов ценового предложения гостя Hallify. Исходный хеш графа не раскрывается.",
      "example": "menu-cost-v1.graph.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Z]{3}$",
      "description": "Единая валюта заведения для всех опубликованных цен продажи в этом меню.",
      "example": "GEL"
    },
    "timeZone": {
      "type": "string",
      "description": "Часовой пояс заведения IANA для опубликованных правил пакетов и исполнения.",
      "example": "Asia/Tbilisi"
    },
    "publishedAt": {
      "type": "string",
      "format": "date-time",
      "description": "Время публикации активной версии меню в формате RFC 3339.",
      "example": "2026-01-15T12:00:00.000Z"
    },
    "servedAt": {
      "type": "string",
      "format": "date-time",
      "description": "Время оценки текущей публичной доступности в формате RFC 3339.",
      "example": "2026-01-15T12:00:00.000Z"
    },
    "categories": {
      "maxItems": 500,
      "description": "Опубликованные категории и явные гостевые проекции позиций без внутренних себестоимостей.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicMenuCategoryDto"
      },
      "example": [
        {
          "id": "a5038d8c-af77-49d1-8b1c-095a41971c2c",
          "menuCategoryId": null,
          "name": "Example name",
          "sortOrder": 1,
          "items": [
            {
              "id": "1f29df05-cd6f-4563-8c71-ad1b872b9447",
              "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
              "name": "Example name",
              "description": null,
              "price": 0,
              "allergenCodes": [
                "GLUTEN"
              ],
              "isAlcoholic": true,
              "modifiers": [
                {
                  "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                  "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                  "name": "Example name",
                  "isRequired": true,
                  "maxSelections": 0,
                  "options": [
                    {
                      "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                      "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                      "name": "Example name",
                      "priceDelta": 0,
                      "isDefault": true,
                      "allergenCodes": [
                        "GLUTEN"
                      ]
                    }
                  ]
                }
              ],
              "variants": [
                {
                  "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
                  "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
                  "name": "Example name",
                  "price": 0,
                  "allergenCodes": [
                    "GLUTEN"
                  ],
                  "isAlcoholic": true,
                  "modifiers": [
                    {
                      "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                      "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                      "name": "Example name",
                      "isRequired": true,
                      "maxSelections": 0,
                      "options": [
                        {
                          "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                          "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                          "name": "Example name",
                          "priceDelta": 0,
                          "isDefault": true,
                          "allergenCodes": [
                            "GLUTEN"
                          ]
                        }
                      ]
                    }
                  ],
                  "availability": {
                    "available": true,
                    "reason": "AVAILABLE"
                  }
                }
              ],
              "structure": {
                "executionMode": "DIRECT_ITEM",
                "configuratorMode": "DIRECT_ITEM",
                "pricingBehavior": "BASE_PRICE",
                "sellableVersions": "NONE",
                "groups": [
                  {
                    "id": "example-id",
                    "name": "Example name",
                    "sourceType": "CATALOG_ITEMS",
                    "mode": "FIXED_CONTENTS",
                    "minSelections": 0,
                    "maxSelections": 0,
                    "required": true,
                    "choices": [
                      {
                        "id": "example-id",
                        "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
                        "name": "Example name",
                        "quantity": 1,
                        "upcharge": 0,
                        "isDefault": true,
                        "isIncluded": true,
                        "variants": [
                          {
                            "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
                            "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
                            "name": "Example name",
                            "price": 0,
                            "allergenCodes": [
                              "GLUTEN"
                            ],
                            "isAlcoholic": true,
                            "modifiers": [
                              {
                                "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                                "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                                "name": "Example name",
                                "isRequired": true,
                                "maxSelections": 0,
                                "options": [
                                  {
                                    "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                                    "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                                    "name": "Example name",
                                    "priceDelta": 0,
                                    "isDefault": true,
                                    "allergenCodes": [
                                      "GLUTEN"
                                    ]
                                  }
                                ]
                              }
                            ],
                            "availability": {
                              "available": true,
                              "reason": "AVAILABLE"
                            }
                          }
                        ],
                        "modifiers": [
                          {
                            "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                            "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                            "name": "Example name",
                            "isRequired": true,
                            "maxSelections": 0,
                            "options": [
                              {
                                "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                                "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                                "name": "Example name",
                                "priceDelta": 0,
                                "isDefault": true,
                                "allergenCodes": [
                                  "GLUTEN"
                                ]
                              }
                            ]
                          }
                        ],
                        "availability": {
                          "available": true,
                          "reason": "AVAILABLE"
                        }
                      }
                    ],
                    "modifierGroup": null
                  }
                ],
                "courses": [
                  {
                    "groupId": "example",
                    "name": "Example name",
                    "sequence": 0
                  }
                ],
                "measuredPolicy": null,
                "preorderPolicy": null
              },
              "availability": {
                "available": true,
                "reason": "AVAILABLE"
              },
              "sortOrder": 1
            }
          ]
        }
      ]
    }
  },
  "description": "Строго привязанное опубликованное гостевое меню одного активного заведения и точного канала продаж.",
  "required": [
    "venueId",
    "salesChannelId",
    "menuVersionId",
    "versionNumber",
    "graphHash",
    "currency",
    "timeZone",
    "publishedAt",
    "servedAt",
    "categories"
  ],
  "example": {
    "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
    "salesChannelId": "ff0fa725-ba44-4e7a-82bb-a15650e0a0cc",
    "menuVersionId": "490ccfcb-caa6-472e-836a-a8416e8cee92",
    "versionNumber": 1,
    "graphHash": "menu-cost-v1.graph.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "currency": "GEL",
    "timeZone": "Asia/Tbilisi",
    "publishedAt": "2026-01-15T12:00:00.000Z",
    "servedAt": "2026-01-15T12:00:00.000Z",
    "categories": [
      {
        "id": "a5038d8c-af77-49d1-8b1c-095a41971c2c",
        "menuCategoryId": null,
        "name": "Example name",
        "sortOrder": 1,
        "items": [
          {
            "id": "1f29df05-cd6f-4563-8c71-ad1b872b9447",
            "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
            "name": "Example name",
            "description": null,
            "price": 0,
            "allergenCodes": [
              "GLUTEN"
            ],
            "isAlcoholic": true,
            "modifiers": [
              {
                "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                "name": "Example name",
                "isRequired": true,
                "maxSelections": 0,
                "options": [
                  {
                    "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                    "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                    "name": "Example name",
                    "priceDelta": 0,
                    "isDefault": true,
                    "allergenCodes": [
                      "GLUTEN"
                    ]
                  }
                ]
              }
            ],
            "variants": [
              {
                "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
                "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
                "name": "Example name",
                "price": 0,
                "allergenCodes": [
                  "GLUTEN"
                ],
                "isAlcoholic": true,
                "modifiers": [
                  {
                    "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                    "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                    "name": "Example name",
                    "isRequired": true,
                    "maxSelections": 0,
                    "options": [
                      {
                        "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                        "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                        "name": "Example name",
                        "priceDelta": 0,
                        "isDefault": true,
                        "allergenCodes": [
                          "GLUTEN"
                        ]
                      }
                    ]
                  }
                ],
                "availability": {
                  "available": true,
                  "reason": "AVAILABLE"
                }
              }
            ],
            "structure": {
              "executionMode": "DIRECT_ITEM",
              "configuratorMode": "DIRECT_ITEM",
              "pricingBehavior": "BASE_PRICE",
              "sellableVersions": "NONE",
              "groups": [
                {
                  "id": "example-id",
                  "name": "Example name",
                  "sourceType": "CATALOG_ITEMS",
                  "mode": "FIXED_CONTENTS",
                  "minSelections": 0,
                  "maxSelections": 0,
                  "required": true,
                  "choices": [
                    {
                      "id": "example-id",
                      "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
                      "name": "Example name",
                      "quantity": 1,
                      "upcharge": 0,
                      "isDefault": true,
                      "isIncluded": true,
                      "variants": [
                        {
                          "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
                          "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
                          "name": "Example name",
                          "price": 0,
                          "allergenCodes": [
                            "GLUTEN"
                          ],
                          "isAlcoholic": true,
                          "modifiers": [
                            {
                              "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                              "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                              "name": "Example name",
                              "isRequired": true,
                              "maxSelections": 0,
                              "options": [
                                {
                                  "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                                  "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                                  "name": "Example name",
                                  "priceDelta": 0,
                                  "isDefault": true,
                                  "allergenCodes": [
                                    "GLUTEN"
                                  ]
                                }
                              ]
                            }
                          ],
                          "availability": {
                            "available": true,
                            "reason": "AVAILABLE"
                          }
                        }
                      ],
                      "modifiers": [
                        {
                          "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                          "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                          "name": "Example name",
                          "isRequired": true,
                          "maxSelections": 0,
                          "options": [
                            {
                              "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                              "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                              "name": "Example name",
                              "priceDelta": 0,
                              "isDefault": true,
                              "allergenCodes": [
                                "GLUTEN"
                              ]
                            }
                          ]
                        }
                      ],
                      "availability": {
                        "available": true,
                        "reason": "AVAILABLE"
                      }
                    }
                  ],
                  "modifierGroup": null
                }
              ],
              "courses": [
                {
                  "groupId": "example",
                  "name": "Example name",
                  "sequence": 0
                }
              ],
              "measuredPolicy": null,
              "preorderPolicy": null
            },
            "availability": {
              "available": true,
              "reason": "AVAILABLE"
            },
            "sortOrder": 1
          }
        ]
      }
    ]
  }
}
PublicMenuCategoryDto

Категория опубликованного гостевого меню только с типизированными публичными позициями.

idОбязательно

UUID снимка опубликованной категории.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "UUID снимка опубликованной категории.",
  "example": "a5038d8c-af77-49d1-8b1c-095a41971c2c"
}
menuCategoryIdОбязательно

Стабильный UUID категории меню либо null, если у опубликованной категории нет действующего идентификатора каталога.

string · uuid · null
Полное определение
{
  "type": "string",
  "format": "uuid",
  "nullable": true,
  "description": "Стабильный UUID категории меню либо null, если у опубликованной категории нет действующего идентификатора каталога.",
  "example": "cb5f7601-2b73-4705-8ddc-9f32947c3200"
}
nameОбязательно

Опубликованное название категории для гостя.

string
Полное определение
{
  "type": "string",
  "description": "Опубликованное название категории для гостя.",
  "example": "Example name"
}
sortOrderОбязательно

Порядок отображения опубликованной категории.

integer
Полное определение
{
  "type": "integer",
  "description": "Порядок отображения опубликованной категории.",
  "example": 1
}
itemsОбязательно

Типизированные публичные позиции этой опубликованной категории.

array
Полное определение
{
  "maxItems": 500,
  "description": "Типизированные публичные позиции этой опубликованной категории.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/PublicMenuItemDto"
  },
  "example": [
    {
      "id": "1f29df05-cd6f-4563-8c71-ad1b872b9447",
      "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
      "name": "Example name",
      "description": null,
      "price": 0,
      "allergenCodes": [
        "GLUTEN"
      ],
      "isAlcoholic": true,
      "modifiers": [
        {
          "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
          "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
          "name": "Example name",
          "isRequired": true,
          "maxSelections": 0,
          "options": [
            {
              "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
              "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
              "name": "Example name",
              "priceDelta": 0,
              "isDefault": true,
              "allergenCodes": [
                "GLUTEN"
              ]
            }
          ]
        }
      ],
      "variants": [
        {
          "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
          "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
          "name": "Example name",
          "price": 0,
          "allergenCodes": [
            "GLUTEN"
          ],
          "isAlcoholic": true,
          "modifiers": [
            {
              "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
              "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
              "name": "Example name",
              "isRequired": true,
              "maxSelections": 0,
              "options": [
                {
                  "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                  "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                  "name": "Example name",
                  "priceDelta": 0,
                  "isDefault": true,
                  "allergenCodes": [
                    "GLUTEN"
                  ]
                }
              ]
            }
          ],
          "availability": {
            "available": true,
            "reason": "AVAILABLE"
          }
        }
      ],
      "structure": {
        "executionMode": "DIRECT_ITEM",
        "configuratorMode": "DIRECT_ITEM",
        "pricingBehavior": "BASE_PRICE",
        "sellableVersions": "NONE",
        "groups": [
          {
            "id": "example-id",
            "name": "Example name",
            "sourceType": "CATALOG_ITEMS",
            "mode": "FIXED_CONTENTS",
            "minSelections": 0,
            "maxSelections": 0,
            "required": true,
            "choices": [
              {
                "id": "example-id",
                "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
                "name": "Example name",
                "quantity": 1,
                "upcharge": 0,
                "isDefault": true,
                "isIncluded": true,
                "variants": [
                  {
                    "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
                    "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
                    "name": "Example name",
                    "price": 0,
                    "allergenCodes": [
                      "GLUTEN"
                    ],
                    "isAlcoholic": true,
                    "modifiers": [
                      {
                        "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                        "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                        "name": "Example name",
                        "isRequired": true,
                        "maxSelections": 0,
                        "options": [
                          {
                            "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                            "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                            "name": "Example name",
                            "priceDelta": 0,
                            "isDefault": true,
                            "allergenCodes": [
                              "GLUTEN"
                            ]
                          }
                        ]
                      }
                    ],
                    "availability": {
                      "available": true,
                      "reason": "AVAILABLE"
                    }
                  }
                ],
                "modifiers": [
                  {
                    "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                    "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                    "name": "Example name",
                    "isRequired": true,
                    "maxSelections": 0,
                    "options": [
                      {
                        "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                        "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                        "name": "Example name",
                        "priceDelta": 0,
                        "isDefault": true,
                        "allergenCodes": [
                          "GLUTEN"
                        ]
                      }
                    ]
                  }
                ],
                "availability": {
                  "available": true,
                  "reason": "AVAILABLE"
                }
              }
            ],
            "modifierGroup": null
          }
        ],
        "courses": [
          {
            "groupId": "example",
            "name": "Example name",
            "sequence": 0
          }
        ],
        "measuredPolicy": null,
        "preorderPolicy": null
      },
      "availability": {
        "available": true,
        "reason": "AVAILABLE"
      },
      "sortOrder": 1
    }
  ]
}
Полное определение
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "description": "UUID снимка опубликованной категории.",
      "example": "a5038d8c-af77-49d1-8b1c-095a41971c2c"
    },
    "menuCategoryId": {
      "type": "string",
      "format": "uuid",
      "nullable": true,
      "description": "Стабильный UUID категории меню либо null, если у опубликованной категории нет действующего идентификатора каталога.",
      "example": "cb5f7601-2b73-4705-8ddc-9f32947c3200"
    },
    "name": {
      "type": "string",
      "description": "Опубликованное название категории для гостя.",
      "example": "Example name"
    },
    "sortOrder": {
      "type": "integer",
      "description": "Порядок отображения опубликованной категории.",
      "example": 1
    },
    "items": {
      "maxItems": 500,
      "description": "Типизированные публичные позиции этой опубликованной категории.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicMenuItemDto"
      },
      "example": [
        {
          "id": "1f29df05-cd6f-4563-8c71-ad1b872b9447",
          "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
          "name": "Example name",
          "description": null,
          "price": 0,
          "allergenCodes": [
            "GLUTEN"
          ],
          "isAlcoholic": true,
          "modifiers": [
            {
              "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
              "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
              "name": "Example name",
              "isRequired": true,
              "maxSelections": 0,
              "options": [
                {
                  "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                  "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                  "name": "Example name",
                  "priceDelta": 0,
                  "isDefault": true,
                  "allergenCodes": [
                    "GLUTEN"
                  ]
                }
              ]
            }
          ],
          "variants": [
            {
              "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
              "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
              "name": "Example name",
              "price": 0,
              "allergenCodes": [
                "GLUTEN"
              ],
              "isAlcoholic": true,
              "modifiers": [
                {
                  "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                  "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                  "name": "Example name",
                  "isRequired": true,
                  "maxSelections": 0,
                  "options": [
                    {
                      "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                      "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                      "name": "Example name",
                      "priceDelta": 0,
                      "isDefault": true,
                      "allergenCodes": [
                        "GLUTEN"
                      ]
                    }
                  ]
                }
              ],
              "availability": {
                "available": true,
                "reason": "AVAILABLE"
              }
            }
          ],
          "structure": {
            "executionMode": "DIRECT_ITEM",
            "configuratorMode": "DIRECT_ITEM",
            "pricingBehavior": "BASE_PRICE",
            "sellableVersions": "NONE",
            "groups": [
              {
                "id": "example-id",
                "name": "Example name",
                "sourceType": "CATALOG_ITEMS",
                "mode": "FIXED_CONTENTS",
                "minSelections": 0,
                "maxSelections": 0,
                "required": true,
                "choices": [
                  {
                    "id": "example-id",
                    "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
                    "name": "Example name",
                    "quantity": 1,
                    "upcharge": 0,
                    "isDefault": true,
                    "isIncluded": true,
                    "variants": [
                      {
                        "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
                        "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
                        "name": "Example name",
                        "price": 0,
                        "allergenCodes": [
                          "GLUTEN"
                        ],
                        "isAlcoholic": true,
                        "modifiers": [
                          {
                            "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                            "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                            "name": "Example name",
                            "isRequired": true,
                            "maxSelections": 0,
                            "options": [
                              {
                                "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                                "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                                "name": "Example name",
                                "priceDelta": 0,
                                "isDefault": true,
                                "allergenCodes": [
                                  "GLUTEN"
                                ]
                              }
                            ]
                          }
                        ],
                        "availability": {
                          "available": true,
                          "reason": "AVAILABLE"
                        }
                      }
                    ],
                    "modifiers": [
                      {
                        "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                        "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                        "name": "Example name",
                        "isRequired": true,
                        "maxSelections": 0,
                        "options": [
                          {
                            "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                            "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                            "name": "Example name",
                            "priceDelta": 0,
                            "isDefault": true,
                            "allergenCodes": [
                              "GLUTEN"
                            ]
                          }
                        ]
                      }
                    ],
                    "availability": {
                      "available": true,
                      "reason": "AVAILABLE"
                    }
                  }
                ],
                "modifierGroup": null
              }
            ],
            "courses": [
              {
                "groupId": "example",
                "name": "Example name",
                "sequence": 0
              }
            ],
            "measuredPolicy": null,
            "preorderPolicy": null
          },
          "availability": {
            "available": true,
            "reason": "AVAILABLE"
          },
          "sortOrder": 1
        }
      ]
    }
  },
  "description": "Категория опубликованного гостевого меню только с типизированными публичными позициями.",
  "required": [
    "id",
    "menuCategoryId",
    "name",
    "sortOrder",
    "items"
  ],
  "example": {
    "id": "a5038d8c-af77-49d1-8b1c-095a41971c2c",
    "menuCategoryId": null,
    "name": "Example name",
    "sortOrder": 1,
    "items": [
      {
        "id": "1f29df05-cd6f-4563-8c71-ad1b872b9447",
        "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
        "name": "Example name",
        "description": null,
        "price": 0,
        "allergenCodes": [
          "GLUTEN"
        ],
        "isAlcoholic": true,
        "modifiers": [
          {
            "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
            "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
            "name": "Example name",
            "isRequired": true,
            "maxSelections": 0,
            "options": [
              {
                "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                "name": "Example name",
                "priceDelta": 0,
                "isDefault": true,
                "allergenCodes": [
                  "GLUTEN"
                ]
              }
            ]
          }
        ],
        "variants": [
          {
            "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
            "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
            "name": "Example name",
            "price": 0,
            "allergenCodes": [
              "GLUTEN"
            ],
            "isAlcoholic": true,
            "modifiers": [
              {
                "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                "name": "Example name",
                "isRequired": true,
                "maxSelections": 0,
                "options": [
                  {
                    "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                    "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                    "name": "Example name",
                    "priceDelta": 0,
                    "isDefault": true,
                    "allergenCodes": [
                      "GLUTEN"
                    ]
                  }
                ]
              }
            ],
            "availability": {
              "available": true,
              "reason": "AVAILABLE"
            }
          }
        ],
        "structure": {
          "executionMode": "DIRECT_ITEM",
          "configuratorMode": "DIRECT_ITEM",
          "pricingBehavior": "BASE_PRICE",
          "sellableVersions": "NONE",
          "groups": [
            {
              "id": "example-id",
              "name": "Example name",
              "sourceType": "CATALOG_ITEMS",
              "mode": "FIXED_CONTENTS",
              "minSelections": 0,
              "maxSelections": 0,
              "required": true,
              "choices": [
                {
                  "id": "example-id",
                  "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
                  "name": "Example name",
                  "quantity": 1,
                  "upcharge": 0,
                  "isDefault": true,
                  "isIncluded": true,
                  "variants": [
                    {
                      "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
                      "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
                      "name": "Example name",
                      "price": 0,
                      "allergenCodes": [
                        "GLUTEN"
                      ],
                      "isAlcoholic": true,
                      "modifiers": [
                        {
                          "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                          "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                          "name": "Example name",
                          "isRequired": true,
                          "maxSelections": 0,
                          "options": [
                            {
                              "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                              "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                              "name": "Example name",
                              "priceDelta": 0,
                              "isDefault": true,
                              "allergenCodes": [
                                "GLUTEN"
                              ]
                            }
                          ]
                        }
                      ],
                      "availability": {
                        "available": true,
                        "reason": "AVAILABLE"
                      }
                    }
                  ],
                  "modifiers": [
                    {
                      "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                      "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                      "name": "Example name",
                      "isRequired": true,
                      "maxSelections": 0,
                      "options": [
                        {
                          "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                          "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                          "name": "Example name",
                          "priceDelta": 0,
                          "isDefault": true,
                          "allergenCodes": [
                            "GLUTEN"
                          ]
                        }
                      ]
                    }
                  ],
                  "availability": {
                    "available": true,
                    "reason": "AVAILABLE"
                  }
                }
              ],
              "modifierGroup": null
            }
          ],
          "courses": [
            {
              "groupId": "example",
              "name": "Example name",
              "sequence": 0
            }
          ],
          "measuredPolicy": null,
          "preorderPolicy": null
        },
        "availability": {
          "available": true,
          "reason": "AVAILABLE"
        },
        "sortOrder": 1
      }
    ]
  }
}
PublicMenuItemDto

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

idОбязательно

UUID снимка опубликованной позиции меню.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "UUID снимка опубликованной позиции меню.",
  "example": "1f29df05-cd6f-4563-8c71-ad1b872b9447"
}
menuItemIdОбязательно

Стабильный UUID позиции меню, принимаемый гостевым оформлением заказа Hallify.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "Стабильный UUID позиции меню, принимаемый гостевым оформлением заказа Hallify.",
  "example": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd"
}
nameОбязательно

Действующее опубликованное публичное название позиции.

string
Полное определение
{
  "type": "string",
  "description": "Действующее опубликованное публичное название позиции.",
  "example": "Example name"
}
descriptionОбязательно

Действующее опубликованное публичное описание позиции. null означает отсутствие описания.

string · null
Полное определение
{
  "type": "string",
  "nullable": true,
  "description": "Действующее опубликованное публичное описание позиции. null означает отсутствие описания.",
  "example": "Synthetic example"
}
priceОбязательно

Опубликованная цена продажи позиции в валюте меню до настройки гостем и проверки ценового предложения.

number
Полное определение
{
  "type": "number",
  "minimum": 0,
  "maximum": 9999999999.99,
  "description": "Опубликованная цена продажи позиции в валюте меню до настройки гостем и проверки ценового предложения.",
  "example": 0
}
allergenCodesОбязательно

Опубликованные коды аллергенов позиции.

array
Полное определение
{
  "type": "array",
  "description": "Опубликованные коды аллергенов позиции.",
  "items": {
    "type": "string",
    "enum": [
      "GLUTEN",
      "CRUSTACEANS",
      "EGGS",
      "FISH",
      "PEANUTS",
      "SOY",
      "MILK",
      "TREE_NUTS",
      "CELERY",
      "MUSTARD",
      "SESAME",
      "SULPHITES",
      "LUPIN",
      "MOLLUSCS"
    ],
    "example": "GLUTEN"
  },
  "example": [
    "GLUTEN"
  ]
}
isAlcoholicОбязательно

Содержит ли опубликованная позиция алкоголь.

boolean
Полное определение
{
  "type": "boolean",
  "description": "Содержит ли опубликованная позиция алкоголь.",
  "example": true
}
modifiersОбязательно

Действующие опубликованные группы модификаторов базовой позиции.

array
Полное определение
{
  "maxItems": 10000,
  "description": "Действующие опубликованные группы модификаторов базовой позиции.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/PublicMenuModifierGroupDto"
  },
  "example": [
    {
      "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
      "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
      "name": "Example name",
      "isRequired": true,
      "maxSelections": 0,
      "options": [
        {
          "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
          "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
          "name": "Example name",
          "priceDelta": 0,
          "isDefault": true,
          "allergenCodes": [
            "GLUTEN"
          ]
        }
      ]
    }
  ]
}
variantsОбязательно

Опубликованные продаваемые версии, принимаемые каноническим механизмом обработки позиции.

array
Полное определение
{
  "maxItems": 5000,
  "description": "Опубликованные продаваемые версии, принимаемые каноническим механизмом обработки позиции.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/PublicMenuVariantDto"
  },
  "example": [
    {
      "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
      "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
      "name": "Example name",
      "price": 0,
      "allergenCodes": [
        "GLUTEN"
      ],
      "isAlcoholic": true,
      "modifiers": [
        {
          "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
          "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
          "name": "Example name",
          "isRequired": true,
          "maxSelections": 0,
          "options": [
            {
              "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
              "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
              "name": "Example name",
              "priceDelta": 0,
              "isDefault": true,
              "allergenCodes": [
                "GLUTEN"
              ]
            }
          ]
        }
      ],
      "availability": {
        "available": true,
        "reason": "AVAILABLE"
      }
    }
  ]
}
structureОбязательно

Типизированная публичная конфигурация без произвольных графов политик и внутренних данных сотрудников.

allOf
Полное определение
{
  "description": "Типизированная публичная конфигурация без произвольных графов политик и внутренних данных сотрудников.",
  "allOf": [
    {
      "$ref": "#/components/schemas/PublicMenuConfiguratorDto"
    }
  ],
  "example": {
    "executionMode": "DIRECT_ITEM",
    "configuratorMode": "DIRECT_ITEM",
    "pricingBehavior": "BASE_PRICE",
    "sellableVersions": "NONE",
    "groups": [
      {
        "id": "example-id",
        "name": "Example name",
        "sourceType": "CATALOG_ITEMS",
        "mode": "FIXED_CONTENTS",
        "minSelections": 0,
        "maxSelections": 0,
        "required": true,
        "choices": [
          {
            "id": "example-id",
            "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
            "name": "Example name",
            "quantity": 1,
            "upcharge": 0,
            "isDefault": true,
            "isIncluded": true,
            "variants": [
              {
                "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
                "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
                "name": "Example name",
                "price": 0,
                "allergenCodes": [
                  "GLUTEN"
                ],
                "isAlcoholic": true,
                "modifiers": [
                  {
                    "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                    "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                    "name": "Example name",
                    "isRequired": true,
                    "maxSelections": 0,
                    "options": [
                      {
                        "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                        "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                        "name": "Example name",
                        "priceDelta": 0,
                        "isDefault": true,
                        "allergenCodes": [
                          "GLUTEN"
                        ]
                      }
                    ]
                  }
                ],
                "availability": {
                  "available": true,
                  "reason": "AVAILABLE"
                }
              }
            ],
            "modifiers": [
              {
                "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                "name": "Example name",
                "isRequired": true,
                "maxSelections": 0,
                "options": [
                  {
                    "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                    "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                    "name": "Example name",
                    "priceDelta": 0,
                    "isDefault": true,
                    "allergenCodes": [
                      "GLUTEN"
                    ]
                  }
                ]
              }
            ],
            "availability": {
              "available": true,
              "reason": "AVAILABLE"
            }
          }
        ],
        "modifierGroup": null
      }
    ],
    "courses": [
      {
        "groupId": "example",
        "name": "Example name",
        "sequence": 0
      }
    ],
    "measuredPolicy": null,
    "preorderPolicy": null
  }
}
availabilityОбязательно

Текущая опубликованная доступность. При заказе дополнительно проверяются собственные правила обслуживания и времени.

allOf
Полное определение
{
  "description": "Текущая опубликованная доступность. При заказе дополнительно проверяются собственные правила обслуживания и времени.",
  "allOf": [
    {
      "$ref": "#/components/schemas/PublicMenuAvailabilityDto"
    }
  ],
  "example": {
    "available": true,
    "reason": "AVAILABLE"
  }
}
sortOrderОбязательно

Опубликованный порядок отображения в категории.

integer
Полное определение
{
  "type": "integer",
  "description": "Опубликованный порядок отображения в категории.",
  "example": 1
}
Полное определение
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "description": "UUID снимка опубликованной позиции меню.",
      "example": "1f29df05-cd6f-4563-8c71-ad1b872b9447"
    },
    "menuItemId": {
      "type": "string",
      "format": "uuid",
      "description": "Стабильный UUID позиции меню, принимаемый гостевым оформлением заказа Hallify.",
      "example": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd"
    },
    "name": {
      "type": "string",
      "description": "Действующее опубликованное публичное название позиции.",
      "example": "Example name"
    },
    "description": {
      "type": "string",
      "nullable": true,
      "description": "Действующее опубликованное публичное описание позиции. null означает отсутствие описания.",
      "example": "Synthetic example"
    },
    "price": {
      "type": "number",
      "minimum": 0,
      "maximum": 9999999999.99,
      "description": "Опубликованная цена продажи позиции в валюте меню до настройки гостем и проверки ценового предложения.",
      "example": 0
    },
    "allergenCodes": {
      "type": "array",
      "description": "Опубликованные коды аллергенов позиции.",
      "items": {
        "type": "string",
        "enum": [
          "GLUTEN",
          "CRUSTACEANS",
          "EGGS",
          "FISH",
          "PEANUTS",
          "SOY",
          "MILK",
          "TREE_NUTS",
          "CELERY",
          "MUSTARD",
          "SESAME",
          "SULPHITES",
          "LUPIN",
          "MOLLUSCS"
        ],
        "example": "GLUTEN"
      },
      "example": [
        "GLUTEN"
      ]
    },
    "isAlcoholic": {
      "type": "boolean",
      "description": "Содержит ли опубликованная позиция алкоголь.",
      "example": true
    },
    "modifiers": {
      "maxItems": 10000,
      "description": "Действующие опубликованные группы модификаторов базовой позиции.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicMenuModifierGroupDto"
      },
      "example": [
        {
          "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
          "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
          "name": "Example name",
          "isRequired": true,
          "maxSelections": 0,
          "options": [
            {
              "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
              "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
              "name": "Example name",
              "priceDelta": 0,
              "isDefault": true,
              "allergenCodes": [
                "GLUTEN"
              ]
            }
          ]
        }
      ]
    },
    "variants": {
      "maxItems": 5000,
      "description": "Опубликованные продаваемые версии, принимаемые каноническим механизмом обработки позиции.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicMenuVariantDto"
      },
      "example": [
        {
          "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
          "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
          "name": "Example name",
          "price": 0,
          "allergenCodes": [
            "GLUTEN"
          ],
          "isAlcoholic": true,
          "modifiers": [
            {
              "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
              "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
              "name": "Example name",
              "isRequired": true,
              "maxSelections": 0,
              "options": [
                {
                  "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                  "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                  "name": "Example name",
                  "priceDelta": 0,
                  "isDefault": true,
                  "allergenCodes": [
                    "GLUTEN"
                  ]
                }
              ]
            }
          ],
          "availability": {
            "available": true,
            "reason": "AVAILABLE"
          }
        }
      ]
    },
    "structure": {
      "description": "Типизированная публичная конфигурация без произвольных графов политик и внутренних данных сотрудников.",
      "allOf": [
        {
          "$ref": "#/components/schemas/PublicMenuConfiguratorDto"
        }
      ],
      "example": {
        "executionMode": "DIRECT_ITEM",
        "configuratorMode": "DIRECT_ITEM",
        "pricingBehavior": "BASE_PRICE",
        "sellableVersions": "NONE",
        "groups": [
          {
            "id": "example-id",
            "name": "Example name",
            "sourceType": "CATALOG_ITEMS",
            "mode": "FIXED_CONTENTS",
            "minSelections": 0,
            "maxSelections": 0,
            "required": true,
            "choices": [
              {
                "id": "example-id",
                "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
                "name": "Example name",
                "quantity": 1,
                "upcharge": 0,
                "isDefault": true,
                "isIncluded": true,
                "variants": [
                  {
                    "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
                    "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
                    "name": "Example name",
                    "price": 0,
                    "allergenCodes": [
                      "GLUTEN"
                    ],
                    "isAlcoholic": true,
                    "modifiers": [
                      {
                        "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                        "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                        "name": "Example name",
                        "isRequired": true,
                        "maxSelections": 0,
                        "options": [
                          {
                            "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                            "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                            "name": "Example name",
                            "priceDelta": 0,
                            "isDefault": true,
                            "allergenCodes": [
                              "GLUTEN"
                            ]
                          }
                        ]
                      }
                    ],
                    "availability": {
                      "available": true,
                      "reason": "AVAILABLE"
                    }
                  }
                ],
                "modifiers": [
                  {
                    "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                    "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                    "name": "Example name",
                    "isRequired": true,
                    "maxSelections": 0,
                    "options": [
                      {
                        "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                        "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                        "name": "Example name",
                        "priceDelta": 0,
                        "isDefault": true,
                        "allergenCodes": [
                          "GLUTEN"
                        ]
                      }
                    ]
                  }
                ],
                "availability": {
                  "available": true,
                  "reason": "AVAILABLE"
                }
              }
            ],
            "modifierGroup": null
          }
        ],
        "courses": [
          {
            "groupId": "example",
            "name": "Example name",
            "sequence": 0
          }
        ],
        "measuredPolicy": null,
        "preorderPolicy": null
      }
    },
    "availability": {
      "description": "Текущая опубликованная доступность. При заказе дополнительно проверяются собственные правила обслуживания и времени.",
      "allOf": [
        {
          "$ref": "#/components/schemas/PublicMenuAvailabilityDto"
        }
      ],
      "example": {
        "available": true,
        "reason": "AVAILABLE"
      }
    },
    "sortOrder": {
      "type": "integer",
      "description": "Опубликованный порядок отображения в категории.",
      "example": 1
    }
  },
  "description": "Опубликованная гостевая позиция с явной конфигурацией и текущей доступностью без раскрытия себестоимости.",
  "required": [
    "id",
    "menuItemId",
    "name",
    "description",
    "price",
    "allergenCodes",
    "isAlcoholic",
    "modifiers",
    "variants",
    "structure",
    "availability",
    "sortOrder"
  ],
  "example": {
    "id": "1f29df05-cd6f-4563-8c71-ad1b872b9447",
    "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
    "name": "Example name",
    "description": null,
    "price": 0,
    "allergenCodes": [
      "GLUTEN"
    ],
    "isAlcoholic": true,
    "modifiers": [
      {
        "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
        "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
        "name": "Example name",
        "isRequired": true,
        "maxSelections": 0,
        "options": [
          {
            "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
            "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
            "name": "Example name",
            "priceDelta": 0,
            "isDefault": true,
            "allergenCodes": [
              "GLUTEN"
            ]
          }
        ]
      }
    ],
    "variants": [
      {
        "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
        "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
        "name": "Example name",
        "price": 0,
        "allergenCodes": [
          "GLUTEN"
        ],
        "isAlcoholic": true,
        "modifiers": [
          {
            "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
            "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
            "name": "Example name",
            "isRequired": true,
            "maxSelections": 0,
            "options": [
              {
                "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                "name": "Example name",
                "priceDelta": 0,
                "isDefault": true,
                "allergenCodes": [
                  "GLUTEN"
                ]
              }
            ]
          }
        ],
        "availability": {
          "available": true,
          "reason": "AVAILABLE"
        }
      }
    ],
    "structure": {
      "executionMode": "DIRECT_ITEM",
      "configuratorMode": "DIRECT_ITEM",
      "pricingBehavior": "BASE_PRICE",
      "sellableVersions": "NONE",
      "groups": [
        {
          "id": "example-id",
          "name": "Example name",
          "sourceType": "CATALOG_ITEMS",
          "mode": "FIXED_CONTENTS",
          "minSelections": 0,
          "maxSelections": 0,
          "required": true,
          "choices": [
            {
              "id": "example-id",
              "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
              "name": "Example name",
              "quantity": 1,
              "upcharge": 0,
              "isDefault": true,
              "isIncluded": true,
              "variants": [
                {
                  "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
                  "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
                  "name": "Example name",
                  "price": 0,
                  "allergenCodes": [
                    "GLUTEN"
                  ],
                  "isAlcoholic": true,
                  "modifiers": [
                    {
                      "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                      "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                      "name": "Example name",
                      "isRequired": true,
                      "maxSelections": 0,
                      "options": [
                        {
                          "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                          "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                          "name": "Example name",
                          "priceDelta": 0,
                          "isDefault": true,
                          "allergenCodes": [
                            "GLUTEN"
                          ]
                        }
                      ]
                    }
                  ],
                  "availability": {
                    "available": true,
                    "reason": "AVAILABLE"
                  }
                }
              ],
              "modifiers": [
                {
                  "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                  "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                  "name": "Example name",
                  "isRequired": true,
                  "maxSelections": 0,
                  "options": [
                    {
                      "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                      "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                      "name": "Example name",
                      "priceDelta": 0,
                      "isDefault": true,
                      "allergenCodes": [
                        "GLUTEN"
                      ]
                    }
                  ]
                }
              ],
              "availability": {
                "available": true,
                "reason": "AVAILABLE"
              }
            }
          ],
          "modifierGroup": null
        }
      ],
      "courses": [
        {
          "groupId": "example",
          "name": "Example name",
          "sequence": 0
        }
      ],
      "measuredPolicy": null,
      "preorderPolicy": null
    },
    "availability": {
      "available": true,
      "reason": "AVAILABLE"
    },
    "sortOrder": 1
  }
}
PublicMenuModifierGroupDto

Действующая опубликованная группа модификаторов и доступные гостю варианты.

idОбязательно

UUID снимка опубликованной группы модификаторов.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "UUID снимка опубликованной группы модификаторов.",
  "example": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d"
}
groupIdОбязательно

Стабильный UUID группы модификаторов.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "Стабильный UUID группы модификаторов.",
  "example": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb"
}
nameОбязательно

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

string
Полное определение
{
  "type": "string",
  "description": "Опубликованное название группы модификаторов для гостя.",
  "example": "Example name"
}
isRequiredОбязательно

Требует ли действующее опубликованное назначение выбора.

boolean
Полное определение
{
  "type": "boolean",
  "description": "Требует ли действующее опубликованное назначение выбора.",
  "example": true
}
maxSelectionsОбязательно

Максимальное число вариантов, принимаемое действующим опубликованным назначением.

integer
Полное определение
{
  "type": "integer",
  "minimum": 0,
  "description": "Максимальное число вариантов, принимаемое действующим опубликованным назначением.",
  "example": 0
}
optionsОбязательно

Доступные сейчас опубликованные варианты в настроенном порядке.

array
Полное определение
{
  "maxItems": 20000,
  "description": "Доступные сейчас опубликованные варианты в настроенном порядке.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/PublicMenuModifierOptionDto"
  },
  "example": [
    {
      "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
      "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
      "name": "Example name",
      "priceDelta": 0,
      "isDefault": true,
      "allergenCodes": [
        "GLUTEN"
      ]
    }
  ]
}
Полное определение
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "description": "UUID снимка опубликованной группы модификаторов.",
      "example": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d"
    },
    "groupId": {
      "type": "string",
      "format": "uuid",
      "description": "Стабильный UUID группы модификаторов.",
      "example": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb"
    },
    "name": {
      "type": "string",
      "description": "Опубликованное название группы модификаторов для гостя.",
      "example": "Example name"
    },
    "isRequired": {
      "type": "boolean",
      "description": "Требует ли действующее опубликованное назначение выбора.",
      "example": true
    },
    "maxSelections": {
      "type": "integer",
      "minimum": 0,
      "description": "Максимальное число вариантов, принимаемое действующим опубликованным назначением.",
      "example": 0
    },
    "options": {
      "maxItems": 20000,
      "description": "Доступные сейчас опубликованные варианты в настроенном порядке.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicMenuModifierOptionDto"
      },
      "example": [
        {
          "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
          "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
          "name": "Example name",
          "priceDelta": 0,
          "isDefault": true,
          "allergenCodes": [
            "GLUTEN"
          ]
        }
      ]
    }
  },
  "description": "Действующая опубликованная группа модификаторов и доступные гостю варианты.",
  "required": [
    "id",
    "groupId",
    "name",
    "isRequired",
    "maxSelections",
    "options"
  ],
  "example": {
    "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
    "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
    "name": "Example name",
    "isRequired": true,
    "maxSelections": 0,
    "options": [
      {
        "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
        "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
        "name": "Example name",
        "priceDelta": 0,
        "isDefault": true,
        "allergenCodes": [
          "GLUTEN"
        ]
      }
    ]
  }
}
PublicMenuModifierOptionDto

Опубликованный вариант модификатора с изменением цены и сведениями об аллергенах для гостя.

idОбязательно

UUID снимка опубликованного варианта модификатора.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "UUID снимка опубликованного варианта модификатора.",
  "example": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126"
}
modifierOptionIdОбязательно

Стабильный UUID варианта модификатора для гостевого выбора.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "Стабильный UUID варианта модификатора для гостевого выбора.",
  "example": "2375c3d7-0141-4f9a-896c-d07acfb6af1b"
}
nameОбязательно

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

string
Полное определение
{
  "type": "string",
  "description": "Опубликованное название варианта модификатора для гостя.",
  "example": "Example name"
}
priceDeltaОбязательно

Опубликованное изменение цены продажи в валюте меню в существующем числовом формате API меню.

number
Полное определение
{
  "type": "number",
  "description": "Опубликованное изменение цены продажи в валюте меню в существующем числовом формате API меню.",
  "example": 0
}
isDefaultОбязательно

Выбран ли опубликованный вариант модификатора по умолчанию.

boolean
Полное определение
{
  "type": "boolean",
  "description": "Выбран ли опубликованный вариант модификатора по умолчанию.",
  "example": true
}
allergenCodesОбязательно

Опубликованные коды аллергенов варианта модификатора.

array
Полное определение
{
  "type": "array",
  "description": "Опубликованные коды аллергенов варианта модификатора.",
  "items": {
    "type": "string",
    "enum": [
      "GLUTEN",
      "CRUSTACEANS",
      "EGGS",
      "FISH",
      "PEANUTS",
      "SOY",
      "MILK",
      "TREE_NUTS",
      "CELERY",
      "MUSTARD",
      "SESAME",
      "SULPHITES",
      "LUPIN",
      "MOLLUSCS"
    ],
    "example": "GLUTEN"
  },
  "example": [
    "GLUTEN"
  ]
}
Полное определение
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "description": "UUID снимка опубликованного варианта модификатора.",
      "example": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126"
    },
    "modifierOptionId": {
      "type": "string",
      "format": "uuid",
      "description": "Стабильный UUID варианта модификатора для гостевого выбора.",
      "example": "2375c3d7-0141-4f9a-896c-d07acfb6af1b"
    },
    "name": {
      "type": "string",
      "description": "Опубликованное название варианта модификатора для гостя.",
      "example": "Example name"
    },
    "priceDelta": {
      "type": "number",
      "description": "Опубликованное изменение цены продажи в валюте меню в существующем числовом формате API меню.",
      "example": 0
    },
    "isDefault": {
      "type": "boolean",
      "description": "Выбран ли опубликованный вариант модификатора по умолчанию.",
      "example": true
    },
    "allergenCodes": {
      "type": "array",
      "description": "Опубликованные коды аллергенов варианта модификатора.",
      "items": {
        "type": "string",
        "enum": [
          "GLUTEN",
          "CRUSTACEANS",
          "EGGS",
          "FISH",
          "PEANUTS",
          "SOY",
          "MILK",
          "TREE_NUTS",
          "CELERY",
          "MUSTARD",
          "SESAME",
          "SULPHITES",
          "LUPIN",
          "MOLLUSCS"
        ],
        "example": "GLUTEN"
      },
      "example": [
        "GLUTEN"
      ]
    }
  },
  "description": "Опубликованный вариант модификатора с изменением цены и сведениями об аллергенах для гостя.",
  "required": [
    "id",
    "modifierOptionId",
    "name",
    "priceDelta",
    "isDefault",
    "allergenCodes"
  ],
  "example": {
    "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
    "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
    "name": "Example name",
    "priceDelta": 0,
    "isDefault": true,
    "allergenCodes": [
      "GLUTEN"
    ]
  }
}
PublicMenuVariantDto

Опубликованная продаваемая версия с действующей ценой и назначениями модификаторов.

idОбязательно

UUID снимка опубликованной продаваемой версии.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "UUID снимка опубликованной продаваемой версии.",
  "example": "28f3e585-3f5c-438c-8645-68ea6c44e293"
}
menuVariantIdОбязательно

Стабильный UUID варианта меню для гостевого выбора.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "Стабильный UUID варианта меню для гостевого выбора.",
  "example": "94389946-e5d8-4fba-8358-e3a9c8a04b11"
}
nameОбязательно

Опубликованное название продаваемой версии для гостя.

string
Полное определение
{
  "type": "string",
  "description": "Опубликованное название продаваемой версии для гостя.",
  "example": "Example name"
}
priceОбязательно

Действующая опубликованная цена продажи в валюте меню без себестоимости и маржи.

number
Полное определение
{
  "type": "number",
  "minimum": 0,
  "maximum": 9999999999.99,
  "description": "Действующая опубликованная цена продажи в валюте меню без себестоимости и маржи.",
  "example": 0
}
allergenCodesОбязательно

Опубликованные коды аллергенов этой продаваемой версии.

array
Полное определение
{
  "type": "array",
  "description": "Опубликованные коды аллергенов этой продаваемой версии.",
  "items": {
    "type": "string",
    "enum": [
      "GLUTEN",
      "CRUSTACEANS",
      "EGGS",
      "FISH",
      "PEANUTS",
      "SOY",
      "MILK",
      "TREE_NUTS",
      "CELERY",
      "MUSTARD",
      "SESAME",
      "SULPHITES",
      "LUPIN",
      "MOLLUSCS"
    ],
    "example": "GLUTEN"
  },
  "example": [
    "GLUTEN"
  ]
}
isAlcoholicОбязательно

Содержит ли опубликованная продаваемая версия алкоголь.

boolean
Полное определение
{
  "type": "boolean",
  "description": "Содержит ли опубликованная продаваемая версия алкоголь.",
  "example": true
}
modifiersОбязательно

Действующие назначения модификаторов базовой позиции и варианта в опубликованном порядке.

array
Полное определение
{
  "maxItems": 10000,
  "description": "Действующие назначения модификаторов базовой позиции и варианта в опубликованном порядке.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/PublicMenuModifierGroupDto"
  },
  "example": [
    {
      "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
      "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
      "name": "Example name",
      "isRequired": true,
      "maxSelections": 0,
      "options": [
        {
          "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
          "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
          "name": "Example name",
          "priceDelta": 0,
          "isDefault": true,
          "allergenCodes": [
            "GLUTEN"
          ]
        }
      ]
    }
  ]
}
availabilityОбязательно

Текущая публичная доступность этой продаваемой версии.

allOf
Полное определение
{
  "description": "Текущая публичная доступность этой продаваемой версии.",
  "allOf": [
    {
      "$ref": "#/components/schemas/PublicMenuAvailabilityDto"
    }
  ],
  "example": {
    "available": true,
    "reason": "AVAILABLE"
  }
}
Полное определение
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "description": "UUID снимка опубликованной продаваемой версии.",
      "example": "28f3e585-3f5c-438c-8645-68ea6c44e293"
    },
    "menuVariantId": {
      "type": "string",
      "format": "uuid",
      "description": "Стабильный UUID варианта меню для гостевого выбора.",
      "example": "94389946-e5d8-4fba-8358-e3a9c8a04b11"
    },
    "name": {
      "type": "string",
      "description": "Опубликованное название продаваемой версии для гостя.",
      "example": "Example name"
    },
    "price": {
      "type": "number",
      "minimum": 0,
      "maximum": 9999999999.99,
      "description": "Действующая опубликованная цена продажи в валюте меню без себестоимости и маржи.",
      "example": 0
    },
    "allergenCodes": {
      "type": "array",
      "description": "Опубликованные коды аллергенов этой продаваемой версии.",
      "items": {
        "type": "string",
        "enum": [
          "GLUTEN",
          "CRUSTACEANS",
          "EGGS",
          "FISH",
          "PEANUTS",
          "SOY",
          "MILK",
          "TREE_NUTS",
          "CELERY",
          "MUSTARD",
          "SESAME",
          "SULPHITES",
          "LUPIN",
          "MOLLUSCS"
        ],
        "example": "GLUTEN"
      },
      "example": [
        "GLUTEN"
      ]
    },
    "isAlcoholic": {
      "type": "boolean",
      "description": "Содержит ли опубликованная продаваемая версия алкоголь.",
      "example": true
    },
    "modifiers": {
      "maxItems": 10000,
      "description": "Действующие назначения модификаторов базовой позиции и варианта в опубликованном порядке.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicMenuModifierGroupDto"
      },
      "example": [
        {
          "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
          "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
          "name": "Example name",
          "isRequired": true,
          "maxSelections": 0,
          "options": [
            {
              "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
              "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
              "name": "Example name",
              "priceDelta": 0,
              "isDefault": true,
              "allergenCodes": [
                "GLUTEN"
              ]
            }
          ]
        }
      ]
    },
    "availability": {
      "description": "Текущая публичная доступность этой продаваемой версии.",
      "allOf": [
        {
          "$ref": "#/components/schemas/PublicMenuAvailabilityDto"
        }
      ],
      "example": {
        "available": true,
        "reason": "AVAILABLE"
      }
    }
  },
  "description": "Опубликованная продаваемая версия с действующей ценой и назначениями модификаторов.",
  "required": [
    "id",
    "menuVariantId",
    "name",
    "price",
    "allergenCodes",
    "isAlcoholic",
    "modifiers",
    "availability"
  ],
  "example": {
    "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
    "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
    "name": "Example name",
    "price": 0,
    "allergenCodes": [
      "GLUTEN"
    ],
    "isAlcoholic": true,
    "modifiers": [
      {
        "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
        "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
        "name": "Example name",
        "isRequired": true,
        "maxSelections": 0,
        "options": [
          {
            "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
            "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
            "name": "Example name",
            "priceDelta": 0,
            "isDefault": true,
            "allergenCodes": [
              "GLUTEN"
            ]
          }
        ]
      }
    ],
    "availability": {
      "available": true,
      "reason": "AVAILABLE"
    }
  }
}
PublicMenuAvailabilityDto

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

availableОбязательно

Доступен ли сейчас опубликованный вариант гостям.

boolean
Полное определение
{
  "type": "boolean",
  "description": "Доступен ли сейчас опубликованный вариант гостям.",
  "example": true
}
reasonОбязательно

Публичная причина текущего решения о доступности.

string
Полное определение
{
  "type": "string",
  "enum": [
    "AVAILABLE",
    "PUBLISHED_UNAVAILABLE",
    "STAFF_INPUT_REQUIRED"
  ],
  "description": "Публичная причина текущего решения о доступности.",
  "example": "AVAILABLE"
}
Полное определение
{
  "type": "object",
  "properties": {
    "available": {
      "type": "boolean",
      "description": "Доступен ли сейчас опубликованный вариант гостям.",
      "example": true
    },
    "reason": {
      "type": "string",
      "enum": [
        "AVAILABLE",
        "PUBLISHED_UNAVAILABLE",
        "STAFF_INPUT_REQUIRED"
      ],
      "description": "Публичная причина текущего решения о доступности.",
      "example": "AVAILABLE"
    }
  },
  "description": "Текущая опубликованная доступность для гостей без раскрытия остатков, вместимости или причин сотрудников.",
  "required": [
    "available",
    "reason"
  ],
  "example": {
    "available": true,
    "reason": "AVAILABLE"
  }
}
PublicMenuConfiguratorDto

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

executionModeОбязательно

Опубликованный режим исполнения позиции Hallify.

string
Полное определение
{
  "type": "string",
  "enum": [
    "DIRECT_ITEM",
    "SELLABLE_VERSION",
    "COMPONENT_GROUPS",
    "COURSE_SEQUENCE",
    "GUIDED_STAGES",
    "BUNDLE_SECTIONS",
    "MEASURED_QUANTITY",
    "OPEN_PRICE_ENTRY",
    "PREORDER_PACKAGE",
    "CUSTOM_POLICY"
  ],
  "description": "Опубликованный режим исполнения позиции Hallify.",
  "example": "DIRECT_ITEM"
}
configuratorModeОбязательно

Действующий канонический конфигуратор, включая делегат пользовательской политики.

string
Полное определение
{
  "type": "string",
  "enum": [
    "DIRECT_ITEM",
    "SELLABLE_VERSION",
    "COMPONENT_GROUPS",
    "COURSE_SEQUENCE",
    "GUIDED_STAGES",
    "BUNDLE_SECTIONS",
    "MEASURED_QUANTITY",
    "OPEN_PRICE_ENTRY",
    "PREORDER_PACKAGE",
    "CUSTOM_POLICY"
  ],
  "description": "Действующий канонический конфигуратор, включая делегат пользовательской политики.",
  "example": "DIRECT_ITEM"
}
pricingBehaviorОбязательно

Каноническое опубликованное поведение цены продажи. Окончательные суммы рассчитывает владелец ценового предложения.

string
Полное определение
{
  "type": "string",
  "enum": [
    "BASE_PRICE",
    "FIXED_PRICE",
    "MEASURED",
    "OPEN_PRICE"
  ],
  "description": "Каноническое опубликованное поведение цены продажи. Окончательные суммы рассчитывает владелец ценового предложения.",
  "example": "BASE_PRICE"
}
sellableVersionsОбязательно

Каноническое опубликованное требование выбора продаваемой версии.

string
Полное определение
{
  "type": "string",
  "enum": [
    "NONE",
    "OPTIONAL",
    "REQUIRED"
  ],
  "description": "Каноническое опубликованное требование выбора продаваемой версии.",
  "example": "NONE"
}
groupsОбязательно

Типизированные опубликованные группы гостевого выбора в настроенном порядке.

array
Полное определение
{
  "maxItems": 50,
  "description": "Типизированные опубликованные группы гостевого выбора в настроенном порядке.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/PublicMenuSelectionGroupDto"
  },
  "example": [
    {
      "id": "example-id",
      "name": "Example name",
      "sourceType": "CATALOG_ITEMS",
      "mode": "FIXED_CONTENTS",
      "minSelections": 0,
      "maxSelections": 0,
      "required": true,
      "choices": [
        {
          "id": "example-id",
          "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
          "name": "Example name",
          "quantity": 1,
          "upcharge": 0,
          "isDefault": true,
          "isIncluded": true,
          "variants": [
            {
              "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
              "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
              "name": "Example name",
              "price": 0,
              "allergenCodes": [
                "GLUTEN"
              ],
              "isAlcoholic": true,
              "modifiers": [
                {
                  "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                  "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                  "name": "Example name",
                  "isRequired": true,
                  "maxSelections": 0,
                  "options": [
                    {
                      "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                      "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                      "name": "Example name",
                      "priceDelta": 0,
                      "isDefault": true,
                      "allergenCodes": [
                        "GLUTEN"
                      ]
                    }
                  ]
                }
              ],
              "availability": {
                "available": true,
                "reason": "AVAILABLE"
              }
            }
          ],
          "modifiers": [
            {
              "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
              "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
              "name": "Example name",
              "isRequired": true,
              "maxSelections": 0,
              "options": [
                {
                  "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                  "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                  "name": "Example name",
                  "priceDelta": 0,
                  "isDefault": true,
                  "allergenCodes": [
                    "GLUTEN"
                  ]
                }
              ]
            }
          ],
          "availability": {
            "available": true,
            "reason": "AVAILABLE"
          }
        }
      ],
      "modifierGroup": null
    }
  ]
}
coursesОбязательно

Названия курсов и их последовательность для гостя. Пустой список для позиции без курсов.

array
Полное определение
{
  "maxItems": 50,
  "description": "Названия курсов и их последовательность для гостя. Пустой список для позиции без курсов.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/PublicMenuCourseDto"
  },
  "example": [
    {
      "groupId": "example",
      "name": "Example name",
      "sequence": 0
    }
  ]
}
measuredPolicyОбязательно

Опубликованная политика измерения либо null для неизмеряемой позиции.

object · null
Полное определение
{
  "nullable": true,
  "description": "Опубликованная политика измерения либо null для неизмеряемой позиции.",
  "type": "object",
  "properties": {
    "measurementType": {
      "type": "string",
      "enum": [
        "WEIGHT",
        "VOLUME"
      ],
      "description": "Опубликованная измеряемая величина.",
      "example": "WEIGHT"
    },
    "unit": {
      "type": "string",
      "enum": [
        "G",
        "KG",
        "OZ",
        "LB",
        "ML",
        "L",
        "FL_OZ"
      ],
      "description": "Опубликованная единица массы или объёма для полей измеряемого количества.",
      "example": "G"
    },
    "priceBasisQuantity": {
      "type": "string",
      "description": "Десятичное количество, к которому применяется опубликованная цена продажи.",
      "example": "1.00"
    },
    "saleIncrement": {
      "type": "string",
      "description": "Десятичный шаг между допустимыми измеряемыми количествами гостя.",
      "example": "example"
    },
    "minimumQuantity": {
      "type": "string",
      "description": "Минимальное допустимое десятичное измеряемое количество.",
      "example": "1.000"
    },
    "maximumQuantity": {
      "type": "string",
      "nullable": true,
      "description": "Максимальное допустимое десятичное измеряемое количество. null означает отсутствие опубликованного максимума.",
      "example": "1.000"
    },
    "defaultQuantity": {
      "type": "string",
      "description": "Опубликованное десятичное измеряемое количество по умолчанию.",
      "example": "1.000"
    }
  },
  "required": [
    "measurementType",
    "unit",
    "priceBasisQuantity",
    "saleIncrement",
    "minimumQuantity",
    "maximumQuantity",
    "defaultQuantity"
  ],
  "example": {
    "measurementType": "WEIGHT",
    "unit": "G",
    "priceBasisQuantity": "1.00",
    "saleIncrement": "example",
    "minimumQuantity": "1.000",
    "maximumQuantity": null,
    "defaultQuantity": "1.000"
  }
}
preorderPolicyОбязательно

Опубликованная политика пакета кейтеринга или предзаказа либо null для других типов позиций.

object · null
Полное определение
{
  "nullable": true,
  "description": "Опубликованная политика пакета кейтеринга или предзаказа либо null для других типов позиций.",
  "type": "object",
  "properties": {
    "pricingMode": {
      "type": "string",
      "enum": [
        "FIXED_PACKAGE",
        "PER_GUEST"
      ],
      "description": "Применяется ли опубликованная цена пакета к пакету целиком или к одному гостю.",
      "example": "FIXED_PACKAGE"
    },
    "allowedServiceModes": {
      "type": "array",
      "description": "Способы исполнения, принимаемые опубликованным пакетом.",
      "items": {
        "type": "string",
        "enum": [
          "DINE_IN",
          "PICKUP",
          "DELIVERY",
          "CATERING"
        ],
        "example": "DINE_IN"
      },
      "example": [
        "DINE_IN"
      ]
    },
    "leadTimeHours": {
      "type": "integer",
      "minimum": 1,
      "description": "Опубликованное минимальное время до исполнения в часах.",
      "example": 1
    },
    "maximumAdvanceDays": {
      "type": "integer",
      "minimum": 1,
      "description": "Опубликованное максимальное число дней до исполнения.",
      "example": 1
    },
    "cutoffTime": {
      "type": "string",
      "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      "description": "Опубликованное локальное предельное время приёма в часовом поясе заведения.",
      "example": "12:30"
    },
    "minGuestCount": {
      "type": "integer",
      "minimum": 1,
      "description": "Минимальное число гостей, принимаемое пакетом.",
      "example": 1
    },
    "maxGuestCount": {
      "type": "integer",
      "minimum": 1,
      "description": "Максимальное число гостей, принимаемое пакетом.",
      "example": 1
    },
    "guestCountStep": {
      "type": "integer",
      "minimum": 1,
      "description": "Опубликованный шаг между допустимыми числами гостей.",
      "example": 1
    },
    "fulfillmentDays": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 0,
        "maximum": 6,
        "example": 0
      },
      "description": "Допустимые дни недели по местному времени заведения. Воскресенье обозначается нулём.",
      "example": [
        0
      ]
    },
    "requiresContactDetails": {
      "type": "boolean",
      "description": "Требует ли пакет контактные данные гостя.",
      "example": true
    },
    "requiresFulfillmentNote": {
      "type": "boolean",
      "description": "Требует ли пакет примечание гостя к исполнению.",
      "example": true
    }
  },
  "required": [
    "pricingMode",
    "allowedServiceModes",
    "leadTimeHours",
    "maximumAdvanceDays",
    "cutoffTime",
    "minGuestCount",
    "maxGuestCount",
    "guestCountStep",
    "fulfillmentDays",
    "requiresContactDetails",
    "requiresFulfillmentNote"
  ],
  "example": {
    "pricingMode": "FIXED_PACKAGE",
    "allowedServiceModes": [
      "DINE_IN"
    ],
    "leadTimeHours": 1,
    "maximumAdvanceDays": 1,
    "cutoffTime": "12:30",
    "minGuestCount": 1,
    "maxGuestCount": 1,
    "guestCountStep": 1,
    "fulfillmentDays": [
      0
    ],
    "requiresContactDetails": true,
    "requiresFulfillmentNote": true
  }
}
Полное определение
{
  "type": "object",
  "properties": {
    "executionMode": {
      "type": "string",
      "enum": [
        "DIRECT_ITEM",
        "SELLABLE_VERSION",
        "COMPONENT_GROUPS",
        "COURSE_SEQUENCE",
        "GUIDED_STAGES",
        "BUNDLE_SECTIONS",
        "MEASURED_QUANTITY",
        "OPEN_PRICE_ENTRY",
        "PREORDER_PACKAGE",
        "CUSTOM_POLICY"
      ],
      "description": "Опубликованный режим исполнения позиции Hallify.",
      "example": "DIRECT_ITEM"
    },
    "configuratorMode": {
      "type": "string",
      "enum": [
        "DIRECT_ITEM",
        "SELLABLE_VERSION",
        "COMPONENT_GROUPS",
        "COURSE_SEQUENCE",
        "GUIDED_STAGES",
        "BUNDLE_SECTIONS",
        "MEASURED_QUANTITY",
        "OPEN_PRICE_ENTRY",
        "PREORDER_PACKAGE",
        "CUSTOM_POLICY"
      ],
      "description": "Действующий канонический конфигуратор, включая делегат пользовательской политики.",
      "example": "DIRECT_ITEM"
    },
    "pricingBehavior": {
      "type": "string",
      "enum": [
        "BASE_PRICE",
        "FIXED_PRICE",
        "MEASURED",
        "OPEN_PRICE"
      ],
      "description": "Каноническое опубликованное поведение цены продажи. Окончательные суммы рассчитывает владелец ценового предложения.",
      "example": "BASE_PRICE"
    },
    "sellableVersions": {
      "type": "string",
      "enum": [
        "NONE",
        "OPTIONAL",
        "REQUIRED"
      ],
      "description": "Каноническое опубликованное требование выбора продаваемой версии.",
      "example": "NONE"
    },
    "groups": {
      "maxItems": 50,
      "description": "Типизированные опубликованные группы гостевого выбора в настроенном порядке.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicMenuSelectionGroupDto"
      },
      "example": [
        {
          "id": "example-id",
          "name": "Example name",
          "sourceType": "CATALOG_ITEMS",
          "mode": "FIXED_CONTENTS",
          "minSelections": 0,
          "maxSelections": 0,
          "required": true,
          "choices": [
            {
              "id": "example-id",
              "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
              "name": "Example name",
              "quantity": 1,
              "upcharge": 0,
              "isDefault": true,
              "isIncluded": true,
              "variants": [
                {
                  "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
                  "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
                  "name": "Example name",
                  "price": 0,
                  "allergenCodes": [
                    "GLUTEN"
                  ],
                  "isAlcoholic": true,
                  "modifiers": [
                    {
                      "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                      "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                      "name": "Example name",
                      "isRequired": true,
                      "maxSelections": 0,
                      "options": [
                        {
                          "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                          "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                          "name": "Example name",
                          "priceDelta": 0,
                          "isDefault": true,
                          "allergenCodes": [
                            "GLUTEN"
                          ]
                        }
                      ]
                    }
                  ],
                  "availability": {
                    "available": true,
                    "reason": "AVAILABLE"
                  }
                }
              ],
              "modifiers": [
                {
                  "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                  "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                  "name": "Example name",
                  "isRequired": true,
                  "maxSelections": 0,
                  "options": [
                    {
                      "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                      "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                      "name": "Example name",
                      "priceDelta": 0,
                      "isDefault": true,
                      "allergenCodes": [
                        "GLUTEN"
                      ]
                    }
                  ]
                }
              ],
              "availability": {
                "available": true,
                "reason": "AVAILABLE"
              }
            }
          ],
          "modifierGroup": null
        }
      ]
    },
    "courses": {
      "maxItems": 50,
      "description": "Названия курсов и их последовательность для гостя. Пустой список для позиции без курсов.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicMenuCourseDto"
      },
      "example": [
        {
          "groupId": "example",
          "name": "Example name",
          "sequence": 0
        }
      ]
    },
    "measuredPolicy": {
      "nullable": true,
      "description": "Опубликованная политика измерения либо null для неизмеряемой позиции.",
      "type": "object",
      "properties": {
        "measurementType": {
          "type": "string",
          "enum": [
            "WEIGHT",
            "VOLUME"
          ],
          "description": "Опубликованная измеряемая величина.",
          "example": "WEIGHT"
        },
        "unit": {
          "type": "string",
          "enum": [
            "G",
            "KG",
            "OZ",
            "LB",
            "ML",
            "L",
            "FL_OZ"
          ],
          "description": "Опубликованная единица массы или объёма для полей измеряемого количества.",
          "example": "G"
        },
        "priceBasisQuantity": {
          "type": "string",
          "description": "Десятичное количество, к которому применяется опубликованная цена продажи.",
          "example": "1.00"
        },
        "saleIncrement": {
          "type": "string",
          "description": "Десятичный шаг между допустимыми измеряемыми количествами гостя.",
          "example": "example"
        },
        "minimumQuantity": {
          "type": "string",
          "description": "Минимальное допустимое десятичное измеряемое количество.",
          "example": "1.000"
        },
        "maximumQuantity": {
          "type": "string",
          "nullable": true,
          "description": "Максимальное допустимое десятичное измеряемое количество. null означает отсутствие опубликованного максимума.",
          "example": "1.000"
        },
        "defaultQuantity": {
          "type": "string",
          "description": "Опубликованное десятичное измеряемое количество по умолчанию.",
          "example": "1.000"
        }
      },
      "required": [
        "measurementType",
        "unit",
        "priceBasisQuantity",
        "saleIncrement",
        "minimumQuantity",
        "maximumQuantity",
        "defaultQuantity"
      ],
      "example": {
        "measurementType": "WEIGHT",
        "unit": "G",
        "priceBasisQuantity": "1.00",
        "saleIncrement": "example",
        "minimumQuantity": "1.000",
        "maximumQuantity": null,
        "defaultQuantity": "1.000"
      }
    },
    "preorderPolicy": {
      "nullable": true,
      "description": "Опубликованная политика пакета кейтеринга или предзаказа либо null для других типов позиций.",
      "type": "object",
      "properties": {
        "pricingMode": {
          "type": "string",
          "enum": [
            "FIXED_PACKAGE",
            "PER_GUEST"
          ],
          "description": "Применяется ли опубликованная цена пакета к пакету целиком или к одному гостю.",
          "example": "FIXED_PACKAGE"
        },
        "allowedServiceModes": {
          "type": "array",
          "description": "Способы исполнения, принимаемые опубликованным пакетом.",
          "items": {
            "type": "string",
            "enum": [
              "DINE_IN",
              "PICKUP",
              "DELIVERY",
              "CATERING"
            ],
            "example": "DINE_IN"
          },
          "example": [
            "DINE_IN"
          ]
        },
        "leadTimeHours": {
          "type": "integer",
          "minimum": 1,
          "description": "Опубликованное минимальное время до исполнения в часах.",
          "example": 1
        },
        "maximumAdvanceDays": {
          "type": "integer",
          "minimum": 1,
          "description": "Опубликованное максимальное число дней до исполнения.",
          "example": 1
        },
        "cutoffTime": {
          "type": "string",
          "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
          "description": "Опубликованное локальное предельное время приёма в часовом поясе заведения.",
          "example": "12:30"
        },
        "minGuestCount": {
          "type": "integer",
          "minimum": 1,
          "description": "Минимальное число гостей, принимаемое пакетом.",
          "example": 1
        },
        "maxGuestCount": {
          "type": "integer",
          "minimum": 1,
          "description": "Максимальное число гостей, принимаемое пакетом.",
          "example": 1
        },
        "guestCountStep": {
          "type": "integer",
          "minimum": 1,
          "description": "Опубликованный шаг между допустимыми числами гостей.",
          "example": 1
        },
        "fulfillmentDays": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 0,
            "maximum": 6,
            "example": 0
          },
          "description": "Допустимые дни недели по местному времени заведения. Воскресенье обозначается нулём.",
          "example": [
            0
          ]
        },
        "requiresContactDetails": {
          "type": "boolean",
          "description": "Требует ли пакет контактные данные гостя.",
          "example": true
        },
        "requiresFulfillmentNote": {
          "type": "boolean",
          "description": "Требует ли пакет примечание гостя к исполнению.",
          "example": true
        }
      },
      "required": [
        "pricingMode",
        "allowedServiceModes",
        "leadTimeHours",
        "maximumAdvanceDays",
        "cutoffTime",
        "minGuestCount",
        "maxGuestCount",
        "guestCountStep",
        "fulfillmentDays",
        "requiresContactDetails",
        "requiresFulfillmentNote"
      ],
      "example": {
        "pricingMode": "FIXED_PACKAGE",
        "allowedServiceModes": [
          "DINE_IN"
        ],
        "leadTimeHours": 1,
        "maximumAdvanceDays": 1,
        "cutoffTime": "12:30",
        "minGuestCount": 1,
        "maxGuestCount": 1,
        "guestCountStep": 1,
        "fulfillmentDays": [
          0
        ],
        "requiresContactDetails": true,
        "requiresFulfillmentNote": true
      }
    }
  },
  "description": "Явное публичное представление конфигуратора, полученное из канонического механизма обработки опубликованной позиции.",
  "required": [
    "executionMode",
    "configuratorMode",
    "pricingBehavior",
    "sellableVersions",
    "groups",
    "courses",
    "measuredPolicy",
    "preorderPolicy"
  ],
  "example": {
    "executionMode": "DIRECT_ITEM",
    "configuratorMode": "DIRECT_ITEM",
    "pricingBehavior": "BASE_PRICE",
    "sellableVersions": "NONE",
    "groups": [
      {
        "id": "example-id",
        "name": "Example name",
        "sourceType": "CATALOG_ITEMS",
        "mode": "FIXED_CONTENTS",
        "minSelections": 0,
        "maxSelections": 0,
        "required": true,
        "choices": [
          {
            "id": "example-id",
            "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
            "name": "Example name",
            "quantity": 1,
            "upcharge": 0,
            "isDefault": true,
            "isIncluded": true,
            "variants": [
              {
                "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
                "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
                "name": "Example name",
                "price": 0,
                "allergenCodes": [
                  "GLUTEN"
                ],
                "isAlcoholic": true,
                "modifiers": [
                  {
                    "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                    "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                    "name": "Example name",
                    "isRequired": true,
                    "maxSelections": 0,
                    "options": [
                      {
                        "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                        "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                        "name": "Example name",
                        "priceDelta": 0,
                        "isDefault": true,
                        "allergenCodes": [
                          "GLUTEN"
                        ]
                      }
                    ]
                  }
                ],
                "availability": {
                  "available": true,
                  "reason": "AVAILABLE"
                }
              }
            ],
            "modifiers": [
              {
                "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                "name": "Example name",
                "isRequired": true,
                "maxSelections": 0,
                "options": [
                  {
                    "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                    "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                    "name": "Example name",
                    "priceDelta": 0,
                    "isDefault": true,
                    "allergenCodes": [
                      "GLUTEN"
                    ]
                  }
                ]
              }
            ],
            "availability": {
              "available": true,
              "reason": "AVAILABLE"
            }
          }
        ],
        "modifierGroup": null
      }
    ],
    "courses": [
      {
        "groupId": "example",
        "name": "Example name",
        "sequence": 0
      }
    ],
    "measuredPolicy": null,
    "preorderPolicy": null
  }
}
PublicMenuSelectionGroupDto

Типизированная группа гостевого выбора для компонентов, пошаговых этапов, курсов, наборов и пакетов кейтеринга.

idОбязательно

Стабильный идентификатор группы или этапа, принимаемый при гостевом выборе компонентов.

string
Полное определение
{
  "type": "string",
  "description": "Стабильный идентификатор группы или этапа, принимаемый при гостевом выборе компонентов.",
  "example": "example-id"
}
nameОбязательно

Опубликованная подпись группы или этапа для гостя.

string
Полное определение
{
  "type": "string",
  "description": "Опубликованная подпись группы или этапа для гостя.",
  "example": "Example name"
}
sourceTypeОбязательно

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

string
Полное определение
{
  "type": "string",
  "enum": [
    "CATALOG_ITEMS",
    "MODIFIER_GROUP"
  ],
  "description": "Относится ли выбор к компонентам каталога или опубликованным вариантам модификаторов.",
  "example": "CATALOG_ITEMS"
}
modeОбязательно

Опубликованное поведение выбора: фиксированный состав, выбор гостя или необязательное дополнение.

string
Полное определение
{
  "type": "string",
  "enum": [
    "FIXED_CONTENTS",
    "GUEST_CHOICE",
    "OPTIONAL_ADD_ON"
  ],
  "description": "Опубликованное поведение выбора: фиксированный состав, выбор гостя или необязательное дополнение.",
  "example": "FIXED_CONTENTS"
}
minSelectionsОбязательно

Минимальное число вариантов, требуемое опубликованной группой.

integer
Полное определение
{
  "type": "integer",
  "minimum": 0,
  "description": "Минимальное число вариантов, требуемое опубликованной группой.",
  "example": 0
}
maxSelectionsОбязательно

Максимальное число вариантов, разрешённое опубликованной группой.

integer
Полное определение
{
  "type": "integer",
  "minimum": 0,
  "description": "Максимальное число вариантов, разрешённое опубликованной группой.",
  "example": 0
}
requiredОбязательно

Должен ли гость выполнить требования этой опубликованной группы выбора.

boolean
Полное определение
{
  "type": "boolean",
  "description": "Должен ли гость выполнить требования этой опубликованной группы выбора.",
  "example": true
}
choicesОбязательно

Опубликованные варианты каталога. Пустой список для этапа группы модификаторов.

array
Полное определение
{
  "maxItems": 100,
  "description": "Опубликованные варианты каталога. Пустой список для этапа группы модификаторов.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/PublicMenuSelectionChoiceDto"
  },
  "example": [
    {
      "id": "example-id",
      "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
      "name": "Example name",
      "quantity": 1,
      "upcharge": 0,
      "isDefault": true,
      "isIncluded": true,
      "variants": [
        {
          "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
          "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
          "name": "Example name",
          "price": 0,
          "allergenCodes": [
            "GLUTEN"
          ],
          "isAlcoholic": true,
          "modifiers": [
            {
              "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
              "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
              "name": "Example name",
              "isRequired": true,
              "maxSelections": 0,
              "options": [
                {
                  "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                  "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                  "name": "Example name",
                  "priceDelta": 0,
                  "isDefault": true,
                  "allergenCodes": [
                    "GLUTEN"
                  ]
                }
              ]
            }
          ],
          "availability": {
            "available": true,
            "reason": "AVAILABLE"
          }
        }
      ],
      "modifiers": [
        {
          "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
          "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
          "name": "Example name",
          "isRequired": true,
          "maxSelections": 0,
          "options": [
            {
              "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
              "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
              "name": "Example name",
              "priceDelta": 0,
              "isDefault": true,
              "allergenCodes": [
                "GLUTEN"
              ]
            }
          ]
        }
      ],
      "availability": {
        "available": true,
        "reason": "AVAILABLE"
      }
    }
  ]
}
modifierGroupОбязательно

Опубликованная группа модификаторов для этапа модификаторов либо null для вариантов каталога.

object · null
Полное определение
{
  "nullable": true,
  "description": "Опубликованная группа модификаторов для этапа модификаторов либо null для вариантов каталога.",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "description": "UUID снимка опубликованной группы модификаторов.",
      "example": "ec6e241e-1951-41c2-8739-0bd8d04ca0a6"
    },
    "groupId": {
      "type": "string",
      "format": "uuid",
      "description": "Стабильный UUID группы модификаторов.",
      "example": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb"
    },
    "name": {
      "type": "string",
      "description": "Опубликованное название группы модификаторов для гостя.",
      "example": "Example name"
    },
    "isRequired": {
      "type": "boolean",
      "description": "Требует ли действующее опубликованное назначение выбора.",
      "example": true
    },
    "maxSelections": {
      "type": "integer",
      "minimum": 0,
      "description": "Максимальное число вариантов, принимаемое действующим опубликованным назначением.",
      "example": 0
    },
    "options": {
      "maxItems": 20000,
      "description": "Доступные сейчас опубликованные варианты в настроенном порядке.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicMenuModifierOptionDto"
      },
      "example": [
        {
          "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
          "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
          "name": "Example name",
          "priceDelta": 0,
          "isDefault": true,
          "allergenCodes": [
            "GLUTEN"
          ]
        }
      ]
    }
  },
  "required": [
    "id",
    "groupId",
    "name",
    "isRequired",
    "maxSelections",
    "options"
  ],
  "example": {
    "id": "ec6e241e-1951-41c2-8739-0bd8d04ca0a6",
    "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
    "name": "Example name",
    "isRequired": true,
    "maxSelections": 0,
    "options": [
      {
        "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
        "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
        "name": "Example name",
        "priceDelta": 0,
        "isDefault": true,
        "allergenCodes": [
          "GLUTEN"
        ]
      }
    ]
  }
}
Полное определение
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Стабильный идентификатор группы или этапа, принимаемый при гостевом выборе компонентов.",
      "example": "example-id"
    },
    "name": {
      "type": "string",
      "description": "Опубликованная подпись группы или этапа для гостя.",
      "example": "Example name"
    },
    "sourceType": {
      "type": "string",
      "enum": [
        "CATALOG_ITEMS",
        "MODIFIER_GROUP"
      ],
      "description": "Относится ли выбор к компонентам каталога или опубликованным вариантам модификаторов.",
      "example": "CATALOG_ITEMS"
    },
    "mode": {
      "type": "string",
      "enum": [
        "FIXED_CONTENTS",
        "GUEST_CHOICE",
        "OPTIONAL_ADD_ON"
      ],
      "description": "Опубликованное поведение выбора: фиксированный состав, выбор гостя или необязательное дополнение.",
      "example": "FIXED_CONTENTS"
    },
    "minSelections": {
      "type": "integer",
      "minimum": 0,
      "description": "Минимальное число вариантов, требуемое опубликованной группой.",
      "example": 0
    },
    "maxSelections": {
      "type": "integer",
      "minimum": 0,
      "description": "Максимальное число вариантов, разрешённое опубликованной группой.",
      "example": 0
    },
    "required": {
      "type": "boolean",
      "description": "Должен ли гость выполнить требования этой опубликованной группы выбора.",
      "example": true
    },
    "choices": {
      "maxItems": 100,
      "description": "Опубликованные варианты каталога. Пустой список для этапа группы модификаторов.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicMenuSelectionChoiceDto"
      },
      "example": [
        {
          "id": "example-id",
          "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
          "name": "Example name",
          "quantity": 1,
          "upcharge": 0,
          "isDefault": true,
          "isIncluded": true,
          "variants": [
            {
              "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
              "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
              "name": "Example name",
              "price": 0,
              "allergenCodes": [
                "GLUTEN"
              ],
              "isAlcoholic": true,
              "modifiers": [
                {
                  "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                  "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                  "name": "Example name",
                  "isRequired": true,
                  "maxSelections": 0,
                  "options": [
                    {
                      "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                      "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                      "name": "Example name",
                      "priceDelta": 0,
                      "isDefault": true,
                      "allergenCodes": [
                        "GLUTEN"
                      ]
                    }
                  ]
                }
              ],
              "availability": {
                "available": true,
                "reason": "AVAILABLE"
              }
            }
          ],
          "modifiers": [
            {
              "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
              "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
              "name": "Example name",
              "isRequired": true,
              "maxSelections": 0,
              "options": [
                {
                  "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                  "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                  "name": "Example name",
                  "priceDelta": 0,
                  "isDefault": true,
                  "allergenCodes": [
                    "GLUTEN"
                  ]
                }
              ]
            }
          ],
          "availability": {
            "available": true,
            "reason": "AVAILABLE"
          }
        }
      ]
    },
    "modifierGroup": {
      "nullable": true,
      "description": "Опубликованная группа модификаторов для этапа модификаторов либо null для вариантов каталога.",
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "description": "UUID снимка опубликованной группы модификаторов.",
          "example": "ec6e241e-1951-41c2-8739-0bd8d04ca0a6"
        },
        "groupId": {
          "type": "string",
          "format": "uuid",
          "description": "Стабильный UUID группы модификаторов.",
          "example": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb"
        },
        "name": {
          "type": "string",
          "description": "Опубликованное название группы модификаторов для гостя.",
          "example": "Example name"
        },
        "isRequired": {
          "type": "boolean",
          "description": "Требует ли действующее опубликованное назначение выбора.",
          "example": true
        },
        "maxSelections": {
          "type": "integer",
          "minimum": 0,
          "description": "Максимальное число вариантов, принимаемое действующим опубликованным назначением.",
          "example": 0
        },
        "options": {
          "maxItems": 20000,
          "description": "Доступные сейчас опубликованные варианты в настроенном порядке.",
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/PublicMenuModifierOptionDto"
          },
          "example": [
            {
              "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
              "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
              "name": "Example name",
              "priceDelta": 0,
              "isDefault": true,
              "allergenCodes": [
                "GLUTEN"
              ]
            }
          ]
        }
      },
      "required": [
        "id",
        "groupId",
        "name",
        "isRequired",
        "maxSelections",
        "options"
      ],
      "example": {
        "id": "ec6e241e-1951-41c2-8739-0bd8d04ca0a6",
        "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
        "name": "Example name",
        "isRequired": true,
        "maxSelections": 0,
        "options": [
          {
            "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
            "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
            "name": "Example name",
            "priceDelta": 0,
            "isDefault": true,
            "allergenCodes": [
              "GLUTEN"
            ]
          }
        ]
      }
    }
  },
  "description": "Типизированная группа гостевого выбора для компонентов, пошаговых этапов, курсов, наборов и пакетов кейтеринга.",
  "required": [
    "id",
    "name",
    "sourceType",
    "mode",
    "minSelections",
    "maxSelections",
    "required",
    "choices",
    "modifierGroup"
  ],
  "example": {
    "id": "example-id",
    "name": "Example name",
    "sourceType": "CATALOG_ITEMS",
    "mode": "FIXED_CONTENTS",
    "minSelections": 0,
    "maxSelections": 0,
    "required": true,
    "choices": [
      {
        "id": "example-id",
        "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
        "name": "Example name",
        "quantity": 1,
        "upcharge": 0,
        "isDefault": true,
        "isIncluded": true,
        "variants": [
          {
            "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
            "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
            "name": "Example name",
            "price": 0,
            "allergenCodes": [
              "GLUTEN"
            ],
            "isAlcoholic": true,
            "modifiers": [
              {
                "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
                "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
                "name": "Example name",
                "isRequired": true,
                "maxSelections": 0,
                "options": [
                  {
                    "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                    "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                    "name": "Example name",
                    "priceDelta": 0,
                    "isDefault": true,
                    "allergenCodes": [
                      "GLUTEN"
                    ]
                  }
                ]
              }
            ],
            "availability": {
              "available": true,
              "reason": "AVAILABLE"
            }
          }
        ],
        "modifiers": [
          {
            "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
            "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
            "name": "Example name",
            "isRequired": true,
            "maxSelections": 0,
            "options": [
              {
                "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                "name": "Example name",
                "priceDelta": 0,
                "isDefault": true,
                "allergenCodes": [
                  "GLUTEN"
                ]
              }
            ]
          }
        ],
        "availability": {
          "available": true,
          "reason": "AVAILABLE"
        }
      }
    ],
    "modifierGroup": null
  }
}
PublicMenuSelectionChoiceDto

Опубликованный вариант компонента или пакета с гостевой конфигурацией и доплатой к цене продажи.

idОбязательно

Стабильный идентификатор варианта, принимаемый его опубликованной группой выбора.

string
Полное определение
{
  "type": "string",
  "description": "Стабильный идентификатор варианта, принимаемый его опубликованной группой выбора.",
  "example": "example-id"
}
menuItemIdОбязательно

Стабильный UUID опубликованной позиции меню компонента.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "Стабильный UUID опубликованной позиции меню компонента.",
  "example": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd"
}
nameОбязательно

Опубликованная подпись варианта или публичное название компонента.

string
Полное определение
{
  "type": "string",
  "description": "Опубликованная подпись варианта или публичное название компонента.",
  "example": "Example name"
}
quantityОбязательно

Опубликованное количество компонента в существующем формате количества API меню.

number
Полное определение
{
  "type": "number",
  "minimum": 0.001,
  "maximum": 999999999.999,
  "description": "Опубликованное количество компонента в существующем формате количества API меню.",
  "example": 1
}
upchargeОбязательно

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

number
Полное определение
{
  "type": "number",
  "minimum": 0,
  "maximum": 9999999999.99,
  "description": "Опубликованная доплата за выбор компонента в валюте родительского меню.",
  "example": 0
}
isDefaultОбязательно

Выбран ли этот вариант по умолчанию.

boolean
Полное определение
{
  "type": "boolean",
  "description": "Выбран ли этот вариант по умолчанию.",
  "example": true
}
isIncludedОбязательно

Входит ли компонент в опубликованный включённый состав.

boolean
Полное определение
{
  "type": "boolean",
  "description": "Входит ли компонент в опубликованный включённый состав.",
  "example": true
}
variantsОбязательно

Опубликованные продаваемые версии, принимаемые для этого варианта компонента.

array
Полное определение
{
  "maxItems": 5000,
  "description": "Опубликованные продаваемые версии, принимаемые для этого варианта компонента.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/PublicMenuVariantDto"
  },
  "example": [
    {
      "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
      "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
      "name": "Example name",
      "price": 0,
      "allergenCodes": [
        "GLUTEN"
      ],
      "isAlcoholic": true,
      "modifiers": [
        {
          "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
          "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
          "name": "Example name",
          "isRequired": true,
          "maxSelections": 0,
          "options": [
            {
              "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
              "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
              "name": "Example name",
              "priceDelta": 0,
              "isDefault": true,
              "allergenCodes": [
                "GLUTEN"
              ]
            }
          ]
        }
      ],
      "availability": {
        "available": true,
        "reason": "AVAILABLE"
      }
    }
  ]
}
modifiersОбязательно

Опубликованные модификаторы, принимаемые для этого варианта компонента.

array
Полное определение
{
  "maxItems": 10000,
  "description": "Опубликованные модификаторы, принимаемые для этого варианта компонента.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/PublicMenuModifierGroupDto"
  },
  "example": [
    {
      "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
      "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
      "name": "Example name",
      "isRequired": true,
      "maxSelections": 0,
      "options": [
        {
          "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
          "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
          "name": "Example name",
          "priceDelta": 0,
          "isDefault": true,
          "allergenCodes": [
            "GLUTEN"
          ]
        }
      ]
    }
  ]
}
availabilityОбязательно

Текущая публичная доступность этого варианта компонента.

allOf
Полное определение
{
  "description": "Текущая публичная доступность этого варианта компонента.",
  "allOf": [
    {
      "$ref": "#/components/schemas/PublicMenuAvailabilityDto"
    }
  ],
  "example": {
    "available": true,
    "reason": "AVAILABLE"
  }
}
Полное определение
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Стабильный идентификатор варианта, принимаемый его опубликованной группой выбора.",
      "example": "example-id"
    },
    "menuItemId": {
      "type": "string",
      "format": "uuid",
      "description": "Стабильный UUID опубликованной позиции меню компонента.",
      "example": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd"
    },
    "name": {
      "type": "string",
      "description": "Опубликованная подпись варианта или публичное название компонента.",
      "example": "Example name"
    },
    "quantity": {
      "type": "number",
      "minimum": 0.001,
      "maximum": 999999999.999,
      "description": "Опубликованное количество компонента в существующем формате количества API меню.",
      "example": 1
    },
    "upcharge": {
      "type": "number",
      "minimum": 0,
      "maximum": 9999999999.99,
      "description": "Опубликованная доплата за выбор компонента в валюте родительского меню.",
      "example": 0
    },
    "isDefault": {
      "type": "boolean",
      "description": "Выбран ли этот вариант по умолчанию.",
      "example": true
    },
    "isIncluded": {
      "type": "boolean",
      "description": "Входит ли компонент в опубликованный включённый состав.",
      "example": true
    },
    "variants": {
      "maxItems": 5000,
      "description": "Опубликованные продаваемые версии, принимаемые для этого варианта компонента.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicMenuVariantDto"
      },
      "example": [
        {
          "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
          "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
          "name": "Example name",
          "price": 0,
          "allergenCodes": [
            "GLUTEN"
          ],
          "isAlcoholic": true,
          "modifiers": [
            {
              "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
              "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
              "name": "Example name",
              "isRequired": true,
              "maxSelections": 0,
              "options": [
                {
                  "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                  "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                  "name": "Example name",
                  "priceDelta": 0,
                  "isDefault": true,
                  "allergenCodes": [
                    "GLUTEN"
                  ]
                }
              ]
            }
          ],
          "availability": {
            "available": true,
            "reason": "AVAILABLE"
          }
        }
      ]
    },
    "modifiers": {
      "maxItems": 10000,
      "description": "Опубликованные модификаторы, принимаемые для этого варианта компонента.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PublicMenuModifierGroupDto"
      },
      "example": [
        {
          "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
          "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
          "name": "Example name",
          "isRequired": true,
          "maxSelections": 0,
          "options": [
            {
              "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
              "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
              "name": "Example name",
              "priceDelta": 0,
              "isDefault": true,
              "allergenCodes": [
                "GLUTEN"
              ]
            }
          ]
        }
      ]
    },
    "availability": {
      "description": "Текущая публичная доступность этого варианта компонента.",
      "allOf": [
        {
          "$ref": "#/components/schemas/PublicMenuAvailabilityDto"
        }
      ],
      "example": {
        "available": true,
        "reason": "AVAILABLE"
      }
    }
  },
  "description": "Опубликованный вариант компонента или пакета с гостевой конфигурацией и доплатой к цене продажи.",
  "required": [
    "id",
    "menuItemId",
    "name",
    "quantity",
    "upcharge",
    "isDefault",
    "isIncluded",
    "variants",
    "modifiers",
    "availability"
  ],
  "example": {
    "id": "example-id",
    "menuItemId": "16ee6f36-c0cb-4311-85e8-2d2b3edea0fd",
    "name": "Example name",
    "quantity": 1,
    "upcharge": 0,
    "isDefault": true,
    "isIncluded": true,
    "variants": [
      {
        "id": "28f3e585-3f5c-438c-8645-68ea6c44e293",
        "menuVariantId": "94389946-e5d8-4fba-8358-e3a9c8a04b11",
        "name": "Example name",
        "price": 0,
        "allergenCodes": [
          "GLUTEN"
        ],
        "isAlcoholic": true,
        "modifiers": [
          {
            "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
            "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
            "name": "Example name",
            "isRequired": true,
            "maxSelections": 0,
            "options": [
              {
                "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
                "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
                "name": "Example name",
                "priceDelta": 0,
                "isDefault": true,
                "allergenCodes": [
                  "GLUTEN"
                ]
              }
            ]
          }
        ],
        "availability": {
          "available": true,
          "reason": "AVAILABLE"
        }
      }
    ],
    "modifiers": [
      {
        "id": "b7c8dac2-5dc8-457c-8ccd-cdd7bb09d27d",
        "groupId": "a457fc4d-a0cd-4f90-8fb1-e0db1f8a6beb",
        "name": "Example name",
        "isRequired": true,
        "maxSelections": 0,
        "options": [
          {
            "id": "cfd7f5ea-ada3-4506-8d5e-d10a89a0b126",
            "modifierOptionId": "2375c3d7-0141-4f9a-896c-d07acfb6af1b",
            "name": "Example name",
            "priceDelta": 0,
            "isDefault": true,
            "allergenCodes": [
              "GLUTEN"
            ]
          }
        ]
      }
    ],
    "availability": {
      "available": true,
      "reason": "AVAILABLE"
    }
  }
}
PublicMenuCourseDto

Видимые гостю подпись курса и последовательность без политики выпуска сотрудником или планирования кухни.

groupIdОбязательно

Опубликованная группа выбора этого курса.

string
Полное определение
{
  "type": "string",
  "description": "Опубликованная группа выбора этого курса.",
  "example": "example"
}
nameОбязательно

Название курса, видимое гостю.

string
Полное определение
{
  "type": "string",
  "description": "Название курса, видимое гостю.",
  "example": "Example name"
}
sequenceОбязательно

Опубликованная последовательность обслуживания для упорядочивания гостевого выбора курсов.

integer
Полное определение
{
  "type": "integer",
  "description": "Опубликованная последовательность обслуживания для упорядочивания гостевого выбора курсов.",
  "example": 0
}
Полное определение
{
  "type": "object",
  "properties": {
    "groupId": {
      "type": "string",
      "description": "Опубликованная группа выбора этого курса.",
      "example": "example"
    },
    "name": {
      "type": "string",
      "description": "Название курса, видимое гостю.",
      "example": "Example name"
    },
    "sequence": {
      "type": "integer",
      "description": "Опубликованная последовательность обслуживания для упорядочивания гостевого выбора курсов.",
      "example": 0
    }
  },
  "description": "Видимые гостю подпись курса и последовательность без политики выпуска сотрудником или планирования кухни.",
  "required": [
    "groupId",
    "name",
    "sequence"
  ],
  "example": {
    "groupId": "example",
    "name": "Example name",
    "sequence": 0
  }
}
TranslatedErrorDto

Стабильная оболочка ошибки общего обработчика HTTP-исключений. Дополнительные машинные данные домена вложены в details.

statusCodeОбязательно

HTTP-статус, повторённый из ответа.

integer
Полное определение
{
  "type": "integer",
  "description": "HTTP-статус, повторённый из ответа.",
  "example": 400
}
errorОбязательно

Ключ перевода HTTP-категории, например errors:http.conflict. Конкретную причину определяют code и translationKey.

string
Полное определение
{
  "type": "string",
  "description": "Ключ перевода HTTP-категории, например errors:http.conflict. Конкретную причину определяют code и translationKey.",
  "example": "errors.request.invalid"
}
codeОбязательно

Стабильный машинный код домена либо стандартный HTTP_*, если доменный код не задан. Используйте это поле и HTTP-статус для программной логики; локализованная формулировка не управляет повторами или бизнес-решениями.

string
Полное определение
{
  "type": "string",
  "example": "HTTP_BAD_REQUEST",
  "description": "Стабильный машинный код домена либо стандартный HTTP_*, если доменный код не задан. Используйте это поле и HTTP-статус для программной логики; локализованная формулировка не управляет повторами или бизнес-решениями."
}
messageОбязательно

Ключ перевода, идентичный translationKey. API не возвращает локализованный текст интерфейса. Найдите перевод ключа и подставьте translationValues в приложении-потребителе.

string
Полное определение
{
  "type": "string",
  "example": "errors:http.badRequest",
  "description": "Ключ перевода, идентичный translationKey. API не возвращает локализованный текст интерфейса. Найдите перевод ключа и подставьте translationValues в приложении-потребителе."
}
translationKeyОбязательно

Канонический ключ перевода, идентичный message. Ключи errors:http.* соответствующего статуса описывают неуточнённые ошибки. Публичные ключи и пояснения EN/RU перечислены в Developers; неизвестный ключ требует локализованного запасного сообщения в клиенте.

string
Полное определение
{
  "type": "string",
  "example": "errors:http.badRequest",
  "description": "Канонический ключ перевода, идентичный message. Ключи errors:http.* соответствующего статуса описывают неуточнённые ошибки. Публичные ключи и пояснения EN/RU перечислены в Developers; неизвестный ключ требует локализованного запасного сообщения в клиенте."
}
translationValuesНеобязательно

Необязательные скалярные значения параметров шаблона перевода. Обрабатывайте их как данные, экранируйте при отображении и никогда не используйте как настройки переводчика.

object
Полное определение
{
  "type": "object",
  "additionalProperties": {
    "oneOf": [
      {
        "type": "string",
        "example": "example"
      },
      {
        "type": "number",
        "example": 0
      },
      {
        "type": "boolean",
        "example": true
      }
    ],
    "example": "example"
  },
  "description": "Необязательные скалярные значения параметров шаблона перевода. Обрабатывайте их как данные, экранируйте при отображении и никогда не используйте как настройки переводчика.",
  "example": {
    "exampleKey": "example"
  }
}
validationErrorsНеобязательно

Ошибки проверки полей с ключами переводов и стабильными кодами валидаторов. Введённые значения и исходные тексты валидаторов не включаются.

array
Полное определение
{
  "description": "Ошибки проверки полей с ключами переводов и стабильными кодами валидаторов. Введённые значения и исходные тексты валидаторов не включаются.",
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/ValidationErrorDto"
  },
  "example": [
    {
      "field": "email",
      "translationKey": "validation:isEmail",
      "code": "isEmail",
      "message": "validation:isEmail"
    }
  ]
}
detailsНеобязательно

Необязательные сведения о доменных препятствиях или ошибках валидации.

oneOf
Полное определение
{
  "description": "Необязательные сведения о доменных препятствиях или ошибках валидации.",
  "oneOf": [
    {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/JsonValue"
      },
      "example": [
        "example"
      ]
    },
    {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/components/schemas/JsonValue"
      },
      "example": {
        "exampleKey": "example"
      }
    }
  ],
  "example": [
    "example"
  ]
}
Полное определение
{
  "type": "object",
  "properties": {
    "statusCode": {
      "type": "integer",
      "description": "HTTP-статус, повторённый из ответа.",
      "example": 400
    },
    "error": {
      "type": "string",
      "description": "Ключ перевода HTTP-категории, например errors:http.conflict. Конкретную причину определяют code и translationKey.",
      "example": "errors.request.invalid"
    },
    "code": {
      "type": "string",
      "example": "HTTP_BAD_REQUEST",
      "description": "Стабильный машинный код домена либо стандартный HTTP_*, если доменный код не задан. Используйте это поле и HTTP-статус для программной логики; локализованная формулировка не управляет повторами или бизнес-решениями."
    },
    "message": {
      "type": "string",
      "example": "errors:http.badRequest",
      "description": "Ключ перевода, идентичный translationKey. API не возвращает локализованный текст интерфейса. Найдите перевод ключа и подставьте translationValues в приложении-потребителе."
    },
    "translationKey": {
      "type": "string",
      "example": "errors:http.badRequest",
      "description": "Канонический ключ перевода, идентичный message. Ключи errors:http.* соответствующего статуса описывают неуточнённые ошибки. Публичные ключи и пояснения EN/RU перечислены в Developers; неизвестный ключ требует локализованного запасного сообщения в клиенте."
    },
    "translationValues": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "type": "string",
            "example": "example"
          },
          {
            "type": "number",
            "example": 0
          },
          {
            "type": "boolean",
            "example": true
          }
        ],
        "example": "example"
      },
      "description": "Необязательные скалярные значения параметров шаблона перевода. Обрабатывайте их как данные, экранируйте при отображении и никогда не используйте как настройки переводчика.",
      "example": {
        "exampleKey": "example"
      }
    },
    "validationErrors": {
      "description": "Ошибки проверки полей с ключами переводов и стабильными кодами валидаторов. Введённые значения и исходные тексты валидаторов не включаются.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/ValidationErrorDto"
      },
      "example": [
        {
          "field": "email",
          "translationKey": "validation:isEmail",
          "code": "isEmail",
          "message": "validation:isEmail"
        }
      ]
    },
    "details": {
      "description": "Необязательные сведения о доменных препятствиях или ошибках валидации.",
      "oneOf": [
        {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/JsonValue"
          },
          "example": [
            "example"
          ]
        },
        {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/components/schemas/JsonValue"
          },
          "example": {
            "exampleKey": "example"
          }
        }
      ],
      "example": [
        "example"
      ]
    }
  },
  "required": [
    "statusCode",
    "error",
    "code",
    "message",
    "translationKey"
  ],
  "description": "Стабильная оболочка ошибки общего обработчика HTTP-исключений. Дополнительные машинные данные домена вложены в details.",
  "example": {
    "statusCode": 400,
    "error": "errors:http.badRequest",
    "code": "HTTP_BAD_REQUEST",
    "message": "errors:http.badRequest",
    "translationKey": "errors:http.badRequest"
  }
}
ValidationErrorDto

Ошибка проверки поля с путём поля, стабильным кодом валидатора и ключом перевода. Человекочитаемый текст принадлежит приложению-потребителю.

fieldОбязательно

Публичный путь поля. Вложенные свойства и индексы массива разделены точками.

string
Полное определение
{
  "type": "string",
  "example": "email",
  "description": "Публичный путь поля. Вложенные свойства и индексы массива разделены точками."
}
translationKeyОбязательно

Ключ перевода этого валидатора, идентичный message. Найдите его в клиентском словаре; см. публичный каталог ошибок Developers.

string
Полное определение
{
  "type": "string",
  "example": "validation:isEmail",
  "description": "Ключ перевода этого валидатора, идентичный message. Найдите его в клиентском словаре; см. публичный каталог ошибок Developers."
}
codeОбязательно

Стабильный идентификатор валидатора для ошибки поля. Пользовательские валидаторы могут определять дополнительные идентификаторы.

string
Полное определение
{
  "type": "string",
  "example": "isEmail",
  "description": "Стабильный идентификатор валидатора для ошибки поля. Пользовательские валидаторы могут определять дополнительные идентификаторы."
}
messageОбязательно

Ключ перевода, описывающий ошибку проверки поля, идентичный translationKey. Введённые значения и тексты валидаторов не включаются.

string
Полное определение
{
  "type": "string",
  "example": "validation:isEmail",
  "description": "Ключ перевода, описывающий ошибку проверки поля, идентичный translationKey. Введённые значения и тексты валидаторов не включаются."
}
translationValuesНеобязательно

Необязательные скалярные значения параметров шаблона перевода. Обрабатывайте их как данные, экранируйте при отображении и никогда не используйте как настройки переводчика.

object
Полное определение
{
  "type": "object",
  "additionalProperties": {
    "oneOf": [
      {
        "type": "string",
        "example": "example"
      },
      {
        "type": "number",
        "example": 0
      },
      {
        "type": "boolean",
        "example": true
      }
    ],
    "example": "example"
  },
  "description": "Необязательные скалярные значения параметров шаблона перевода. Обрабатывайте их как данные, экранируйте при отображении и никогда не используйте как настройки переводчика.",
  "example": {
    "exampleKey": "example"
  }
}
Полное определение
{
  "type": "object",
  "properties": {
    "field": {
      "type": "string",
      "example": "email",
      "description": "Публичный путь поля. Вложенные свойства и индексы массива разделены точками."
    },
    "translationKey": {
      "type": "string",
      "example": "validation:isEmail",
      "description": "Ключ перевода этого валидатора, идентичный message. Найдите его в клиентском словаре; см. публичный каталог ошибок Developers."
    },
    "code": {
      "type": "string",
      "example": "isEmail",
      "description": "Стабильный идентификатор валидатора для ошибки поля. Пользовательские валидаторы могут определять дополнительные идентификаторы."
    },
    "message": {
      "type": "string",
      "example": "validation:isEmail",
      "description": "Ключ перевода, описывающий ошибку проверки поля, идентичный translationKey. Введённые значения и тексты валидаторов не включаются."
    },
    "translationValues": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "type": "string",
            "example": "example"
          },
          {
            "type": "number",
            "example": 0
          },
          {
            "type": "boolean",
            "example": true
          }
        ],
        "example": "example"
      },
      "description": "Необязательные скалярные значения параметров шаблона перевода. Обрабатывайте их как данные, экранируйте при отображении и никогда не используйте как настройки переводчика.",
      "example": {
        "exampleKey": "example"
      }
    }
  },
  "required": [
    "field",
    "translationKey",
    "code",
    "message"
  ],
  "description": "Ошибка проверки поля с путём поля, стабильным кодом валидатора и ключом перевода. Человекочитаемый текст принадлежит приложению-потребителю.",
  "example": {
    "field": "email",
    "translationKey": "validation:isEmail",
    "code": "isEmail",
    "message": "validation:isEmail"
  }
}
JsonValue

Рекурсивно допустимое JSON-значение. Используется только там, где контракт явно разрешает произвольные структурированные данные.

Полное определение
{
  "oneOf": [
    {
      "type": "string",
      "nullable": true,
      "example": "example"
    },
    {
      "type": "number",
      "example": 0
    },
    {
      "type": "boolean",
      "example": true
    },
    {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/JsonValue"
      },
      "example": [
        "example"
      ]
    },
    {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/components/schemas/JsonValue"
      },
      "example": {
        "exampleKey": "example"
      }
    }
  ],
  "description": "Рекурсивно допустимое JSON-значение. Используется только там, где контракт явно разрешает произвольные структурированные данные.",
  "example": "example"
}

Hallify использует обязательные cookies и опциональную аналитику.

Обязательные cookies поддерживают вход, язык и тему. Аналитика выключена, пока вы явно ее не разрешите.