Авторизация
x-hallify-widget-context: <HALLIFY_STOREFRONT_WIDGET_CONTEXT>Краткосрочный server-authenticated widget presentation proof. Связывает настроенный frame origin с точными проверенными parent binding и connection authority. Новый widget-спрос требует этот proof; существующие native capabilities сохраняют отдельные права и исходные сроки.
Параметры
publicHandleПуть · ОбязательноНепрозрачный публичный идентификатор канала для поиска опубликованной гостевой конфигурации одного заведения. Не является ключом доступа.
stringПолное определение
{ "type": "string", "example": "example" }originЗаголовок · НеобязательноФактический Origin браузера. Обычный поиск проверяет разрешённые origin нативного канала; widget discovery требует изолированный frame Origin и подписанный context. Родитель встраивания никогда не подставляется в этот заголовок.
stringПолное определение
{ "type": "string", "maxLength": 2048, "example": "example" }x-hallify-connection-idЗаголовок · НеобязательноНесекретный локатор подключения Storefront. При передаче catalog discovery проверяет точное представление; widget context дополнительно связывает точные подключение и parent binding.
stringПолное определение
{ "type": "string", "minLength": 1, "maxLength": 64, "pattern": "^[A-Za-z0-9_-]{1,64}$", "example": "example" }
Ответы
200Возвращает публичный канал предзаказов и доступное представление каталога.
Полное определение
{
"$ref": "#/components/schemas/PublicPreorderCatalogDto"
}{
"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": "fc26c88d-096a-4835-8f3e-cb8e09f3a6ae",
"menuCategoryId": null,
"name": "Example name",
"sortOrder": 1,
"items": [
{
"id": "f2af74de-208d-4d87-807b-46e025174e34",
"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,
"preorderEligibility": {
"serviceModes": [
"DINE_IN"
],
"minimumQuantity": 1,
"maximumQuantity": null,
"minimumLeadMinutes": null,
"bookingHorizonDays": null
}
}
]
}
],
"fulfillmentOptions": [
{
"serviceMode": "PICKUP",
"timingModes": [
"ASAP"
]
}
],
"publicHandle": "example",
"venue": {
"id": "90513e6e-3429-4349-8afd-9c5ad89daff8",
"name": "Example name",
"timeZone": "Asia/Tbilisi",
"currency": "GEL"
},
"termsVersion": "example",
"privacyVersion": "example",
"allowGuestPayments": true
}404Нативный канал, запрошенный origin, widget proof или точное представление недоступны. Коды: PREORDER_PUBLIC_RESOURCE_NOT_FOUND, STOREFRONT_PRESENTATION_UNAVAILABLE.
Полное определение
{
"$ref": "#/components/schemas/TranslatedErrorDto"
}{
"statusCode": 404,
"error": "errors:http.notFound",
"code": "HTTP_NOT_FOUND",
"message": "errors:http.notFound",
"translationKey": "errors:http.notFound"
}503Невозможно безопасно спроецировать опубликованное меню либо недоступна конфигурация widget authority. Коды: PUBLIC_MENU_UNAVAILABLE, STOREFRONT_WIDGET_UNAVAILABLE.
Полное определение
{
"$ref": "#/components/schemas/TranslatedErrorDto"
}{
"statusCode": 503,
"error": "errors:http.serviceUnavailable",
"code": "HTTP_SERVICE_UNAVAILABLE",
"message": "errors:http.serviceUnavailable",
"translationKey": "errors:http.serviceUnavailable"
}Схемы
PublicPreorderCatalogDto
Строгий публичный каталог предзаказов, привязанный к одному активному каналу Hallify и его точному опубликованному меню.
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ОбязательноТипизированные опубликованные категории, отфильтрованные по допустимости предзаказа Hallify.
arrayПолное определение
{ "maxItems": 500, "description": "Типизированные опубликованные категории, отфильтрованные по допустимости предзаказа Hallify.", "type": "array", "items": { "$ref": "#/components/schemas/PublicPreorderCatalogCategoryDto" }, "example": [ { "id": "fc26c88d-096a-4835-8f3e-cb8e09f3a6ae", "menuCategoryId": null, "name": "Example name", "sortOrder": 1, "items": [ { "id": "f2af74de-208d-4d87-807b-46e025174e34", "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, "preorderEligibility": { "serviceModes": [ "DINE_IN" ], "minimumQuantity": 1, "maximumQuantity": null, "minimumLeadMinutes": null, "bookingHorizonDays": null } } ] } ] }deliveryMethodsНеобязательноСпособы доставки, доступные сейчас по действующей политике заведения. Список не раскрывает настройки провайдера и не резервирует его предложение.
arrayПолное определение
{ "type": "array", "maxItems": 3, "description": "Способы доставки, доступные сейчас по действующей политике заведения. Список не раскрывает настройки провайдера и не резервирует его предложение.", "items": { "type": "string", "enum": [ "SELF", "UBER_DIRECT", "WOLT_DRIVE" ], "example": "SELF" }, "example": [ "SELF" ] }fulfillmentOptionsОбязательноВарианты обслуживания вне зала и времени, поддерживаемые активными нативными политиками исполнения. Пустой список означает отсутствие настроенной публичной политики заказа PICKUP или DELIVERY.
arrayПолное определение
{ "maxItems": 2, "description": "Варианты обслуживания вне зала и времени, поддерживаемые активными нативными политиками исполнения. Пустой список означает отсутствие настроенной публичной политики заказа PICKUP или DELIVERY.", "type": "array", "items": { "$ref": "#/components/schemas/PublicPreorderFulfillmentOptionDto" }, "example": [ { "serviceMode": "PICKUP", "timingModes": [ "ASAP" ] } ] }publicHandleОбязательноПубличный идентификатор поиска активного канала предзаказов Hallify.
stringПолное определение
{ "type": "string", "description": "Публичный идентификатор поиска активного канала предзаказов Hallify.", "example": "example" }venueОбязательноЯвные публичные данные заведения без метаданных сотрудников или организации.
allOfПолное определение
{ "description": "Явные публичные данные заведения без метаданных сотрудников или организации.", "allOf": [ { "$ref": "#/components/schemas/PublicPreorderCatalogVenueDto" } ], "example": { "id": "90513e6e-3429-4349-8afd-9c5ad89daff8", "name": "Example name", "timeZone": "Asia/Tbilisi", "currency": "GEL" } }termsVersionОбязательноТекущая версия условий, обязательная для нового черновика публичного предзаказа.
stringПолное определение
{ "type": "string", "description": "Текущая версия условий, обязательная для нового черновика публичного предзаказа.", "example": "example" }privacyVersionОбязательноТекущая версия политики конфиденциальности, обязательная для нового черновика публичного предзаказа.
stringПолное определение
{ "type": "string", "description": "Текущая версия политики конфиденциальности, обязательная для нового черновика публичного предзаказа.", "example": "example" }allowGuestPaymentsОбязательноРазрешает ли этот публичный канал подготовку гостевой оплаты сейчас. Нативные полномочия и финансовое согласие всё равно необходимы.
booleanПолное определение
{ "type": "boolean", "description": "Разрешает ли этот публичный канал подготовку гостевой оплаты сейчас. Нативные полномочия и финансовое согласие всё равно необходимы.", "example": true }
Полное определение
{
"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": "Типизированные опубликованные категории, отфильтрованные по допустимости предзаказа Hallify.",
"type": "array",
"items": {
"$ref": "#/components/schemas/PublicPreorderCatalogCategoryDto"
},
"example": [
{
"id": "fc26c88d-096a-4835-8f3e-cb8e09f3a6ae",
"menuCategoryId": null,
"name": "Example name",
"sortOrder": 1,
"items": [
{
"id": "f2af74de-208d-4d87-807b-46e025174e34",
"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,
"preorderEligibility": {
"serviceModes": [
"DINE_IN"
],
"minimumQuantity": 1,
"maximumQuantity": null,
"minimumLeadMinutes": null,
"bookingHorizonDays": null
}
}
]
}
]
},
"deliveryMethods": {
"type": "array",
"maxItems": 3,
"description": "Способы доставки, доступные сейчас по действующей политике заведения. Список не раскрывает настройки провайдера и не резервирует его предложение.",
"items": {
"type": "string",
"enum": [
"SELF",
"UBER_DIRECT",
"WOLT_DRIVE"
],
"example": "SELF"
},
"example": [
"SELF"
]
},
"fulfillmentOptions": {
"maxItems": 2,
"description": "Варианты обслуживания вне зала и времени, поддерживаемые активными нативными политиками исполнения. Пустой список означает отсутствие настроенной публичной политики заказа PICKUP или DELIVERY.",
"type": "array",
"items": {
"$ref": "#/components/schemas/PublicPreorderFulfillmentOptionDto"
},
"example": [
{
"serviceMode": "PICKUP",
"timingModes": [
"ASAP"
]
}
]
},
"publicHandle": {
"type": "string",
"description": "Публичный идентификатор поиска активного канала предзаказов Hallify.",
"example": "example"
},
"venue": {
"description": "Явные публичные данные заведения без метаданных сотрудников или организации.",
"allOf": [
{
"$ref": "#/components/schemas/PublicPreorderCatalogVenueDto"
}
],
"example": {
"id": "90513e6e-3429-4349-8afd-9c5ad89daff8",
"name": "Example name",
"timeZone": "Asia/Tbilisi",
"currency": "GEL"
}
},
"termsVersion": {
"type": "string",
"description": "Текущая версия условий, обязательная для нового черновика публичного предзаказа.",
"example": "example"
},
"privacyVersion": {
"type": "string",
"description": "Текущая версия политики конфиденциальности, обязательная для нового черновика публичного предзаказа.",
"example": "example"
},
"allowGuestPayments": {
"type": "boolean",
"description": "Разрешает ли этот публичный канал подготовку гостевой оплаты сейчас. Нативные полномочия и финансовое согласие всё равно необходимы.",
"example": true
}
},
"description": "Строгий публичный каталог предзаказов, привязанный к одному активному каналу Hallify и его точному опубликованному меню.",
"required": [
"venueId",
"salesChannelId",
"menuVersionId",
"versionNumber",
"graphHash",
"currency",
"timeZone",
"publishedAt",
"servedAt",
"categories",
"fulfillmentOptions",
"publicHandle",
"venue",
"termsVersion",
"privacyVersion",
"allowGuestPayments"
],
"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": "fc26c88d-096a-4835-8f3e-cb8e09f3a6ae",
"menuCategoryId": null,
"name": "Example name",
"sortOrder": 1,
"items": [
{
"id": "f2af74de-208d-4d87-807b-46e025174e34",
"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,
"preorderEligibility": {
"serviceModes": [
"DINE_IN"
],
"minimumQuantity": 1,
"maximumQuantity": null,
"minimumLeadMinutes": null,
"bookingHorizonDays": null
}
}
]
}
],
"fulfillmentOptions": [
{
"serviceMode": "PICKUP",
"timingModes": [
"ASAP"
]
}
],
"publicHandle": "example",
"venue": {
"id": "90513e6e-3429-4349-8afd-9c5ad89daff8",
"name": "Example name",
"timeZone": "Asia/Tbilisi",
"currency": "GEL"
},
"termsVersion": "example",
"privacyVersion": "example",
"allowGuestPayments": true
}
}PublicPreorderCatalogCategoryDto
Опубликованная категория с типизированными гостевыми позициями, допустимыми для предзаказа.
idОбязательноUUID снимка опубликованной категории.
string · uuidПолное определение
{ "type": "string", "format": "uuid", "description": "UUID снимка опубликованной категории.", "example": "fc26c88d-096a-4835-8f3e-cb8e09f3a6ae" }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ОбязательноОпубликованные публичные позиции, допустимые для предзаказа Hallify.
arrayПолное определение
{ "maxItems": 500, "description": "Опубликованные публичные позиции, допустимые для предзаказа Hallify.", "type": "array", "items": { "$ref": "#/components/schemas/PublicPreorderCatalogItemDto" }, "example": [ { "id": "f2af74de-208d-4d87-807b-46e025174e34", "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, "preorderEligibility": { "serviceModes": [ "DINE_IN" ], "minimumQuantity": 1, "maximumQuantity": null, "minimumLeadMinutes": null, "bookingHorizonDays": null } } ] }
Полное определение
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "UUID снимка опубликованной категории.",
"example": "fc26c88d-096a-4835-8f3e-cb8e09f3a6ae"
},
"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": "Опубликованные публичные позиции, допустимые для предзаказа Hallify.",
"type": "array",
"items": {
"$ref": "#/components/schemas/PublicPreorderCatalogItemDto"
},
"example": [
{
"id": "f2af74de-208d-4d87-807b-46e025174e34",
"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,
"preorderEligibility": {
"serviceModes": [
"DINE_IN"
],
"minimumQuantity": 1,
"maximumQuantity": null,
"minimumLeadMinutes": null,
"bookingHorizonDays": null
}
}
]
}
},
"description": "Опубликованная категория с типизированными гостевыми позициями, допустимыми для предзаказа.",
"required": [
"id",
"menuCategoryId",
"name",
"sortOrder",
"items"
],
"example": {
"id": "fc26c88d-096a-4835-8f3e-cb8e09f3a6ae",
"menuCategoryId": null,
"name": "Example name",
"sortOrder": 1,
"items": [
{
"id": "f2af74de-208d-4d87-807b-46e025174e34",
"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,
"preorderEligibility": {
"serviceModes": [
"DINE_IN"
],
"minimumQuantity": 1,
"maximumQuantity": null,
"minimumLeadMinutes": null,
"bookingHorizonDays": null
}
}
]
}
}PublicPreorderCatalogItemDto
Позиция гостевого меню без раскрытия себестоимости, допустимая для запланированного заказа Hallify.
idОбязательноUUID снимка опубликованной позиции меню.
string · uuidПолное определение
{ "type": "string", "format": "uuid", "description": "UUID снимка опубликованной позиции меню.", "example": "f2af74de-208d-4d87-807b-46e025174e34" }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 }preorderEligibilityОбязательноДействующая допустимость предзаказа Hallify. Окончательная проверка ценового предложения остаётся обязательной.
allOfПолное определение
{ "description": "Действующая допустимость предзаказа Hallify. Окончательная проверка ценового предложения остаётся обязательной.", "allOf": [ { "$ref": "#/components/schemas/PublicPreorderEligibilityDto" } ], "example": { "serviceModes": [ "DINE_IN" ], "minimumQuantity": 1, "maximumQuantity": null, "minimumLeadMinutes": null, "bookingHorizonDays": null } }
Полное определение
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "UUID снимка опубликованной позиции меню.",
"example": "f2af74de-208d-4d87-807b-46e025174e34"
},
"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
},
"preorderEligibility": {
"description": "Действующая допустимость предзаказа Hallify. Окончательная проверка ценового предложения остаётся обязательной.",
"allOf": [
{
"$ref": "#/components/schemas/PublicPreorderEligibilityDto"
}
],
"example": {
"serviceModes": [
"DINE_IN"
],
"minimumQuantity": 1,
"maximumQuantity": null,
"minimumLeadMinutes": null,
"bookingHorizonDays": null
}
}
},
"description": "Позиция гостевого меню без раскрытия себестоимости, допустимая для запланированного заказа Hallify.",
"required": [
"id",
"menuItemId",
"name",
"description",
"price",
"allergenCodes",
"isAlcoholic",
"modifiers",
"variants",
"structure",
"availability",
"sortOrder",
"preorderEligibility"
],
"example": {
"id": "f2af74de-208d-4d87-807b-46e025174e34",
"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,
"preorderEligibility": {
"serviceModes": [
"DINE_IN"
],
"minimumQuantity": 1,
"maximumQuantity": null,
"minimumLeadMinutes": null,
"bookingHorizonDays": null
}
}
}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
}
}PublicPreorderEligibilityDto
Допустимость предзаказа Hallify для одной опубликованной позиции гостевого меню.
serviceModesОбязательноСпособы исполнения Hallify, разрешённые действующим правилом каталога предзаказов или политикой пакета.
arrayПолное определение
{ "type": "array", "description": "Способы исполнения Hallify, разрешённые действующим правилом каталога предзаказов или политикой пакета.", "items": { "type": "string", "enum": [ "DINE_IN", "PICKUP", "DELIVERY", "CATERING" ], "example": "DINE_IN" }, "example": [ "DINE_IN" ] }minimumQuantityОбязательноМинимальное количество позиции, принимаемое правилом каталога предзаказов Hallify.
integerПолное определение
{ "type": "integer", "minimum": 1, "description": "Минимальное количество позиции, принимаемое правилом каталога предзаказов Hallify.", "example": 1 }maximumQuantityОбязательноМаксимальное количество позиции либо null, если максимум каталога не настроен.
integer · nullПолное определение
{ "type": "integer", "minimum": 1, "nullable": true, "description": "Максимальное количество позиции либо null, если максимум каталога не настроен.", "example": 1 }minimumLeadMinutesОбязательноМинимальное время до исполнения Hallify в минутах либо null, если его задаёт политика исполнения.
integer · nullПолное определение
{ "type": "integer", "minimum": 0, "nullable": true, "description": "Минимальное время до исполнения Hallify в минутах либо null, если его задаёт политика исполнения.", "example": 0 }bookingHorizonDaysОбязательноГоризонт бронирования Hallify в днях либо null, если его задаёт политика исполнения.
integer · nullПолное определение
{ "type": "integer", "minimum": 1, "nullable": true, "description": "Горизонт бронирования Hallify в днях либо null, если его задаёт политика исполнения.", "example": 1 }
Полное определение
{
"type": "object",
"properties": {
"serviceModes": {
"type": "array",
"description": "Способы исполнения Hallify, разрешённые действующим правилом каталога предзаказов или политикой пакета.",
"items": {
"type": "string",
"enum": [
"DINE_IN",
"PICKUP",
"DELIVERY",
"CATERING"
],
"example": "DINE_IN"
},
"example": [
"DINE_IN"
]
},
"minimumQuantity": {
"type": "integer",
"minimum": 1,
"description": "Минимальное количество позиции, принимаемое правилом каталога предзаказов Hallify.",
"example": 1
},
"maximumQuantity": {
"type": "integer",
"minimum": 1,
"nullable": true,
"description": "Максимальное количество позиции либо null, если максимум каталога не настроен.",
"example": 1
},
"minimumLeadMinutes": {
"type": "integer",
"minimum": 0,
"nullable": true,
"description": "Минимальное время до исполнения Hallify в минутах либо null, если его задаёт политика исполнения.",
"example": 0
},
"bookingHorizonDays": {
"type": "integer",
"minimum": 1,
"nullable": true,
"description": "Горизонт бронирования Hallify в днях либо null, если его задаёт политика исполнения.",
"example": 1
}
},
"description": "Допустимость предзаказа Hallify для одной опубликованной позиции гостевого меню.",
"required": [
"serviceModes",
"minimumQuantity",
"maximumQuantity",
"minimumLeadMinutes",
"bookingHorizonDays"
],
"example": {
"serviceModes": [
"DINE_IN"
],
"minimumQuantity": 1,
"maximumQuantity": null,
"minimumLeadMinutes": null,
"bookingHorizonDays": null
}
}PublicPreorderFulfillmentOptionDto
Публичные режим обслуживания вне зала и варианты клиентского времени по одной активной нативной политике исполнения.
serviceModeОбязательноРежим обслуживания вне зала с активной нативной политикой исполнения.
stringПолное определение
{ "type": "string", "enum": [ "PICKUP", "DELIVERY" ], "description": "Режим обслуживания вне зала с активной нативной политикой исполнения.", "example": "PICKUP" }timingModesОбязательноПоддерживаемые клиентские варианты времени по активной нативной политике. Подсказки не резервируют вместимость; допустимость конкретного запроса определяется availability и достоверным quote.
arrayПолное определение
{ "type": "array", "minItems": 1, "maxItems": 2, "description": "Поддерживаемые клиентские варианты времени по активной нативной политике. Подсказки не резервируют вместимость; допустимость конкретного запроса определяется availability и достоверным quote.", "items": { "type": "string", "enum": [ "ASAP", "SCHEDULED" ], "example": "ASAP" }, "example": [ "ASAP" ] }
Полное определение
{
"type": "object",
"properties": {
"serviceMode": {
"type": "string",
"enum": [
"PICKUP",
"DELIVERY"
],
"description": "Режим обслуживания вне зала с активной нативной политикой исполнения.",
"example": "PICKUP"
},
"timingModes": {
"type": "array",
"minItems": 1,
"maxItems": 2,
"description": "Поддерживаемые клиентские варианты времени по активной нативной политике. Подсказки не резервируют вместимость; допустимость конкретного запроса определяется availability и достоверным quote.",
"items": {
"type": "string",
"enum": [
"ASAP",
"SCHEDULED"
],
"example": "ASAP"
},
"example": [
"ASAP"
]
}
},
"description": "Публичные режим обслуживания вне зала и варианты клиентского времени по одной активной нативной политике исполнения.",
"required": [
"serviceMode",
"timingModes"
],
"example": {
"serviceMode": "PICKUP",
"timingModes": [
"ASAP"
]
}
}PublicPreorderCatalogVenueDto
Публичные данные заведения Hallify для отображения опубликованного каталога предзаказов.
idОбязательноUUID заведения Hallify, которому принадлежит публичный канал предзаказов.
string · uuidПолное определение
{ "type": "string", "format": "uuid", "description": "UUID заведения Hallify, которому принадлежит публичный канал предзаказов.", "example": "90513e6e-3429-4349-8afd-9c5ad89daff8" }nameОбязательноТекущее публичное название заведения.
stringПолное определение
{ "type": "string", "description": "Текущее публичное название заведения.", "example": "Example name" }timeZoneОбязательноЧасовой пояс заведения IANA для запланированного исполнения.
stringПолное определение
{ "type": "string", "description": "Часовой пояс заведения IANA для запланированного исполнения.", "example": "Asia/Tbilisi" }currencyОбязательноВалюта заведения для опубликованных цен продажи меню.
stringПолное определение
{ "type": "string", "pattern": "^[A-Z]{3}$", "description": "Валюта заведения для опубликованных цен продажи меню.", "example": "GEL" }
Полное определение
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "UUID заведения Hallify, которому принадлежит публичный канал предзаказов.",
"example": "90513e6e-3429-4349-8afd-9c5ad89daff8"
},
"name": {
"type": "string",
"description": "Текущее публичное название заведения.",
"example": "Example name"
},
"timeZone": {
"type": "string",
"description": "Часовой пояс заведения IANA для запланированного исполнения.",
"example": "Asia/Tbilisi"
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"description": "Валюта заведения для опубликованных цен продажи меню.",
"example": "GEL"
}
},
"description": "Публичные данные заведения Hallify для отображения опубликованного каталога предзаказов.",
"required": [
"id",
"name",
"timeZone",
"currency"
],
"example": {
"id": "90513e6e-3429-4349-8afd-9c5ad89daff8",
"name": "Example name",
"timeZone": "Asia/Tbilisi",
"currency": "GEL"
}
}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"
}