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

Бронирования и лист ожидания

Принять точное проверенное соглашение гарантии

POST/public/reservations/{publicHandle}/agreements/{changeId}/accept

Однократно потребляет реальное доказательство проверенного контакта и фиксирует явное принятие точных замороженных слота и условий. Фактический возврат или освобождение старых средств и нативный допуск по вместимости предшествуют активации. Исходная квитанция отделена от текущего управления. Обязательный Idempotency-Key возвращает сохранённые статус и тело при повторах с тем же payload; другой payload с этим ключом возвращает 409.

Авторизация

x-hallify-widget-context: <HALLIFY_STOREFRONT_WIDGET_CONTEXT>

Краткосрочный server-authenticated widget presentation proof. Связывает настроенный frame origin с точными проверенными parent binding и connection authority. Новый widget-спрос требует этот proof; существующие native capabilities сохраняют отдельные права и исходные сроки.

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

Параметры

publicHandleПуть · Обязательно

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

string
Полное определение
{
  "type": "string",
  "example": "example"
}
changeIdПуть · Обязательно

Точное проверенное изменение соглашения брони, которое принимается.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "example": "9b6163a8-afea-4877-818b-8e2ae28a2845"
}
idempotency-keyЗаголовок · Обязательно

Обязательный ключ идемпотентности длиной до 128 символов.

string
Полное определение
{
  "type": "string",
  "minLength": 1,
  "maxLength": 128,
  "example": "example"
}
originЗаголовок · Необязательно

Фактический Origin браузерного запроса для проверки текущих прав представления. Обязателен для новых заявок и продолжения через Storefront. Канонические браузерные запросы Hallify используют Origin, настроенный в HALLIFY_PUBLIC_APP_URL. Заголовок передаёт контекст запроса, не авторизует вызывающего и не заменяет соответствующий гостевой ключ.

string · uri
Полное определение
{
  "type": "string",
  "format": "uri",
  "maxLength": 2048,
  "example": "https://example.test/resource"
}
x-hallify-connection-idЗаголовок · Необязательно

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

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

Тело запроса

Обязательно

Acceptance-capability проверенного контакта и точный digest замороженного предложения, явно принятого гостем.

application/json

ReservationAgreementAcceptDto
Полное определение
{
  "$ref": "#/components/schemas/ReservationAgreementAcceptDto"
}

Ответы

200Исходная принятая команда и отдельное текущее продолжение управления.
ReservationAgreementAcceptedResultDto
Полное определение
{
  "$ref": "#/components/schemas/ReservationAgreementAcceptedResultDto"
}
Пример ответа · 200 · application/json
{
  "original": {
    "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
    "referenceCode": "EXAMPLE",
    "revision": 1,
    "status": "example",
    "warningCodes": [
      "EXAMPLE"
    ],
    "eventIds": [
      "6825b43e-93d6-4f3b-8171-c1661099fae8"
    ],
    "agreementChange": {
      "id": "940006a2-9bbf-40d0-86a4-891c3d173dcc",
      "state": "PENDING",
      "planHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
      "expiresAt": "2026-12-31T18:00:00.000Z"
    }
  },
  "manageToken": null,
  "manageTokenExpiresAt": "2026-12-31T18:00:00.000Z",
  "manageAccessState": "CURRENT",
  "currentState": "AVAILABLE",
  "current": {
    "venue": {
      "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
      "name": "Example name",
      "timeZone": "Asia/Tbilisi"
    },
    "publicChannel": {
      "id": "3db2ed63-9466-4829-81aa-e4959a2279b0",
      "publicHandle": "example",
      "status": "DRAFT"
    },
    "servicePeriod": {
      "id": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8",
      "name": "Example name",
      "bookingMode": "INSTANT"
    },
    "source": {
      "kind": "RESERVATION",
      "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
      "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
      "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
      "presentation": {
        "kind": "CANONICAL",
        "connectionId": null,
        "resourceId": null,
        "origin": null
      }
    },
    "grantExpiresAt": "2026-12-31T18:00:00.000Z",
    "serverTime": "2026-01-15T12:00:00.000Z",
    "pendingAgreement": null,
    "guarantee": null,
    "kind": "RESERVATION",
    "id": "a42073ae-5313-4ace-86d8-86fb33fde1a9",
    "referenceCode": "EXAMPLE",
    "revision": 1,
    "status": "REQUESTED",
    "partySize": 1,
    "scheduledAt": "2026-01-15T12:00:00.000Z",
    "endsAt": "2026-12-31T18:00:00.000Z",
    "allowedActions": [
      "CONFIRM"
    ]
  }
}
402Для новых операций требуется покрытие подписки. Отказ также возможен, если у операции нет исходного подтверждения коммерческого допуска. Разрешённое чтение и финансовое восстановление остаются доступны.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 402 · application/json
{
  "statusCode": 402,
  "error": "errors:http.failure",
  "code": "HTTP_402",
  "message": "errors:http.failure",
  "translationKey": "errors:http.failure"
}
409Ключ идемпотентности уже обрабатывается или повторно использован с другим телом.
IdempotencyConflictError
Полное определение
{
  "$ref": "#/components/schemas/IdempotencyConflictError"
}
Пример ответа · 409 · application/json
{
  "statusCode": 409,
  "error": "errors:http.conflict",
  "code": "IDEMPOTENCY_REQUEST_IN_PROGRESS",
  "message": "errors:idempotency.inProgress",
  "translationKey": "errors:idempotency.inProgress"
}
503Не удалось получить достоверное состояние подписки в пределах установленных ограничений. Повторите исходную операцию после восстановления.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 503 · application/json
{
  "statusCode": 503,
  "error": "errors:http.serviceUnavailable",
  "code": "HTTP_SERVICE_UNAVAILABLE",
  "message": "errors:http.serviceUnavailable",
  "translationKey": "errors:http.serviceUnavailable"
}

Схемы

ReservationAgreementAcceptDto

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

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

Точная acceptance-capability контакта, выданная только после реальной проверки существующего гостя.

string
Полное определение
{
  "type": "string",
  "maxLength": 4096,
  "description": "Точная acceptance-capability контакта, выданная только после реальной проверки существующего гостя.",
  "example": "example"
}
planHashОбязательно

Точный digest замороженного предложения, явно принятый после просмотра проверенного предложения.

string
Полное определение
{
  "type": "string",
  "pattern": "^[0-9a-f]{64}$",
  "description": "Точный digest замороженного предложения, явно принятый после просмотра проверенного предложения.",
  "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
}
Полное определение
{
  "type": "object",
  "properties": {
    "capability": {
      "type": "string",
      "maxLength": 4096,
      "description": "Точная acceptance-capability контакта, выданная только после реальной проверки существующего гостя.",
      "example": "example"
    },
    "planHash": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$",
      "description": "Точный digest замороженного предложения, явно принятый после просмотра проверенного предложения.",
      "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
    }
  },
  "required": [
    "capability",
    "planHash"
  ],
  "description": "Явное принятие гостем точного замороженного плана соглашения гарантии брони через исходную capability проверенного контакта.",
  "example": {
    "capability": "example",
    "planHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
  }
}
ReservationAgreementAcceptedResultDto

Исходная принятая нативная команда и отдельное текущее продолжение управления; согласие не утверждает завершённое распоряжение старыми средствами или активацию предложения.

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

Неизменяемая исходная квитанция принятия соглашения; не заменяет отдельное текущее управление.

object
Полное определение
{
  "description": "Неизменяемая исходная квитанция принятия соглашения; не заменяет отдельное текущее управление.",
  "allOf": [
    {
      "type": "object",
      "description": "Неизменяемая исходная квитанция нативной команды отдельно от текущего управления бронью или листом ожидания.",
      "required": [
        "entityId",
        "referenceCode",
        "revision",
        "status",
        "warningCodes",
        "eventIds"
      ],
      "properties": {
        "entityId": {
          "type": "string",
          "format": "uuid",
          "description": "UUID нативной брони или записи ожидания.",
          "example": "6b288694-8b6d-49cd-8007-264ca7224921"
        },
        "referenceCode": {
          "type": "string",
          "description": "Публичный номер, возвращённый исходной командой.",
          "example": "EXAMPLE"
        },
        "revision": {
          "type": "integer",
          "minimum": 1,
          "description": "Нативная ревизия записи после исходной команды.",
          "example": 1
        },
        "status": {
          "type": "string",
          "description": "Нативный статус записи после исходной команды.",
          "example": "example"
        },
        "agreementChange": {
          "type": "object",
          "description": "Исходный неизменяемый результат предложения или принятия соглашения; бронь сохраняет фактическое нативное состояние до активации.",
          "additionalProperties": false,
          "required": [
            "id",
            "state",
            "planHash",
            "expiresAt"
          ],
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "description": "UUID нативного изменения соглашения.",
              "example": "940006a2-9bbf-40d0-86a4-891c3d173dcc"
            },
            "state": {
              "type": "string",
              "enum": [
                "PENDING",
                "ACCEPTED"
              ],
              "description": "Исходное состояние предложения или принятого продолжения.",
              "example": "PENDING"
            },
            "planHash": {
              "type": "string",
              "pattern": "^[0-9a-f]{64}$",
              "description": "Digest точных замороженных слота и условий.",
              "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
            },
            "expiresAt": {
              "type": "string",
              "format": "date-time",
              "description": "Исходный срок активации; повтор не продлевает его.",
              "example": "2026-12-31T18:00:00.000Z"
            }
          },
          "example": {
            "id": "940006a2-9bbf-40d0-86a4-891c3d173dcc",
            "state": "PENDING",
            "planHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
            "expiresAt": "2026-12-31T18:00:00.000Z"
          }
        },
        "warningCodes": {
          "type": "array",
          "description": "Нативные коды предупреждений исходной команды.",
          "items": {
            "type": "string",
            "example": "EXAMPLE"
          },
          "example": [
            "EXAMPLE"
          ]
        },
        "eventIds": {
          "type": "array",
          "description": "UUID нативных событий активности, записанных исходной командой.",
          "items": {
            "type": "string",
            "format": "uuid",
            "example": "6825b43e-93d6-4f3b-8171-c1661099fae8"
          },
          "example": [
            "6825b43e-93d6-4f3b-8171-c1661099fae8"
          ]
        }
      },
      "example": {
        "agreementChange": {
          "id": "940006a2-9bbf-40d0-86a4-891c3d173dcc",
          "state": "PENDING",
          "planHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
          "expiresAt": "2026-12-31T18:00:00.000Z"
        },
        "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
        "referenceCode": "EXAMPLE",
        "revision": 1,
        "status": "example",
        "warningCodes": [
          "EXAMPLE"
        ],
        "eventIds": [
          "6825b43e-93d6-4f3b-8171-c1661099fae8"
        ]
      }
    }
  ],
  "type": "object",
  "required": [
    "agreementChange"
  ],
  "properties": {
    "agreementChange": {
      "type": "object",
      "description": "Исходный неизменяемый результат предложения или принятия соглашения; бронь сохраняет фактическое нативное состояние до активации.",
      "additionalProperties": false,
      "required": [
        "id",
        "state",
        "planHash",
        "expiresAt"
      ],
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "description": "UUID нативного изменения соглашения.",
          "example": "940006a2-9bbf-40d0-86a4-891c3d173dcc"
        },
        "state": {
          "type": "string",
          "enum": [
            "PENDING",
            "ACCEPTED"
          ],
          "description": "Исходное состояние предложения или принятого продолжения.",
          "example": "PENDING"
        },
        "planHash": {
          "type": "string",
          "pattern": "^[0-9a-f]{64}$",
          "description": "Digest точных замороженных слота и условий.",
          "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
        },
        "expiresAt": {
          "type": "string",
          "format": "date-time",
          "description": "Исходный срок активации; повтор не продлевает его.",
          "example": "2026-12-31T18:00:00.000Z"
        }
      },
      "example": {
        "id": "940006a2-9bbf-40d0-86a4-891c3d173dcc",
        "state": "PENDING",
        "planHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
        "expiresAt": "2026-12-31T18:00:00.000Z"
      }
    }
  },
  "example": {
    "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
    "referenceCode": "EXAMPLE",
    "revision": 1,
    "status": "example",
    "warningCodes": [
      "EXAMPLE"
    ],
    "eventIds": [
      "6825b43e-93d6-4f3b-8171-c1661099fae8"
    ],
    "agreementChange": {
      "id": "940006a2-9bbf-40d0-86a4-891c3d173dcc",
      "state": "PENDING",
      "planHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
      "expiresAt": "2026-12-31T18:00:00.000Z"
    }
  }
}
manageTokenОбязательно

Исходная manage-capability проверенного контакта либо null при необходимости нового доказательства.

string · null
Полное определение
{
  "type": "string",
  "nullable": true,
  "description": "Исходная manage-capability проверенного контакта либо null при необходимости нового доказательства.",
  "example": "synthetic-example-credential"
}
manageTokenExpiresAtОбязательно

Исходный срок управления; повторы не обновляют его.

string · date-time
Полное определение
{
  "type": "string",
  "format": "date-time",
  "description": "Исходный срок управления; повторы не обновляют его.",
  "example": "2026-12-31T18:00:00.000Z"
}
manageAccessStateОбязательно

Текущая пригодность исходного выданного доступа управления.

string
Полное определение
{
  "type": "string",
  "enum": [
    "CURRENT",
    "REPROOF_REQUIRED"
  ],
  "description": "Текущая пригодность исходного выданного доступа управления.",
  "example": "CURRENT"
}
currentStateОбязательно

Доступность отдельного текущего разрешённого управления.

string
Полное определение
{
  "type": "string",
  "enum": [
    "AVAILABLE",
    "UNAVAILABLE"
  ],
  "description": "Доступность отдельного текущего разрешённого управления.",
  "example": "AVAILABLE"
}
currentОбязательно

Отдельное текущее разрешённое состояние либо null при недоступном обогащении.

oneOf
Полное определение
{
  "description": "Отдельное текущее разрешённое состояние либо null при недоступном обогащении.",
  "oneOf": [
    {
      "description": "Текущее безопасное гостевое управление при точном нативном READ-доступе и текущих правах presentation. Отделено от неизменяемой исходной квитанции команды.",
      "oneOf": [
        {
          "type": "object",
          "description": "Текущий контекст брони и нативные действия в пределах capability.",
          "additionalProperties": false,
          "required": [
            "kind",
            "id",
            "referenceCode",
            "revision",
            "status",
            "partySize",
            "scheduledAt",
            "endsAt",
            "venue",
            "publicChannel",
            "servicePeriod",
            "source",
            "grantExpiresAt",
            "serverTime",
            "allowedActions",
            "guarantee",
            "pendingAgreement"
          ],
          "properties": {
            "venue": {
              "type": "object",
              "description": "Текущий нативный контекст отображения заведения и расписания.",
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "timeZone"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "UUID заведения-владельца.",
                  "example": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0"
                },
                "name": {
                  "type": "string",
                  "description": "Текущее публичное название заведения.",
                  "example": "Example name"
                },
                "timeZone": {
                  "type": "string",
                  "description": "Нативный часовой пояс заведения в формате IANA.",
                  "example": "Asia/Tbilisi"
                }
              },
              "example": {
                "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
                "name": "Example name",
                "timeZone": "Asia/Tbilisi"
              }
            },
            "publicChannel": {
              "type": "object",
              "description": "Нативный публичный канал записи-владельца, независимый от handle представления Storefront. Его текущий статус не заменяет разрешение продолжения.",
              "additionalProperties": false,
              "required": [
                "id",
                "publicHandle",
                "status"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "UUID нативного канала.",
                  "example": "3db2ed63-9466-4829-81aa-e4959a2279b0"
                },
                "publicHandle": {
                  "type": "string",
                  "description": "Handle нативного канала бронирования.",
                  "example": "example"
                },
                "status": {
                  "type": "string",
                  "description": "Текущий жизненный цикл нативного публичного канала.",
                  "enum": [
                    "DRAFT",
                    "ACTIVE",
                    "PAUSED"
                  ],
                  "example": "DRAFT"
                }
              },
              "example": {
                "id": "3db2ed63-9466-4829-81aa-e4959a2279b0",
                "publicHandle": "example",
                "status": "DRAFT"
              }
            },
            "servicePeriod": {
              "type": "object",
              "description": "Текущие нативные ID периода обслуживания и режим бронирования.",
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "bookingMode"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "UUID нативного периода обслуживания.",
                  "example": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8"
                },
                "name": {
                  "type": "string",
                  "description": "Текущее название периода обслуживания.",
                  "example": "Example name"
                },
                "bookingMode": {
                  "type": "string",
                  "description": "Текущий режим периода обслуживания; не переписывает исходную квитанцию бронирования.",
                  "enum": [
                    "INSTANT",
                    "REQUEST"
                  ],
                  "example": "INSTANT"
                }
              },
              "example": {
                "id": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8",
                "name": "Example name",
                "bookingMode": "INSTANT"
              }
            },
            "source": {
              "type": "object",
              "description": "Несекретный точный набор нативного владельца и исходное представление доступа. Эти ID не дают прав и не разрешают менять origin, подключения или capability.",
              "additionalProperties": false,
              "required": [
                "kind",
                "entityId",
                "venueId",
                "publicChannelId",
                "presentation"
              ],
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "RESERVATION",
                    "WAITLIST"
                  ],
                  "description": "Вид нативного владельца.",
                  "example": "RESERVATION"
                },
                "entityId": {
                  "type": "string",
                  "format": "uuid",
                  "description": "Точный UUID брони или записи ожидания владельца.",
                  "example": "6b288694-8b6d-49cd-8007-264ca7224921"
                },
                "venueId": {
                  "type": "string",
                  "format": "uuid",
                  "description": "UUID нативного заведения владельца.",
                  "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
                },
                "publicChannelId": {
                  "type": "string",
                  "format": "uuid",
                  "description": "UUID нативного канала владельца.",
                  "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
                },
                "presentation": {
                  "type": "object",
                  "description": "Неизменяемая классификация выдачи. CANONICAL содержит null в полях Storefront; STOREFRONT сохраняет точные исходные подключение, прикреплённый ресурс и Origin запроса.",
                  "additionalProperties": false,
                  "required": [
                    "kind",
                    "connectionId",
                    "resourceId",
                    "origin"
                  ],
                  "properties": {
                    "kind": {
                      "type": "string",
                      "enum": [
                        "CANONICAL",
                        "STOREFRONT"
                      ],
                      "description": "Исходный контекст выдачи доступа.",
                      "example": "CANONICAL"
                    },
                    "connectionId": {
                      "type": "string",
                      "format": "uuid",
                      "nullable": true,
                      "description": "UUID исходного подключения Storefront либо null для канонической выдачи.",
                      "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
                    },
                    "resourceId": {
                      "type": "string",
                      "format": "uuid",
                      "nullable": true,
                      "description": "UUID исходного прикреплённого ресурса Storefront либо null для канонической выдачи.",
                      "example": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568"
                    },
                    "origin": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "Точный исходный Origin браузера Storefront либо null для канонической выдачи.",
                      "example": "https://example.test/resource"
                    }
                  },
                  "example": {
                    "kind": "CANONICAL",
                    "connectionId": null,
                    "resourceId": null,
                    "origin": null
                  }
                }
              },
              "example": {
                "kind": "RESERVATION",
                "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
                "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
                "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
                "presentation": {
                  "kind": "CANONICAL",
                  "connectionId": null,
                  "resourceId": null,
                  "origin": null
                }
              }
            },
            "grantExpiresAt": {
              "type": "string",
              "format": "date-time",
              "description": "Исходный срок нативной manage-capability; чтение не продлевает его.",
              "example": "2026-12-31T18:00:00.000Z"
            },
            "serverTime": {
              "type": "string",
              "format": "date-time",
              "description": "Серверный момент для допустимости текущего действия и срока принятия приглашения.",
              "example": "2026-01-15T12:00:00.000Z"
            },
            "pendingAgreement": {
              "type": "object",
              "description": "Текущее ожидающее предложение или принятое продолжение либо null; до активации оно не меняет фактический нативный слот.",
              "additionalProperties": false,
              "required": [
                "id",
                "action",
                "state",
                "revision",
                "planHash",
                "expiresAt",
                "scheduledAt",
                "endsAt",
                "partySize",
                "servicePeriodId",
                "offer",
                "activatedAgreementVersion",
                "activatedReservationRevision"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "UUID нативного изменения соглашения.",
                  "example": "5a694cf6-acf7-40fd-81e6-92ec0fa6c91f"
                },
                "action": {
                  "type": "string",
                  "enum": [
                    "CHANGE",
                    "RESTORE"
                  ],
                  "description": "Явное предложенное нативное действие.",
                  "example": "CHANGE"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "PENDING",
                    "ACCEPTED",
                    "ACTIVATED",
                    "EXPIRED",
                    "SUPERSEDED"
                  ],
                  "description": "Текущее нативное состояние продолжения.",
                  "example": "PENDING"
                },
                "revision": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Текущая нативная ревизия предложения.",
                  "example": 1
                },
                "planHash": {
                  "type": "string",
                  "pattern": "^[0-9a-f]{64}$",
                  "description": "Digest точных замороженных слота и условий.",
                  "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
                },
                "expiresAt": {
                  "type": "string",
                  "format": "date-time",
                  "description": "Фиксированный срок активации.",
                  "example": "2026-12-31T18:00:00.000Z"
                },
                "scheduledAt": {
                  "type": "string",
                  "format": "date-time",
                  "description": "Точный предложенный запланированный момент.",
                  "example": "2026-01-15T12:00:00.000Z"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time",
                  "description": "Точный предложенный момент окончания визита.",
                  "example": "2026-12-31T18:00:00.000Z"
                },
                "partySize": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 99,
                  "description": "Точное предложенное число гостей.",
                  "example": 1
                },
                "servicePeriodId": {
                  "type": "string",
                  "format": "uuid",
                  "description": "Предложенный нативный период обслуживания.",
                  "example": "4846c409-f4df-40f6-81cc-1d7157a5c646"
                },
                "offer": {
                  "type": "object",
                  "description": "Предложение гарантии, рассчитанное сервером, с условиями и их дайджестом. При NONE или числе гостей ниже настроенного порога гарантия не требуется.",
                  "additionalProperties": false,
                  "required": [
                    "required",
                    "terms",
                    "termsHash"
                  ],
                  "properties": {
                    "required": {
                      "type": "boolean",
                      "description": "Требуют ли точные слот и число гостей гарантию.",
                      "example": true
                    },
                    "terms": {
                      "type": "object",
                      "description": "Точные принятые условия либо null, если гарантия не применяется.",
                      "additionalProperties": false,
                      "required": [
                        "schema",
                        "version",
                        "venueId",
                        "publicChannelId",
                        "servicePeriodId",
                        "servicePeriodRevision",
                        "kind",
                        "amountBasis",
                        "unitAmount",
                        "totalAmount",
                        "currency",
                        "currencyMinorUnit",
                        "partySize",
                        "scheduledAt",
                        "dueAt",
                        "freeCancellationAt",
                        "noShowAfter",
                        "forfeitOnLateCancellation",
                        "forfeitOnNoShow",
                        "termsVersion",
                        "privacyVersion"
                      ],
                      "properties": {
                        "schema": {
                          "type": "string",
                          "enum": [
                            "hallify.reservation-guarantee.terms"
                          ],
                          "description": "Каноническая схема нативных условий.",
                          "example": "hallify.reservation-guarantee.terms"
                        },
                        "version": {
                          "type": "integer",
                          "enum": [
                            1
                          ],
                          "description": "Каноническая версия нативных условий.",
                          "example": 1
                        },
                        "venueId": {
                          "type": "string",
                          "format": "uuid",
                          "description": "UUID нативного заведения.",
                          "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
                        },
                        "publicChannelId": {
                          "type": "string",
                          "format": "uuid",
                          "description": "UUID нативного канала бронирования.",
                          "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
                        },
                        "servicePeriodId": {
                          "type": "string",
                          "format": "uuid",
                          "description": "UUID выбранного нативного периода обслуживания.",
                          "example": "4846c409-f4df-40f6-81cc-1d7157a5c646"
                        },
                        "servicePeriodRevision": {
                          "type": "integer",
                          "minimum": 1,
                          "description": "Принятая нативная ревизия периода обслуживания.",
                          "example": 1
                        },
                        "kind": {
                          "type": "string",
                          "enum": [
                            "DEPOSIT",
                            "CARD_HOLD",
                            "PREPAID"
                          ],
                          "description": "Исходный принятый вид гарантии.",
                          "example": "DEPOSIT"
                        },
                        "amountBasis": {
                          "type": "string",
                          "enum": [
                            "FIXED",
                            "PER_GUEST"
                          ],
                          "description": "Исходный способ расчёта суммы.",
                          "example": "FIXED"
                        },
                        "unitAmount": {
                          "type": "string",
                          "pattern": "^(0|[1-9][0-9]{0,9})\\.[0-9]{2}$",
                          "description": "Точная сумма за бронь или гостя с двумя десятичными знаками.",
                          "example": "1.00"
                        },
                        "totalAmount": {
                          "type": "string",
                          "pattern": "^(0|[1-9][0-9]{0,9})\\.[0-9]{2}$",
                          "description": "Точный принятый общий principal с двумя десятичными знаками без чаевых.",
                          "example": "1.00"
                        },
                        "currency": {
                          "type": "string",
                          "pattern": "^[A-Z]{3}$",
                          "description": "Исходная нативная валюта; конвертация не выполняется.",
                          "example": "GEL"
                        },
                        "currencyMinorUnit": {
                          "type": "integer",
                          "enum": [
                            2
                          ],
                          "description": "Нативная денежная точность.",
                          "example": 2
                        },
                        "partySize": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 99,
                          "description": "Точное принятое число гостей.",
                          "example": 1
                        },
                        "scheduledAt": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Точный запланированный момент слота в UTC.",
                          "example": "2026-01-15T12:00:00.000Z"
                        },
                        "dueAt": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Точный срок оплаты до конвертации и сбора средств.",
                          "example": "2026-12-31T18:00:00.000Z"
                        },
                        "freeCancellationAt": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Точная граница бесплатной отмены.",
                          "example": "2026-01-15T12:00:00.000Z"
                        },
                        "noShowAfter": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Самый ранний момент удержания за неявку по принятому льготному периоду.",
                          "example": "2026-01-15T12:00:00.000Z"
                        },
                        "forfeitOnLateCancellation": {
                          "type": "boolean",
                          "description": "Принятое разрешение явного удержания сотрудником при поздней отмене.",
                          "example": true
                        },
                        "forfeitOnNoShow": {
                          "type": "boolean",
                          "description": "Принятое разрешение явного удержания сотрудником при неявке; автоматического списания с карты нет.",
                          "example": true
                        },
                        "termsVersion": {
                          "type": "string",
                          "description": "Принятая версия публичных условий.",
                          "example": "example"
                        },
                        "privacyVersion": {
                          "type": "string",
                          "description": "Принятая версия уведомления о конфиденциальности.",
                          "example": "example"
                        }
                      },
                      "nullable": true,
                      "example": {
                        "schema": "hallify.reservation-guarantee.terms",
                        "version": 1,
                        "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
                        "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
                        "servicePeriodId": "4846c409-f4df-40f6-81cc-1d7157a5c646",
                        "servicePeriodRevision": 1,
                        "kind": "DEPOSIT",
                        "amountBasis": "FIXED",
                        "unitAmount": "1.00",
                        "totalAmount": "1.00",
                        "currency": "GEL",
                        "currencyMinorUnit": 2,
                        "partySize": 1,
                        "scheduledAt": "2026-01-15T12:00:00.000Z",
                        "dueAt": "2026-12-31T18:00:00.000Z",
                        "freeCancellationAt": "2026-01-15T12:00:00.000Z",
                        "noShowAfter": "2026-01-15T12:00:00.000Z",
                        "forfeitOnLateCancellation": true,
                        "forfeitOnNoShow": true,
                        "termsVersion": "example",
                        "privacyVersion": "example"
                      }
                    },
                    "termsHash": {
                      "type": "string",
                      "pattern": "^[0-9a-f]{64}$",
                      "nullable": true,
                      "description": "Канонический digest принятых условий либо null, если гарантия не применяется.",
                      "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
                    }
                  },
                  "example": {
                    "required": true,
                    "terms": null,
                    "termsHash": null
                  }
                },
                "activatedAgreementVersion": {
                  "type": "integer",
                  "minimum": 1,
                  "nullable": true,
                  "description": "Фактически активированная версия соглашения либо null до активации.",
                  "example": 1
                },
                "activatedReservationRevision": {
                  "type": "integer",
                  "minimum": 1,
                  "nullable": true,
                  "description": "Фактическая нативная ревизия, записанная активацией, либо null.",
                  "example": 1
                }
              },
              "nullable": true,
              "example": {
                "id": "5a694cf6-acf7-40fd-81e6-92ec0fa6c91f",
                "action": "CHANGE",
                "state": "PENDING",
                "revision": 1,
                "planHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
                "expiresAt": "2026-12-31T18:00:00.000Z",
                "scheduledAt": "2026-01-15T12:00:00.000Z",
                "endsAt": "2026-12-31T18:00:00.000Z",
                "partySize": 1,
                "servicePeriodId": "4846c409-f4df-40f6-81cc-1d7157a5c646",
                "offer": {
                  "required": true,
                  "terms": null,
                  "termsHash": null
                },
                "activatedAgreementVersion": null,
                "activatedReservationRevision": null
              }
            },
            "guarantee": {
              "type": "object",
              "nullable": true,
              "description": "Фактическая нативная гарантия и её неизменяемые исходные принятые условия либо null при отсутствии обязательства.",
              "required": [
                "id",
                "kind",
                "status",
                "amount",
                "currency",
                "dueAt",
                "termsHash",
                "terms",
                "authorizationExpiresAt"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "UUID фактической нативной гарантии.",
                  "example": "d8c59877-4141-422c-8bcd-eb23a54e43ad"
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "DEPOSIT",
                    "CARD_HOLD",
                    "PREPAID"
                  ],
                  "description": "Исходный вид гарантии.",
                  "example": "DEPOSIT"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PENDING",
                    "SATISFIED",
                    "WAIVED",
                    "EXPIRED",
                    "REFUNDED",
                    "FORFEITED"
                  ],
                  "description": "Текущий нативный жизненный цикл гарантии.",
                  "example": "PENDING"
                },
                "amount": {
                  "type": "string",
                  "pattern": "^(0|[1-9][0-9]{0,9})\\.[0-9]{2}$",
                  "description": "Исходный точный нативный principal гарантии.",
                  "example": "1.00"
                },
                "currency": {
                  "type": "string",
                  "pattern": "^[A-Z]{3}$",
                  "description": "Исходная нативная валюта.",
                  "example": "GEL"
                },
                "dueAt": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true,
                  "description": "Исходный срок оплаты либо null для legacy-свидетельства.",
                  "example": "2026-12-31T18:00:00.000Z"
                },
                "termsHash": {
                  "type": "string",
                  "pattern": "^[0-9a-f]{64}$",
                  "nullable": true,
                  "description": "Неизменяемый digest принятых условий либо null для legacy-свидетельства.",
                  "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
                },
                "terms": {
                  "type": "object",
                  "description": "Исходные принятые нативные условия гарантии либо null для legacy-свидетельства.",
                  "additionalProperties": false,
                  "required": [
                    "schema",
                    "version",
                    "venueId",
                    "publicChannelId",
                    "servicePeriodId",
                    "servicePeriodRevision",
                    "kind",
                    "amountBasis",
                    "unitAmount",
                    "totalAmount",
                    "currency",
                    "currencyMinorUnit",
                    "partySize",
                    "scheduledAt",
                    "dueAt",
                    "freeCancellationAt",
                    "noShowAfter",
                    "forfeitOnLateCancellation",
                    "forfeitOnNoShow",
                    "termsVersion",
                    "privacyVersion"
                  ],
                  "properties": {
                    "schema": {
                      "type": "string",
                      "enum": [
                        "hallify.reservation-guarantee.terms"
                      ],
                      "description": "Каноническая схема нативных условий.",
                      "example": "hallify.reservation-guarantee.terms"
                    },
                    "version": {
                      "type": "integer",
                      "enum": [
                        1
                      ],
                      "description": "Каноническая версия нативных условий.",
                      "example": 1
                    },
                    "venueId": {
                      "type": "string",
                      "format": "uuid",
                      "description": "UUID нативного заведения.",
                      "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
                    },
                    "publicChannelId": {
                      "type": "string",
                      "format": "uuid",
                      "description": "UUID нативного канала бронирования.",
                      "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
                    },
                    "servicePeriodId": {
                      "type": "string",
                      "format": "uuid",
                      "description": "UUID выбранного нативного периода обслуживания.",
                      "example": "4846c409-f4df-40f6-81cc-1d7157a5c646"
                    },
                    "servicePeriodRevision": {
                      "type": "integer",
                      "minimum": 1,
                      "description": "Принятая нативная ревизия периода обслуживания.",
                      "example": 1
                    },
                    "kind": {
                      "type": "string",
                      "enum": [
                        "DEPOSIT",
                        "CARD_HOLD",
                        "PREPAID"
                      ],
                      "description": "Исходный принятый вид гарантии.",
                      "example": "DEPOSIT"
                    },
                    "amountBasis": {
                      "type": "string",
                      "enum": [
                        "FIXED",
                        "PER_GUEST"
                      ],
                      "description": "Исходный способ расчёта суммы.",
                      "example": "FIXED"
                    },
                    "unitAmount": {
                      "type": "string",
                      "pattern": "^(0|[1-9][0-9]{0,9})\\.[0-9]{2}$",
                      "description": "Точная сумма за бронь или гостя с двумя десятичными знаками.",
                      "example": "1.00"
                    },
                    "totalAmount": {
                      "type": "string",
                      "pattern": "^(0|[1-9][0-9]{0,9})\\.[0-9]{2}$",
                      "description": "Точный принятый общий principal с двумя десятичными знаками без чаевых.",
                      "example": "1.00"
                    },
                    "currency": {
                      "type": "string",
                      "pattern": "^[A-Z]{3}$",
                      "description": "Исходная нативная валюта; конвертация не выполняется.",
                      "example": "GEL"
                    },
                    "currencyMinorUnit": {
                      "type": "integer",
                      "enum": [
                        2
                      ],
                      "description": "Нативная денежная точность.",
                      "example": 2
                    },
                    "partySize": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 99,
                      "description": "Точное принятое число гостей.",
                      "example": 1
                    },
                    "scheduledAt": {
                      "type": "string",
                      "format": "date-time",
                      "description": "Точный запланированный момент слота в UTC.",
                      "example": "2026-01-15T12:00:00.000Z"
                    },
                    "dueAt": {
                      "type": "string",
                      "format": "date-time",
                      "description": "Точный срок оплаты до конвертации и сбора средств.",
                      "example": "2026-12-31T18:00:00.000Z"
                    },
                    "freeCancellationAt": {
                      "type": "string",
                      "format": "date-time",
                      "description": "Точная граница бесплатной отмены.",
                      "example": "2026-01-15T12:00:00.000Z"
                    },
                    "noShowAfter": {
                      "type": "string",
                      "format": "date-time",
                      "description": "Самый ранний момент удержания за неявку по принятому льготному периоду.",
                      "example": "2026-01-15T12:00:00.000Z"
                    },
                    "forfeitOnLateCancellation": {
                      "type": "boolean",
                      "description": "Принятое разрешение явного удержания сотрудником при поздней отмене.",
                      "example": true
                    },
                    "forfeitOnNoShow": {
                      "type": "boolean",
                      "description": "Принятое разрешение явного удержания сотрудником при неявке; автоматического списания с карты нет.",
                      "example": true
                    },
                    "termsVersion": {
                      "type": "string",
                      "description": "Принятая версия публичных условий.",
                      "example": "example"
                    },
                    "privacyVersion": {
                      "type": "string",
                      "description": "Принятая версия уведомления о конфиденциальности.",
                      "example": "example"
                    }
                  },
                  "nullable": true,
                  "example": {
                    "schema": "hallify.reservation-guarantee.terms",
                    "version": 1,
                    "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
                    "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
                    "servicePeriodId": "4846c409-f4df-40f6-81cc-1d7157a5c646",
                    "servicePeriodRevision": 1,
                    "kind": "DEPOSIT",
                    "amountBasis": "FIXED",
                    "unitAmount": "1.00",
                    "totalAmount": "1.00",
                    "currency": "GEL",
                    "currencyMinorUnit": 2,
                    "partySize": 1,
                    "scheduledAt": "2026-01-15T12:00:00.000Z",
                    "dueAt": "2026-12-31T18:00:00.000Z",
                    "freeCancellationAt": "2026-01-15T12:00:00.000Z",
                    "noShowAfter": "2026-01-15T12:00:00.000Z",
                    "forfeitOnLateCancellation": true,
                    "forfeitOnNoShow": true,
                    "termsVersion": "example",
                    "privacyVersion": "example"
                  }
                },
                "authorizationExpiresAt": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true,
                  "description": "Доказанный срок авторизации PSP либо null без аутентифицированных данных.",
                  "example": "2026-12-31T18:00:00.000Z"
                }
              },
              "example": {
                "id": "d8c59877-4141-422c-8bcd-eb23a54e43ad",
                "kind": "DEPOSIT",
                "status": "PENDING",
                "amount": "1.00",
                "currency": "GEL",
                "dueAt": null,
                "termsHash": null,
                "terms": null,
                "authorizationExpiresAt": null
              }
            },
            "kind": {
              "type": "string",
              "enum": [
                "RESERVATION"
              ],
              "description": "Вид нативного владельца.",
              "example": "RESERVATION"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "description": "UUID брони, которой владеет capability.",
              "example": "a42073ae-5313-4ace-86d8-86fb33fde1a9"
            },
            "referenceCode": {
              "type": "string",
              "description": "Ссылочный код для гостя.",
              "example": "EXAMPLE"
            },
            "revision": {
              "type": "integer",
              "minimum": 1,
              "description": "Текущая нативная ревизия брони.",
              "example": 1
            },
            "status": {
              "type": "string",
              "enum": [
                "REQUESTED",
                "BOOKED",
                "CONFIRMED",
                "ARRIVED",
                "SEATED",
                "CANCELED",
                "NO_SHOW",
                "DECLINED",
                "EXPIRED"
              ],
              "description": "Текущий нативный жизненный цикл брони.",
              "example": "REQUESTED"
            },
            "partySize": {
              "type": "integer",
              "minimum": 1,
              "maximum": 99,
              "description": "Текущее число гостей.",
              "example": 1
            },
            "scheduledAt": {
              "type": "string",
              "format": "date-time",
              "description": "Текущий запланированный момент прибытия.",
              "example": "2026-01-15T12:00:00.000Z"
            },
            "endsAt": {
              "type": "string",
              "format": "date-time",
              "description": "Текущее запланированное окончание брони.",
              "example": "2026-12-31T18:00:00.000Z"
            },
            "allowedActions": {
              "type": "array",
              "description": "Действия, разрешённые текущим жизненным циклом и scope доступа. Выполнение перепроверяет ревизию, представление, коммерческий допуск, правила и вместимость.",
              "uniqueItems": true,
              "maxItems": 3,
              "items": {
                "type": "string",
                "enum": [
                  "CONFIRM",
                  "CHANGE",
                  "CANCEL"
                ],
                "description": "Доступная нативная гостевая команда.",
                "example": "CONFIRM"
              },
              "example": [
                "CONFIRM"
              ]
            }
          },
          "example": {
            "venue": {
              "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
              "name": "Example name",
              "timeZone": "Asia/Tbilisi"
            },
            "publicChannel": {
              "id": "3db2ed63-9466-4829-81aa-e4959a2279b0",
              "publicHandle": "example",
              "status": "DRAFT"
            },
            "servicePeriod": {
              "id": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8",
              "name": "Example name",
              "bookingMode": "INSTANT"
            },
            "source": {
              "kind": "RESERVATION",
              "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
              "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
              "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
              "presentation": {
                "kind": "CANONICAL",
                "connectionId": null,
                "resourceId": null,
                "origin": null
              }
            },
            "grantExpiresAt": "2026-12-31T18:00:00.000Z",
            "serverTime": "2026-01-15T12:00:00.000Z",
            "pendingAgreement": null,
            "guarantee": null,
            "kind": "RESERVATION",
            "id": "a42073ae-5313-4ace-86d8-86fb33fde1a9",
            "referenceCode": "EXAMPLE",
            "revision": 1,
            "status": "REQUESTED",
            "partySize": 1,
            "scheduledAt": "2026-01-15T12:00:00.000Z",
            "endsAt": "2026-12-31T18:00:00.000Z",
            "allowedActions": [
              "CONFIRM"
            ]
          }
        },
        {
          "type": "object",
          "description": "Текущий контекст ожидания, безопасная оценка времени и нативные действия в пределах capability.",
          "additionalProperties": false,
          "required": [
            "kind",
            "id",
            "referenceCode",
            "revision",
            "status",
            "partySize",
            "claimExpiresAt",
            "quotedWaitMinMinutes",
            "quotedWaitMaxMinutes",
            "estimatedSeatAt",
            "venue",
            "publicChannel",
            "servicePeriod",
            "source",
            "grantExpiresAt",
            "serverTime",
            "allowedActions"
          ],
          "properties": {
            "venue": {
              "type": "object",
              "description": "Текущий нативный контекст отображения заведения и расписания.",
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "timeZone"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "UUID заведения-владельца.",
                  "example": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0"
                },
                "name": {
                  "type": "string",
                  "description": "Текущее публичное название заведения.",
                  "example": "Example name"
                },
                "timeZone": {
                  "type": "string",
                  "description": "Нативный часовой пояс заведения в формате IANA.",
                  "example": "Asia/Tbilisi"
                }
              },
              "example": {
                "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
                "name": "Example name",
                "timeZone": "Asia/Tbilisi"
              }
            },
            "publicChannel": {
              "type": "object",
              "description": "Нативный публичный канал записи-владельца, независимый от handle представления Storefront. Его текущий статус не заменяет разрешение продолжения.",
              "additionalProperties": false,
              "required": [
                "id",
                "publicHandle",
                "status"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "UUID нативного канала.",
                  "example": "3db2ed63-9466-4829-81aa-e4959a2279b0"
                },
                "publicHandle": {
                  "type": "string",
                  "description": "Handle нативного канала бронирования.",
                  "example": "example"
                },
                "status": {
                  "type": "string",
                  "description": "Текущий жизненный цикл нативного публичного канала.",
                  "enum": [
                    "DRAFT",
                    "ACTIVE",
                    "PAUSED"
                  ],
                  "example": "DRAFT"
                }
              },
              "example": {
                "id": "3db2ed63-9466-4829-81aa-e4959a2279b0",
                "publicHandle": "example",
                "status": "DRAFT"
              }
            },
            "servicePeriod": {
              "type": "object",
              "description": "Текущие нативные ID периода обслуживания и режим бронирования.",
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "bookingMode"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "UUID нативного периода обслуживания.",
                  "example": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8"
                },
                "name": {
                  "type": "string",
                  "description": "Текущее название периода обслуживания.",
                  "example": "Example name"
                },
                "bookingMode": {
                  "type": "string",
                  "description": "Текущий режим периода обслуживания; не переписывает исходную квитанцию бронирования.",
                  "enum": [
                    "INSTANT",
                    "REQUEST"
                  ],
                  "example": "INSTANT"
                }
              },
              "example": {
                "id": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8",
                "name": "Example name",
                "bookingMode": "INSTANT"
              }
            },
            "source": {
              "type": "object",
              "description": "Несекретный точный набор нативного владельца и исходное представление доступа. Эти ID не дают прав и не разрешают менять origin, подключения или capability.",
              "additionalProperties": false,
              "required": [
                "kind",
                "entityId",
                "venueId",
                "publicChannelId",
                "presentation"
              ],
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "RESERVATION",
                    "WAITLIST"
                  ],
                  "description": "Вид нативного владельца.",
                  "example": "RESERVATION"
                },
                "entityId": {
                  "type": "string",
                  "format": "uuid",
                  "description": "Точный UUID брони или записи ожидания владельца.",
                  "example": "6b288694-8b6d-49cd-8007-264ca7224921"
                },
                "venueId": {
                  "type": "string",
                  "format": "uuid",
                  "description": "UUID нативного заведения владельца.",
                  "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
                },
                "publicChannelId": {
                  "type": "string",
                  "format": "uuid",
                  "description": "UUID нативного канала владельца.",
                  "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
                },
                "presentation": {
                  "type": "object",
                  "description": "Неизменяемая классификация выдачи. CANONICAL содержит null в полях Storefront; STOREFRONT сохраняет точные исходные подключение, прикреплённый ресурс и Origin запроса.",
                  "additionalProperties": false,
                  "required": [
                    "kind",
                    "connectionId",
                    "resourceId",
                    "origin"
                  ],
                  "properties": {
                    "kind": {
                      "type": "string",
                      "enum": [
                        "CANONICAL",
                        "STOREFRONT"
                      ],
                      "description": "Исходный контекст выдачи доступа.",
                      "example": "CANONICAL"
                    },
                    "connectionId": {
                      "type": "string",
                      "format": "uuid",
                      "nullable": true,
                      "description": "UUID исходного подключения Storefront либо null для канонической выдачи.",
                      "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
                    },
                    "resourceId": {
                      "type": "string",
                      "format": "uuid",
                      "nullable": true,
                      "description": "UUID исходного прикреплённого ресурса Storefront либо null для канонической выдачи.",
                      "example": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568"
                    },
                    "origin": {
                      "type": "string",
                      "format": "uri",
                      "nullable": true,
                      "description": "Точный исходный Origin браузера Storefront либо null для канонической выдачи.",
                      "example": "https://example.test/resource"
                    }
                  },
                  "example": {
                    "kind": "CANONICAL",
                    "connectionId": null,
                    "resourceId": null,
                    "origin": null
                  }
                }
              },
              "example": {
                "kind": "RESERVATION",
                "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
                "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
                "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
                "presentation": {
                  "kind": "CANONICAL",
                  "connectionId": null,
                  "resourceId": null,
                  "origin": null
                }
              }
            },
            "grantExpiresAt": {
              "type": "string",
              "format": "date-time",
              "description": "Исходный срок нативной manage-capability; чтение не продлевает его.",
              "example": "2026-12-31T18:00:00.000Z"
            },
            "serverTime": {
              "type": "string",
              "format": "date-time",
              "description": "Серверный момент для допустимости текущего действия и срока принятия приглашения.",
              "example": "2026-01-15T12:00:00.000Z"
            },
            "kind": {
              "type": "string",
              "enum": [
                "WAITLIST"
              ],
              "description": "Вид нативного владельца.",
              "example": "WAITLIST"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "description": "UUID записи ожидания, которой владеет capability.",
              "example": "a7476fce-e842-42a4-896a-c23b0e88b420"
            },
            "referenceCode": {
              "type": "string",
              "description": "Ссылочный код для гостя.",
              "example": "EXAMPLE"
            },
            "revision": {
              "type": "integer",
              "minimum": 1,
              "description": "Текущая нативная ревизия записи ожидания.",
              "example": 1
            },
            "status": {
              "type": "string",
              "enum": [
                "WAITING",
                "NOTIFIED",
                "CLAIMED",
                "SKIPPED",
                "SEATED",
                "CANCELED",
                "NO_SHOW"
              ],
              "description": "Текущий нативный жизненный цикл листа ожидания.",
              "example": "WAITING"
            },
            "partySize": {
              "type": "integer",
              "minimum": 1,
              "maximum": 99,
              "description": "Текущее число гостей.",
              "example": 1
            },
            "claimExpiresAt": {
              "type": "string",
              "format": "date-time",
              "nullable": true,
              "description": "Нативный срок принятия приглашения либо null без текущего окна.",
              "example": "2026-12-31T18:00:00.000Z"
            },
            "quotedWaitMinMinutes": {
              "type": "integer",
              "nullable": true,
              "description": "Текущая нативная минимальная оценка ожидания в минутах либо null, если неизвестна.",
              "example": 0
            },
            "quotedWaitMaxMinutes": {
              "type": "integer",
              "nullable": true,
              "description": "Текущая нативная максимальная оценка ожидания в минутах либо null, если неизвестна.",
              "example": 0
            },
            "estimatedSeatAt": {
              "type": "string",
              "format": "date-time",
              "nullable": true,
              "description": "Текущий нативный предполагаемый момент рассадки либо null, если неизвестен.",
              "example": "2026-01-15T12:00:00.000Z"
            },
            "allowedActions": {
              "type": "array",
              "description": "Действия, разрешённые текущим жизненным циклом, scope доступа и нативным сроком принятия. CLAIM переводит запись в CLAIMED и не создаёт бронь.",
              "uniqueItems": true,
              "maxItems": 2,
              "items": {
                "type": "string",
                "enum": [
                  "CLAIM",
                  "CANCEL"
                ],
                "description": "Доступная нативная гостевая команда листа ожидания.",
                "example": "CLAIM"
              },
              "example": [
                "CLAIM"
              ]
            }
          },
          "example": {
            "venue": {
              "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
              "name": "Example name",
              "timeZone": "Asia/Tbilisi"
            },
            "publicChannel": {
              "id": "3db2ed63-9466-4829-81aa-e4959a2279b0",
              "publicHandle": "example",
              "status": "DRAFT"
            },
            "servicePeriod": {
              "id": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8",
              "name": "Example name",
              "bookingMode": "INSTANT"
            },
            "source": {
              "kind": "RESERVATION",
              "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
              "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
              "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
              "presentation": {
                "kind": "CANONICAL",
                "connectionId": null,
                "resourceId": null,
                "origin": null
              }
            },
            "grantExpiresAt": "2026-12-31T18:00:00.000Z",
            "serverTime": "2026-01-15T12:00:00.000Z",
            "kind": "WAITLIST",
            "id": "a7476fce-e842-42a4-896a-c23b0e88b420",
            "referenceCode": "EXAMPLE",
            "revision": 1,
            "status": "WAITING",
            "partySize": 1,
            "claimExpiresAt": null,
            "quotedWaitMinMinutes": null,
            "quotedWaitMaxMinutes": null,
            "estimatedSeatAt": null,
            "allowedActions": [
              "CLAIM"
            ]
          }
        }
      ],
      "example": {
        "venue": {
          "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
          "name": "Example name",
          "timeZone": "Asia/Tbilisi"
        },
        "publicChannel": {
          "id": "3db2ed63-9466-4829-81aa-e4959a2279b0",
          "publicHandle": "example",
          "status": "DRAFT"
        },
        "servicePeriod": {
          "id": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8",
          "name": "Example name",
          "bookingMode": "INSTANT"
        },
        "source": {
          "kind": "RESERVATION",
          "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
          "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
          "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
          "presentation": {
            "kind": "CANONICAL",
            "connectionId": null,
            "resourceId": null,
            "origin": null
          }
        },
        "grantExpiresAt": "2026-12-31T18:00:00.000Z",
        "serverTime": "2026-01-15T12:00:00.000Z",
        "pendingAgreement": null,
        "guarantee": null,
        "kind": "RESERVATION",
        "id": "a42073ae-5313-4ace-86d8-86fb33fde1a9",
        "referenceCode": "EXAMPLE",
        "revision": 1,
        "status": "REQUESTED",
        "partySize": 1,
        "scheduledAt": "2026-01-15T12:00:00.000Z",
        "endsAt": "2026-12-31T18:00:00.000Z",
        "allowedActions": [
          "CONFIRM"
        ]
      }
    },
    {
      "type": "object",
      "additionalProperties": false,
      "nullable": true,
      "enum": [
        null
      ],
      "description": "Текущее разрешённое представление управления недоступно.",
      "example": null
    }
  ],
  "example": {
    "venue": {
      "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
      "name": "Example name",
      "timeZone": "Asia/Tbilisi"
    },
    "publicChannel": {
      "id": "3db2ed63-9466-4829-81aa-e4959a2279b0",
      "publicHandle": "example",
      "status": "DRAFT"
    },
    "servicePeriod": {
      "id": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8",
      "name": "Example name",
      "bookingMode": "INSTANT"
    },
    "source": {
      "kind": "RESERVATION",
      "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
      "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
      "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
      "presentation": {
        "kind": "CANONICAL",
        "connectionId": null,
        "resourceId": null,
        "origin": null
      }
    },
    "grantExpiresAt": "2026-12-31T18:00:00.000Z",
    "serverTime": "2026-01-15T12:00:00.000Z",
    "pendingAgreement": null,
    "guarantee": null,
    "kind": "RESERVATION",
    "id": "a42073ae-5313-4ace-86d8-86fb33fde1a9",
    "referenceCode": "EXAMPLE",
    "revision": 1,
    "status": "REQUESTED",
    "partySize": 1,
    "scheduledAt": "2026-01-15T12:00:00.000Z",
    "endsAt": "2026-12-31T18:00:00.000Z",
    "allowedActions": [
      "CONFIRM"
    ]
  }
}
Полное определение
{
  "type": "object",
  "description": "Исходная принятая нативная команда и отдельное текущее продолжение управления; согласие не утверждает завершённое распоряжение старыми средствами или активацию предложения.",
  "additionalProperties": false,
  "required": [
    "original",
    "manageToken",
    "manageTokenExpiresAt",
    "manageAccessState",
    "currentState",
    "current"
  ],
  "properties": {
    "original": {
      "description": "Неизменяемая исходная квитанция принятия соглашения; не заменяет отдельное текущее управление.",
      "allOf": [
        {
          "type": "object",
          "description": "Неизменяемая исходная квитанция нативной команды отдельно от текущего управления бронью или листом ожидания.",
          "required": [
            "entityId",
            "referenceCode",
            "revision",
            "status",
            "warningCodes",
            "eventIds"
          ],
          "properties": {
            "entityId": {
              "type": "string",
              "format": "uuid",
              "description": "UUID нативной брони или записи ожидания.",
              "example": "6b288694-8b6d-49cd-8007-264ca7224921"
            },
            "referenceCode": {
              "type": "string",
              "description": "Публичный номер, возвращённый исходной командой.",
              "example": "EXAMPLE"
            },
            "revision": {
              "type": "integer",
              "minimum": 1,
              "description": "Нативная ревизия записи после исходной команды.",
              "example": 1
            },
            "status": {
              "type": "string",
              "description": "Нативный статус записи после исходной команды.",
              "example": "example"
            },
            "agreementChange": {
              "type": "object",
              "description": "Исходный неизменяемый результат предложения или принятия соглашения; бронь сохраняет фактическое нативное состояние до активации.",
              "additionalProperties": false,
              "required": [
                "id",
                "state",
                "planHash",
                "expiresAt"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "UUID нативного изменения соглашения.",
                  "example": "940006a2-9bbf-40d0-86a4-891c3d173dcc"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "PENDING",
                    "ACCEPTED"
                  ],
                  "description": "Исходное состояние предложения или принятого продолжения.",
                  "example": "PENDING"
                },
                "planHash": {
                  "type": "string",
                  "pattern": "^[0-9a-f]{64}$",
                  "description": "Digest точных замороженных слота и условий.",
                  "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
                },
                "expiresAt": {
                  "type": "string",
                  "format": "date-time",
                  "description": "Исходный срок активации; повтор не продлевает его.",
                  "example": "2026-12-31T18:00:00.000Z"
                }
              },
              "example": {
                "id": "940006a2-9bbf-40d0-86a4-891c3d173dcc",
                "state": "PENDING",
                "planHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
                "expiresAt": "2026-12-31T18:00:00.000Z"
              }
            },
            "warningCodes": {
              "type": "array",
              "description": "Нативные коды предупреждений исходной команды.",
              "items": {
                "type": "string",
                "example": "EXAMPLE"
              },
              "example": [
                "EXAMPLE"
              ]
            },
            "eventIds": {
              "type": "array",
              "description": "UUID нативных событий активности, записанных исходной командой.",
              "items": {
                "type": "string",
                "format": "uuid",
                "example": "6825b43e-93d6-4f3b-8171-c1661099fae8"
              },
              "example": [
                "6825b43e-93d6-4f3b-8171-c1661099fae8"
              ]
            }
          },
          "example": {
            "agreementChange": {
              "id": "940006a2-9bbf-40d0-86a4-891c3d173dcc",
              "state": "PENDING",
              "planHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
              "expiresAt": "2026-12-31T18:00:00.000Z"
            },
            "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
            "referenceCode": "EXAMPLE",
            "revision": 1,
            "status": "example",
            "warningCodes": [
              "EXAMPLE"
            ],
            "eventIds": [
              "6825b43e-93d6-4f3b-8171-c1661099fae8"
            ]
          }
        }
      ],
      "type": "object",
      "required": [
        "agreementChange"
      ],
      "properties": {
        "agreementChange": {
          "type": "object",
          "description": "Исходный неизменяемый результат предложения или принятия соглашения; бронь сохраняет фактическое нативное состояние до активации.",
          "additionalProperties": false,
          "required": [
            "id",
            "state",
            "planHash",
            "expiresAt"
          ],
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "description": "UUID нативного изменения соглашения.",
              "example": "940006a2-9bbf-40d0-86a4-891c3d173dcc"
            },
            "state": {
              "type": "string",
              "enum": [
                "PENDING",
                "ACCEPTED"
              ],
              "description": "Исходное состояние предложения или принятого продолжения.",
              "example": "PENDING"
            },
            "planHash": {
              "type": "string",
              "pattern": "^[0-9a-f]{64}$",
              "description": "Digest точных замороженных слота и условий.",
              "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
            },
            "expiresAt": {
              "type": "string",
              "format": "date-time",
              "description": "Исходный срок активации; повтор не продлевает его.",
              "example": "2026-12-31T18:00:00.000Z"
            }
          },
          "example": {
            "id": "940006a2-9bbf-40d0-86a4-891c3d173dcc",
            "state": "PENDING",
            "planHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
            "expiresAt": "2026-12-31T18:00:00.000Z"
          }
        }
      },
      "example": {
        "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
        "referenceCode": "EXAMPLE",
        "revision": 1,
        "status": "example",
        "warningCodes": [
          "EXAMPLE"
        ],
        "eventIds": [
          "6825b43e-93d6-4f3b-8171-c1661099fae8"
        ],
        "agreementChange": {
          "id": "940006a2-9bbf-40d0-86a4-891c3d173dcc",
          "state": "PENDING",
          "planHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
          "expiresAt": "2026-12-31T18:00:00.000Z"
        }
      }
    },
    "manageToken": {
      "type": "string",
      "nullable": true,
      "description": "Исходная manage-capability проверенного контакта либо null при необходимости нового доказательства.",
      "example": "synthetic-example-credential"
    },
    "manageTokenExpiresAt": {
      "type": "string",
      "format": "date-time",
      "description": "Исходный срок управления; повторы не обновляют его.",
      "example": "2026-12-31T18:00:00.000Z"
    },
    "manageAccessState": {
      "type": "string",
      "enum": [
        "CURRENT",
        "REPROOF_REQUIRED"
      ],
      "description": "Текущая пригодность исходного выданного доступа управления.",
      "example": "CURRENT"
    },
    "currentState": {
      "type": "string",
      "enum": [
        "AVAILABLE",
        "UNAVAILABLE"
      ],
      "description": "Доступность отдельного текущего разрешённого управления.",
      "example": "AVAILABLE"
    },
    "current": {
      "description": "Отдельное текущее разрешённое состояние либо null при недоступном обогащении.",
      "oneOf": [
        {
          "description": "Текущее безопасное гостевое управление при точном нативном READ-доступе и текущих правах presentation. Отделено от неизменяемой исходной квитанции команды.",
          "oneOf": [
            {
              "type": "object",
              "description": "Текущий контекст брони и нативные действия в пределах capability.",
              "additionalProperties": false,
              "required": [
                "kind",
                "id",
                "referenceCode",
                "revision",
                "status",
                "partySize",
                "scheduledAt",
                "endsAt",
                "venue",
                "publicChannel",
                "servicePeriod",
                "source",
                "grantExpiresAt",
                "serverTime",
                "allowedActions",
                "guarantee",
                "pendingAgreement"
              ],
              "properties": {
                "venue": {
                  "type": "object",
                  "description": "Текущий нативный контекст отображения заведения и расписания.",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "name",
                    "timeZone"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "UUID заведения-владельца.",
                      "example": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0"
                    },
                    "name": {
                      "type": "string",
                      "description": "Текущее публичное название заведения.",
                      "example": "Example name"
                    },
                    "timeZone": {
                      "type": "string",
                      "description": "Нативный часовой пояс заведения в формате IANA.",
                      "example": "Asia/Tbilisi"
                    }
                  },
                  "example": {
                    "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
                    "name": "Example name",
                    "timeZone": "Asia/Tbilisi"
                  }
                },
                "publicChannel": {
                  "type": "object",
                  "description": "Нативный публичный канал записи-владельца, независимый от handle представления Storefront. Его текущий статус не заменяет разрешение продолжения.",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "publicHandle",
                    "status"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "UUID нативного канала.",
                      "example": "3db2ed63-9466-4829-81aa-e4959a2279b0"
                    },
                    "publicHandle": {
                      "type": "string",
                      "description": "Handle нативного канала бронирования.",
                      "example": "example"
                    },
                    "status": {
                      "type": "string",
                      "description": "Текущий жизненный цикл нативного публичного канала.",
                      "enum": [
                        "DRAFT",
                        "ACTIVE",
                        "PAUSED"
                      ],
                      "example": "DRAFT"
                    }
                  },
                  "example": {
                    "id": "3db2ed63-9466-4829-81aa-e4959a2279b0",
                    "publicHandle": "example",
                    "status": "DRAFT"
                  }
                },
                "servicePeriod": {
                  "type": "object",
                  "description": "Текущие нативные ID периода обслуживания и режим бронирования.",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "name",
                    "bookingMode"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "UUID нативного периода обслуживания.",
                      "example": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8"
                    },
                    "name": {
                      "type": "string",
                      "description": "Текущее название периода обслуживания.",
                      "example": "Example name"
                    },
                    "bookingMode": {
                      "type": "string",
                      "description": "Текущий режим периода обслуживания; не переписывает исходную квитанцию бронирования.",
                      "enum": [
                        "INSTANT",
                        "REQUEST"
                      ],
                      "example": "INSTANT"
                    }
                  },
                  "example": {
                    "id": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8",
                    "name": "Example name",
                    "bookingMode": "INSTANT"
                  }
                },
                "source": {
                  "type": "object",
                  "description": "Несекретный точный набор нативного владельца и исходное представление доступа. Эти ID не дают прав и не разрешают менять origin, подключения или capability.",
                  "additionalProperties": false,
                  "required": [
                    "kind",
                    "entityId",
                    "venueId",
                    "publicChannelId",
                    "presentation"
                  ],
                  "properties": {
                    "kind": {
                      "type": "string",
                      "enum": [
                        "RESERVATION",
                        "WAITLIST"
                      ],
                      "description": "Вид нативного владельца.",
                      "example": "RESERVATION"
                    },
                    "entityId": {
                      "type": "string",
                      "format": "uuid",
                      "description": "Точный UUID брони или записи ожидания владельца.",
                      "example": "6b288694-8b6d-49cd-8007-264ca7224921"
                    },
                    "venueId": {
                      "type": "string",
                      "format": "uuid",
                      "description": "UUID нативного заведения владельца.",
                      "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
                    },
                    "publicChannelId": {
                      "type": "string",
                      "format": "uuid",
                      "description": "UUID нативного канала владельца.",
                      "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
                    },
                    "presentation": {
                      "type": "object",
                      "description": "Неизменяемая классификация выдачи. CANONICAL содержит null в полях Storefront; STOREFRONT сохраняет точные исходные подключение, прикреплённый ресурс и Origin запроса.",
                      "additionalProperties": false,
                      "required": [
                        "kind",
                        "connectionId",
                        "resourceId",
                        "origin"
                      ],
                      "properties": {
                        "kind": {
                          "type": "string",
                          "enum": [
                            "CANONICAL",
                            "STOREFRONT"
                          ],
                          "description": "Исходный контекст выдачи доступа.",
                          "example": "CANONICAL"
                        },
                        "connectionId": {
                          "type": "string",
                          "format": "uuid",
                          "nullable": true,
                          "description": "UUID исходного подключения Storefront либо null для канонической выдачи.",
                          "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
                        },
                        "resourceId": {
                          "type": "string",
                          "format": "uuid",
                          "nullable": true,
                          "description": "UUID исходного прикреплённого ресурса Storefront либо null для канонической выдачи.",
                          "example": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568"
                        },
                        "origin": {
                          "type": "string",
                          "format": "uri",
                          "nullable": true,
                          "description": "Точный исходный Origin браузера Storefront либо null для канонической выдачи.",
                          "example": "https://example.test/resource"
                        }
                      },
                      "example": {
                        "kind": "CANONICAL",
                        "connectionId": null,
                        "resourceId": null,
                        "origin": null
                      }
                    }
                  },
                  "example": {
                    "kind": "RESERVATION",
                    "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
                    "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
                    "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
                    "presentation": {
                      "kind": "CANONICAL",
                      "connectionId": null,
                      "resourceId": null,
                      "origin": null
                    }
                  }
                },
                "grantExpiresAt": {
                  "type": "string",
                  "format": "date-time",
                  "description": "Исходный срок нативной manage-capability; чтение не продлевает его.",
                  "example": "2026-12-31T18:00:00.000Z"
                },
                "serverTime": {
                  "type": "string",
                  "format": "date-time",
                  "description": "Серверный момент для допустимости текущего действия и срока принятия приглашения.",
                  "example": "2026-01-15T12:00:00.000Z"
                },
                "pendingAgreement": {
                  "type": "object",
                  "description": "Текущее ожидающее предложение или принятое продолжение либо null; до активации оно не меняет фактический нативный слот.",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "action",
                    "state",
                    "revision",
                    "planHash",
                    "expiresAt",
                    "scheduledAt",
                    "endsAt",
                    "partySize",
                    "servicePeriodId",
                    "offer",
                    "activatedAgreementVersion",
                    "activatedReservationRevision"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "UUID нативного изменения соглашения.",
                      "example": "5a694cf6-acf7-40fd-81e6-92ec0fa6c91f"
                    },
                    "action": {
                      "type": "string",
                      "enum": [
                        "CHANGE",
                        "RESTORE"
                      ],
                      "description": "Явное предложенное нативное действие.",
                      "example": "CHANGE"
                    },
                    "state": {
                      "type": "string",
                      "enum": [
                        "PENDING",
                        "ACCEPTED",
                        "ACTIVATED",
                        "EXPIRED",
                        "SUPERSEDED"
                      ],
                      "description": "Текущее нативное состояние продолжения.",
                      "example": "PENDING"
                    },
                    "revision": {
                      "type": "integer",
                      "minimum": 1,
                      "description": "Текущая нативная ревизия предложения.",
                      "example": 1
                    },
                    "planHash": {
                      "type": "string",
                      "pattern": "^[0-9a-f]{64}$",
                      "description": "Digest точных замороженных слота и условий.",
                      "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
                    },
                    "expiresAt": {
                      "type": "string",
                      "format": "date-time",
                      "description": "Фиксированный срок активации.",
                      "example": "2026-12-31T18:00:00.000Z"
                    },
                    "scheduledAt": {
                      "type": "string",
                      "format": "date-time",
                      "description": "Точный предложенный запланированный момент.",
                      "example": "2026-01-15T12:00:00.000Z"
                    },
                    "endsAt": {
                      "type": "string",
                      "format": "date-time",
                      "description": "Точный предложенный момент окончания визита.",
                      "example": "2026-12-31T18:00:00.000Z"
                    },
                    "partySize": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 99,
                      "description": "Точное предложенное число гостей.",
                      "example": 1
                    },
                    "servicePeriodId": {
                      "type": "string",
                      "format": "uuid",
                      "description": "Предложенный нативный период обслуживания.",
                      "example": "4846c409-f4df-40f6-81cc-1d7157a5c646"
                    },
                    "offer": {
                      "type": "object",
                      "description": "Предложение гарантии, рассчитанное сервером, с условиями и их дайджестом. При NONE или числе гостей ниже настроенного порога гарантия не требуется.",
                      "additionalProperties": false,
                      "required": [
                        "required",
                        "terms",
                        "termsHash"
                      ],
                      "properties": {
                        "required": {
                          "type": "boolean",
                          "description": "Требуют ли точные слот и число гостей гарантию.",
                          "example": true
                        },
                        "terms": {
                          "type": "object",
                          "description": "Точные принятые условия либо null, если гарантия не применяется.",
                          "additionalProperties": false,
                          "required": [
                            "schema",
                            "version",
                            "venueId",
                            "publicChannelId",
                            "servicePeriodId",
                            "servicePeriodRevision",
                            "kind",
                            "amountBasis",
                            "unitAmount",
                            "totalAmount",
                            "currency",
                            "currencyMinorUnit",
                            "partySize",
                            "scheduledAt",
                            "dueAt",
                            "freeCancellationAt",
                            "noShowAfter",
                            "forfeitOnLateCancellation",
                            "forfeitOnNoShow",
                            "termsVersion",
                            "privacyVersion"
                          ],
                          "properties": {
                            "schema": {
                              "type": "string",
                              "enum": [
                                "hallify.reservation-guarantee.terms"
                              ],
                              "description": "Каноническая схема нативных условий.",
                              "example": "hallify.reservation-guarantee.terms"
                            },
                            "version": {
                              "type": "integer",
                              "enum": [
                                1
                              ],
                              "description": "Каноническая версия нативных условий.",
                              "example": 1
                            },
                            "venueId": {
                              "type": "string",
                              "format": "uuid",
                              "description": "UUID нативного заведения.",
                              "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
                            },
                            "publicChannelId": {
                              "type": "string",
                              "format": "uuid",
                              "description": "UUID нативного канала бронирования.",
                              "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
                            },
                            "servicePeriodId": {
                              "type": "string",
                              "format": "uuid",
                              "description": "UUID выбранного нативного периода обслуживания.",
                              "example": "4846c409-f4df-40f6-81cc-1d7157a5c646"
                            },
                            "servicePeriodRevision": {
                              "type": "integer",
                              "minimum": 1,
                              "description": "Принятая нативная ревизия периода обслуживания.",
                              "example": 1
                            },
                            "kind": {
                              "type": "string",
                              "enum": [
                                "DEPOSIT",
                                "CARD_HOLD",
                                "PREPAID"
                              ],
                              "description": "Исходный принятый вид гарантии.",
                              "example": "DEPOSIT"
                            },
                            "amountBasis": {
                              "type": "string",
                              "enum": [
                                "FIXED",
                                "PER_GUEST"
                              ],
                              "description": "Исходный способ расчёта суммы.",
                              "example": "FIXED"
                            },
                            "unitAmount": {
                              "type": "string",
                              "pattern": "^(0|[1-9][0-9]{0,9})\\.[0-9]{2}$",
                              "description": "Точная сумма за бронь или гостя с двумя десятичными знаками.",
                              "example": "1.00"
                            },
                            "totalAmount": {
                              "type": "string",
                              "pattern": "^(0|[1-9][0-9]{0,9})\\.[0-9]{2}$",
                              "description": "Точный принятый общий principal с двумя десятичными знаками без чаевых.",
                              "example": "1.00"
                            },
                            "currency": {
                              "type": "string",
                              "pattern": "^[A-Z]{3}$",
                              "description": "Исходная нативная валюта; конвертация не выполняется.",
                              "example": "GEL"
                            },
                            "currencyMinorUnit": {
                              "type": "integer",
                              "enum": [
                                2
                              ],
                              "description": "Нативная денежная точность.",
                              "example": 2
                            },
                            "partySize": {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 99,
                              "description": "Точное принятое число гостей.",
                              "example": 1
                            },
                            "scheduledAt": {
                              "type": "string",
                              "format": "date-time",
                              "description": "Точный запланированный момент слота в UTC.",
                              "example": "2026-01-15T12:00:00.000Z"
                            },
                            "dueAt": {
                              "type": "string",
                              "format": "date-time",
                              "description": "Точный срок оплаты до конвертации и сбора средств.",
                              "example": "2026-12-31T18:00:00.000Z"
                            },
                            "freeCancellationAt": {
                              "type": "string",
                              "format": "date-time",
                              "description": "Точная граница бесплатной отмены.",
                              "example": "2026-01-15T12:00:00.000Z"
                            },
                            "noShowAfter": {
                              "type": "string",
                              "format": "date-time",
                              "description": "Самый ранний момент удержания за неявку по принятому льготному периоду.",
                              "example": "2026-01-15T12:00:00.000Z"
                            },
                            "forfeitOnLateCancellation": {
                              "type": "boolean",
                              "description": "Принятое разрешение явного удержания сотрудником при поздней отмене.",
                              "example": true
                            },
                            "forfeitOnNoShow": {
                              "type": "boolean",
                              "description": "Принятое разрешение явного удержания сотрудником при неявке; автоматического списания с карты нет.",
                              "example": true
                            },
                            "termsVersion": {
                              "type": "string",
                              "description": "Принятая версия публичных условий.",
                              "example": "example"
                            },
                            "privacyVersion": {
                              "type": "string",
                              "description": "Принятая версия уведомления о конфиденциальности.",
                              "example": "example"
                            }
                          },
                          "nullable": true,
                          "example": {
                            "schema": "hallify.reservation-guarantee.terms",
                            "version": 1,
                            "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
                            "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
                            "servicePeriodId": "4846c409-f4df-40f6-81cc-1d7157a5c646",
                            "servicePeriodRevision": 1,
                            "kind": "DEPOSIT",
                            "amountBasis": "FIXED",
                            "unitAmount": "1.00",
                            "totalAmount": "1.00",
                            "currency": "GEL",
                            "currencyMinorUnit": 2,
                            "partySize": 1,
                            "scheduledAt": "2026-01-15T12:00:00.000Z",
                            "dueAt": "2026-12-31T18:00:00.000Z",
                            "freeCancellationAt": "2026-01-15T12:00:00.000Z",
                            "noShowAfter": "2026-01-15T12:00:00.000Z",
                            "forfeitOnLateCancellation": true,
                            "forfeitOnNoShow": true,
                            "termsVersion": "example",
                            "privacyVersion": "example"
                          }
                        },
                        "termsHash": {
                          "type": "string",
                          "pattern": "^[0-9a-f]{64}$",
                          "nullable": true,
                          "description": "Канонический digest принятых условий либо null, если гарантия не применяется.",
                          "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
                        }
                      },
                      "example": {
                        "required": true,
                        "terms": null,
                        "termsHash": null
                      }
                    },
                    "activatedAgreementVersion": {
                      "type": "integer",
                      "minimum": 1,
                      "nullable": true,
                      "description": "Фактически активированная версия соглашения либо null до активации.",
                      "example": 1
                    },
                    "activatedReservationRevision": {
                      "type": "integer",
                      "minimum": 1,
                      "nullable": true,
                      "description": "Фактическая нативная ревизия, записанная активацией, либо null.",
                      "example": 1
                    }
                  },
                  "nullable": true,
                  "example": {
                    "id": "5a694cf6-acf7-40fd-81e6-92ec0fa6c91f",
                    "action": "CHANGE",
                    "state": "PENDING",
                    "revision": 1,
                    "planHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
                    "expiresAt": "2026-12-31T18:00:00.000Z",
                    "scheduledAt": "2026-01-15T12:00:00.000Z",
                    "endsAt": "2026-12-31T18:00:00.000Z",
                    "partySize": 1,
                    "servicePeriodId": "4846c409-f4df-40f6-81cc-1d7157a5c646",
                    "offer": {
                      "required": true,
                      "terms": null,
                      "termsHash": null
                    },
                    "activatedAgreementVersion": null,
                    "activatedReservationRevision": null
                  }
                },
                "guarantee": {
                  "type": "object",
                  "nullable": true,
                  "description": "Фактическая нативная гарантия и её неизменяемые исходные принятые условия либо null при отсутствии обязательства.",
                  "required": [
                    "id",
                    "kind",
                    "status",
                    "amount",
                    "currency",
                    "dueAt",
                    "termsHash",
                    "terms",
                    "authorizationExpiresAt"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "UUID фактической нативной гарантии.",
                      "example": "d8c59877-4141-422c-8bcd-eb23a54e43ad"
                    },
                    "kind": {
                      "type": "string",
                      "enum": [
                        "DEPOSIT",
                        "CARD_HOLD",
                        "PREPAID"
                      ],
                      "description": "Исходный вид гарантии.",
                      "example": "DEPOSIT"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "PENDING",
                        "SATISFIED",
                        "WAIVED",
                        "EXPIRED",
                        "REFUNDED",
                        "FORFEITED"
                      ],
                      "description": "Текущий нативный жизненный цикл гарантии.",
                      "example": "PENDING"
                    },
                    "amount": {
                      "type": "string",
                      "pattern": "^(0|[1-9][0-9]{0,9})\\.[0-9]{2}$",
                      "description": "Исходный точный нативный principal гарантии.",
                      "example": "1.00"
                    },
                    "currency": {
                      "type": "string",
                      "pattern": "^[A-Z]{3}$",
                      "description": "Исходная нативная валюта.",
                      "example": "GEL"
                    },
                    "dueAt": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "Исходный срок оплаты либо null для legacy-свидетельства.",
                      "example": "2026-12-31T18:00:00.000Z"
                    },
                    "termsHash": {
                      "type": "string",
                      "pattern": "^[0-9a-f]{64}$",
                      "nullable": true,
                      "description": "Неизменяемый digest принятых условий либо null для legacy-свидетельства.",
                      "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
                    },
                    "terms": {
                      "type": "object",
                      "description": "Исходные принятые нативные условия гарантии либо null для legacy-свидетельства.",
                      "additionalProperties": false,
                      "required": [
                        "schema",
                        "version",
                        "venueId",
                        "publicChannelId",
                        "servicePeriodId",
                        "servicePeriodRevision",
                        "kind",
                        "amountBasis",
                        "unitAmount",
                        "totalAmount",
                        "currency",
                        "currencyMinorUnit",
                        "partySize",
                        "scheduledAt",
                        "dueAt",
                        "freeCancellationAt",
                        "noShowAfter",
                        "forfeitOnLateCancellation",
                        "forfeitOnNoShow",
                        "termsVersion",
                        "privacyVersion"
                      ],
                      "properties": {
                        "schema": {
                          "type": "string",
                          "enum": [
                            "hallify.reservation-guarantee.terms"
                          ],
                          "description": "Каноническая схема нативных условий.",
                          "example": "hallify.reservation-guarantee.terms"
                        },
                        "version": {
                          "type": "integer",
                          "enum": [
                            1
                          ],
                          "description": "Каноническая версия нативных условий.",
                          "example": 1
                        },
                        "venueId": {
                          "type": "string",
                          "format": "uuid",
                          "description": "UUID нативного заведения.",
                          "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
                        },
                        "publicChannelId": {
                          "type": "string",
                          "format": "uuid",
                          "description": "UUID нативного канала бронирования.",
                          "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
                        },
                        "servicePeriodId": {
                          "type": "string",
                          "format": "uuid",
                          "description": "UUID выбранного нативного периода обслуживания.",
                          "example": "4846c409-f4df-40f6-81cc-1d7157a5c646"
                        },
                        "servicePeriodRevision": {
                          "type": "integer",
                          "minimum": 1,
                          "description": "Принятая нативная ревизия периода обслуживания.",
                          "example": 1
                        },
                        "kind": {
                          "type": "string",
                          "enum": [
                            "DEPOSIT",
                            "CARD_HOLD",
                            "PREPAID"
                          ],
                          "description": "Исходный принятый вид гарантии.",
                          "example": "DEPOSIT"
                        },
                        "amountBasis": {
                          "type": "string",
                          "enum": [
                            "FIXED",
                            "PER_GUEST"
                          ],
                          "description": "Исходный способ расчёта суммы.",
                          "example": "FIXED"
                        },
                        "unitAmount": {
                          "type": "string",
                          "pattern": "^(0|[1-9][0-9]{0,9})\\.[0-9]{2}$",
                          "description": "Точная сумма за бронь или гостя с двумя десятичными знаками.",
                          "example": "1.00"
                        },
                        "totalAmount": {
                          "type": "string",
                          "pattern": "^(0|[1-9][0-9]{0,9})\\.[0-9]{2}$",
                          "description": "Точный принятый общий principal с двумя десятичными знаками без чаевых.",
                          "example": "1.00"
                        },
                        "currency": {
                          "type": "string",
                          "pattern": "^[A-Z]{3}$",
                          "description": "Исходная нативная валюта; конвертация не выполняется.",
                          "example": "GEL"
                        },
                        "currencyMinorUnit": {
                          "type": "integer",
                          "enum": [
                            2
                          ],
                          "description": "Нативная денежная точность.",
                          "example": 2
                        },
                        "partySize": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 99,
                          "description": "Точное принятое число гостей.",
                          "example": 1
                        },
                        "scheduledAt": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Точный запланированный момент слота в UTC.",
                          "example": "2026-01-15T12:00:00.000Z"
                        },
                        "dueAt": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Точный срок оплаты до конвертации и сбора средств.",
                          "example": "2026-12-31T18:00:00.000Z"
                        },
                        "freeCancellationAt": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Точная граница бесплатной отмены.",
                          "example": "2026-01-15T12:00:00.000Z"
                        },
                        "noShowAfter": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Самый ранний момент удержания за неявку по принятому льготному периоду.",
                          "example": "2026-01-15T12:00:00.000Z"
                        },
                        "forfeitOnLateCancellation": {
                          "type": "boolean",
                          "description": "Принятое разрешение явного удержания сотрудником при поздней отмене.",
                          "example": true
                        },
                        "forfeitOnNoShow": {
                          "type": "boolean",
                          "description": "Принятое разрешение явного удержания сотрудником при неявке; автоматического списания с карты нет.",
                          "example": true
                        },
                        "termsVersion": {
                          "type": "string",
                          "description": "Принятая версия публичных условий.",
                          "example": "example"
                        },
                        "privacyVersion": {
                          "type": "string",
                          "description": "Принятая версия уведомления о конфиденциальности.",
                          "example": "example"
                        }
                      },
                      "nullable": true,
                      "example": {
                        "schema": "hallify.reservation-guarantee.terms",
                        "version": 1,
                        "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
                        "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
                        "servicePeriodId": "4846c409-f4df-40f6-81cc-1d7157a5c646",
                        "servicePeriodRevision": 1,
                        "kind": "DEPOSIT",
                        "amountBasis": "FIXED",
                        "unitAmount": "1.00",
                        "totalAmount": "1.00",
                        "currency": "GEL",
                        "currencyMinorUnit": 2,
                        "partySize": 1,
                        "scheduledAt": "2026-01-15T12:00:00.000Z",
                        "dueAt": "2026-12-31T18:00:00.000Z",
                        "freeCancellationAt": "2026-01-15T12:00:00.000Z",
                        "noShowAfter": "2026-01-15T12:00:00.000Z",
                        "forfeitOnLateCancellation": true,
                        "forfeitOnNoShow": true,
                        "termsVersion": "example",
                        "privacyVersion": "example"
                      }
                    },
                    "authorizationExpiresAt": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true,
                      "description": "Доказанный срок авторизации PSP либо null без аутентифицированных данных.",
                      "example": "2026-12-31T18:00:00.000Z"
                    }
                  },
                  "example": {
                    "id": "d8c59877-4141-422c-8bcd-eb23a54e43ad",
                    "kind": "DEPOSIT",
                    "status": "PENDING",
                    "amount": "1.00",
                    "currency": "GEL",
                    "dueAt": null,
                    "termsHash": null,
                    "terms": null,
                    "authorizationExpiresAt": null
                  }
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "RESERVATION"
                  ],
                  "description": "Вид нативного владельца.",
                  "example": "RESERVATION"
                },
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "UUID брони, которой владеет capability.",
                  "example": "a42073ae-5313-4ace-86d8-86fb33fde1a9"
                },
                "referenceCode": {
                  "type": "string",
                  "description": "Ссылочный код для гостя.",
                  "example": "EXAMPLE"
                },
                "revision": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Текущая нативная ревизия брони.",
                  "example": 1
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "REQUESTED",
                    "BOOKED",
                    "CONFIRMED",
                    "ARRIVED",
                    "SEATED",
                    "CANCELED",
                    "NO_SHOW",
                    "DECLINED",
                    "EXPIRED"
                  ],
                  "description": "Текущий нативный жизненный цикл брони.",
                  "example": "REQUESTED"
                },
                "partySize": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 99,
                  "description": "Текущее число гостей.",
                  "example": 1
                },
                "scheduledAt": {
                  "type": "string",
                  "format": "date-time",
                  "description": "Текущий запланированный момент прибытия.",
                  "example": "2026-01-15T12:00:00.000Z"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time",
                  "description": "Текущее запланированное окончание брони.",
                  "example": "2026-12-31T18:00:00.000Z"
                },
                "allowedActions": {
                  "type": "array",
                  "description": "Действия, разрешённые текущим жизненным циклом и scope доступа. Выполнение перепроверяет ревизию, представление, коммерческий допуск, правила и вместимость.",
                  "uniqueItems": true,
                  "maxItems": 3,
                  "items": {
                    "type": "string",
                    "enum": [
                      "CONFIRM",
                      "CHANGE",
                      "CANCEL"
                    ],
                    "description": "Доступная нативная гостевая команда.",
                    "example": "CONFIRM"
                  },
                  "example": [
                    "CONFIRM"
                  ]
                }
              },
              "example": {
                "venue": {
                  "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
                  "name": "Example name",
                  "timeZone": "Asia/Tbilisi"
                },
                "publicChannel": {
                  "id": "3db2ed63-9466-4829-81aa-e4959a2279b0",
                  "publicHandle": "example",
                  "status": "DRAFT"
                },
                "servicePeriod": {
                  "id": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8",
                  "name": "Example name",
                  "bookingMode": "INSTANT"
                },
                "source": {
                  "kind": "RESERVATION",
                  "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
                  "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
                  "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
                  "presentation": {
                    "kind": "CANONICAL",
                    "connectionId": null,
                    "resourceId": null,
                    "origin": null
                  }
                },
                "grantExpiresAt": "2026-12-31T18:00:00.000Z",
                "serverTime": "2026-01-15T12:00:00.000Z",
                "pendingAgreement": null,
                "guarantee": null,
                "kind": "RESERVATION",
                "id": "a42073ae-5313-4ace-86d8-86fb33fde1a9",
                "referenceCode": "EXAMPLE",
                "revision": 1,
                "status": "REQUESTED",
                "partySize": 1,
                "scheduledAt": "2026-01-15T12:00:00.000Z",
                "endsAt": "2026-12-31T18:00:00.000Z",
                "allowedActions": [
                  "CONFIRM"
                ]
              }
            },
            {
              "type": "object",
              "description": "Текущий контекст ожидания, безопасная оценка времени и нативные действия в пределах capability.",
              "additionalProperties": false,
              "required": [
                "kind",
                "id",
                "referenceCode",
                "revision",
                "status",
                "partySize",
                "claimExpiresAt",
                "quotedWaitMinMinutes",
                "quotedWaitMaxMinutes",
                "estimatedSeatAt",
                "venue",
                "publicChannel",
                "servicePeriod",
                "source",
                "grantExpiresAt",
                "serverTime",
                "allowedActions"
              ],
              "properties": {
                "venue": {
                  "type": "object",
                  "description": "Текущий нативный контекст отображения заведения и расписания.",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "name",
                    "timeZone"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "UUID заведения-владельца.",
                      "example": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0"
                    },
                    "name": {
                      "type": "string",
                      "description": "Текущее публичное название заведения.",
                      "example": "Example name"
                    },
                    "timeZone": {
                      "type": "string",
                      "description": "Нативный часовой пояс заведения в формате IANA.",
                      "example": "Asia/Tbilisi"
                    }
                  },
                  "example": {
                    "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
                    "name": "Example name",
                    "timeZone": "Asia/Tbilisi"
                  }
                },
                "publicChannel": {
                  "type": "object",
                  "description": "Нативный публичный канал записи-владельца, независимый от handle представления Storefront. Его текущий статус не заменяет разрешение продолжения.",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "publicHandle",
                    "status"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "UUID нативного канала.",
                      "example": "3db2ed63-9466-4829-81aa-e4959a2279b0"
                    },
                    "publicHandle": {
                      "type": "string",
                      "description": "Handle нативного канала бронирования.",
                      "example": "example"
                    },
                    "status": {
                      "type": "string",
                      "description": "Текущий жизненный цикл нативного публичного канала.",
                      "enum": [
                        "DRAFT",
                        "ACTIVE",
                        "PAUSED"
                      ],
                      "example": "DRAFT"
                    }
                  },
                  "example": {
                    "id": "3db2ed63-9466-4829-81aa-e4959a2279b0",
                    "publicHandle": "example",
                    "status": "DRAFT"
                  }
                },
                "servicePeriod": {
                  "type": "object",
                  "description": "Текущие нативные ID периода обслуживания и режим бронирования.",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "name",
                    "bookingMode"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "UUID нативного периода обслуживания.",
                      "example": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8"
                    },
                    "name": {
                      "type": "string",
                      "description": "Текущее название периода обслуживания.",
                      "example": "Example name"
                    },
                    "bookingMode": {
                      "type": "string",
                      "description": "Текущий режим периода обслуживания; не переписывает исходную квитанцию бронирования.",
                      "enum": [
                        "INSTANT",
                        "REQUEST"
                      ],
                      "example": "INSTANT"
                    }
                  },
                  "example": {
                    "id": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8",
                    "name": "Example name",
                    "bookingMode": "INSTANT"
                  }
                },
                "source": {
                  "type": "object",
                  "description": "Несекретный точный набор нативного владельца и исходное представление доступа. Эти ID не дают прав и не разрешают менять origin, подключения или capability.",
                  "additionalProperties": false,
                  "required": [
                    "kind",
                    "entityId",
                    "venueId",
                    "publicChannelId",
                    "presentation"
                  ],
                  "properties": {
                    "kind": {
                      "type": "string",
                      "enum": [
                        "RESERVATION",
                        "WAITLIST"
                      ],
                      "description": "Вид нативного владельца.",
                      "example": "RESERVATION"
                    },
                    "entityId": {
                      "type": "string",
                      "format": "uuid",
                      "description": "Точный UUID брони или записи ожидания владельца.",
                      "example": "6b288694-8b6d-49cd-8007-264ca7224921"
                    },
                    "venueId": {
                      "type": "string",
                      "format": "uuid",
                      "description": "UUID нативного заведения владельца.",
                      "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
                    },
                    "publicChannelId": {
                      "type": "string",
                      "format": "uuid",
                      "description": "UUID нативного канала владельца.",
                      "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
                    },
                    "presentation": {
                      "type": "object",
                      "description": "Неизменяемая классификация выдачи. CANONICAL содержит null в полях Storefront; STOREFRONT сохраняет точные исходные подключение, прикреплённый ресурс и Origin запроса.",
                      "additionalProperties": false,
                      "required": [
                        "kind",
                        "connectionId",
                        "resourceId",
                        "origin"
                      ],
                      "properties": {
                        "kind": {
                          "type": "string",
                          "enum": [
                            "CANONICAL",
                            "STOREFRONT"
                          ],
                          "description": "Исходный контекст выдачи доступа.",
                          "example": "CANONICAL"
                        },
                        "connectionId": {
                          "type": "string",
                          "format": "uuid",
                          "nullable": true,
                          "description": "UUID исходного подключения Storefront либо null для канонической выдачи.",
                          "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
                        },
                        "resourceId": {
                          "type": "string",
                          "format": "uuid",
                          "nullable": true,
                          "description": "UUID исходного прикреплённого ресурса Storefront либо null для канонической выдачи.",
                          "example": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568"
                        },
                        "origin": {
                          "type": "string",
                          "format": "uri",
                          "nullable": true,
                          "description": "Точный исходный Origin браузера Storefront либо null для канонической выдачи.",
                          "example": "https://example.test/resource"
                        }
                      },
                      "example": {
                        "kind": "CANONICAL",
                        "connectionId": null,
                        "resourceId": null,
                        "origin": null
                      }
                    }
                  },
                  "example": {
                    "kind": "RESERVATION",
                    "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
                    "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
                    "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
                    "presentation": {
                      "kind": "CANONICAL",
                      "connectionId": null,
                      "resourceId": null,
                      "origin": null
                    }
                  }
                },
                "grantExpiresAt": {
                  "type": "string",
                  "format": "date-time",
                  "description": "Исходный срок нативной manage-capability; чтение не продлевает его.",
                  "example": "2026-12-31T18:00:00.000Z"
                },
                "serverTime": {
                  "type": "string",
                  "format": "date-time",
                  "description": "Серверный момент для допустимости текущего действия и срока принятия приглашения.",
                  "example": "2026-01-15T12:00:00.000Z"
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "WAITLIST"
                  ],
                  "description": "Вид нативного владельца.",
                  "example": "WAITLIST"
                },
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "UUID записи ожидания, которой владеет capability.",
                  "example": "a7476fce-e842-42a4-896a-c23b0e88b420"
                },
                "referenceCode": {
                  "type": "string",
                  "description": "Ссылочный код для гостя.",
                  "example": "EXAMPLE"
                },
                "revision": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Текущая нативная ревизия записи ожидания.",
                  "example": 1
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "WAITING",
                    "NOTIFIED",
                    "CLAIMED",
                    "SKIPPED",
                    "SEATED",
                    "CANCELED",
                    "NO_SHOW"
                  ],
                  "description": "Текущий нативный жизненный цикл листа ожидания.",
                  "example": "WAITING"
                },
                "partySize": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 99,
                  "description": "Текущее число гостей.",
                  "example": 1
                },
                "claimExpiresAt": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true,
                  "description": "Нативный срок принятия приглашения либо null без текущего окна.",
                  "example": "2026-12-31T18:00:00.000Z"
                },
                "quotedWaitMinMinutes": {
                  "type": "integer",
                  "nullable": true,
                  "description": "Текущая нативная минимальная оценка ожидания в минутах либо null, если неизвестна.",
                  "example": 0
                },
                "quotedWaitMaxMinutes": {
                  "type": "integer",
                  "nullable": true,
                  "description": "Текущая нативная максимальная оценка ожидания в минутах либо null, если неизвестна.",
                  "example": 0
                },
                "estimatedSeatAt": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true,
                  "description": "Текущий нативный предполагаемый момент рассадки либо null, если неизвестен.",
                  "example": "2026-01-15T12:00:00.000Z"
                },
                "allowedActions": {
                  "type": "array",
                  "description": "Действия, разрешённые текущим жизненным циклом, scope доступа и нативным сроком принятия. CLAIM переводит запись в CLAIMED и не создаёт бронь.",
                  "uniqueItems": true,
                  "maxItems": 2,
                  "items": {
                    "type": "string",
                    "enum": [
                      "CLAIM",
                      "CANCEL"
                    ],
                    "description": "Доступная нативная гостевая команда листа ожидания.",
                    "example": "CLAIM"
                  },
                  "example": [
                    "CLAIM"
                  ]
                }
              },
              "example": {
                "venue": {
                  "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
                  "name": "Example name",
                  "timeZone": "Asia/Tbilisi"
                },
                "publicChannel": {
                  "id": "3db2ed63-9466-4829-81aa-e4959a2279b0",
                  "publicHandle": "example",
                  "status": "DRAFT"
                },
                "servicePeriod": {
                  "id": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8",
                  "name": "Example name",
                  "bookingMode": "INSTANT"
                },
                "source": {
                  "kind": "RESERVATION",
                  "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
                  "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
                  "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
                  "presentation": {
                    "kind": "CANONICAL",
                    "connectionId": null,
                    "resourceId": null,
                    "origin": null
                  }
                },
                "grantExpiresAt": "2026-12-31T18:00:00.000Z",
                "serverTime": "2026-01-15T12:00:00.000Z",
                "kind": "WAITLIST",
                "id": "a7476fce-e842-42a4-896a-c23b0e88b420",
                "referenceCode": "EXAMPLE",
                "revision": 1,
                "status": "WAITING",
                "partySize": 1,
                "claimExpiresAt": null,
                "quotedWaitMinMinutes": null,
                "quotedWaitMaxMinutes": null,
                "estimatedSeatAt": null,
                "allowedActions": [
                  "CLAIM"
                ]
              }
            }
          ],
          "example": {
            "venue": {
              "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
              "name": "Example name",
              "timeZone": "Asia/Tbilisi"
            },
            "publicChannel": {
              "id": "3db2ed63-9466-4829-81aa-e4959a2279b0",
              "publicHandle": "example",
              "status": "DRAFT"
            },
            "servicePeriod": {
              "id": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8",
              "name": "Example name",
              "bookingMode": "INSTANT"
            },
            "source": {
              "kind": "RESERVATION",
              "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
              "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
              "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
              "presentation": {
                "kind": "CANONICAL",
                "connectionId": null,
                "resourceId": null,
                "origin": null
              }
            },
            "grantExpiresAt": "2026-12-31T18:00:00.000Z",
            "serverTime": "2026-01-15T12:00:00.000Z",
            "pendingAgreement": null,
            "guarantee": null,
            "kind": "RESERVATION",
            "id": "a42073ae-5313-4ace-86d8-86fb33fde1a9",
            "referenceCode": "EXAMPLE",
            "revision": 1,
            "status": "REQUESTED",
            "partySize": 1,
            "scheduledAt": "2026-01-15T12:00:00.000Z",
            "endsAt": "2026-12-31T18:00:00.000Z",
            "allowedActions": [
              "CONFIRM"
            ]
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "nullable": true,
          "enum": [
            null
          ],
          "description": "Текущее разрешённое представление управления недоступно.",
          "example": null
        }
      ],
      "example": {
        "venue": {
          "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
          "name": "Example name",
          "timeZone": "Asia/Tbilisi"
        },
        "publicChannel": {
          "id": "3db2ed63-9466-4829-81aa-e4959a2279b0",
          "publicHandle": "example",
          "status": "DRAFT"
        },
        "servicePeriod": {
          "id": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8",
          "name": "Example name",
          "bookingMode": "INSTANT"
        },
        "source": {
          "kind": "RESERVATION",
          "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
          "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
          "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
          "presentation": {
            "kind": "CANONICAL",
            "connectionId": null,
            "resourceId": null,
            "origin": null
          }
        },
        "grantExpiresAt": "2026-12-31T18:00:00.000Z",
        "serverTime": "2026-01-15T12:00:00.000Z",
        "pendingAgreement": null,
        "guarantee": null,
        "kind": "RESERVATION",
        "id": "a42073ae-5313-4ace-86d8-86fb33fde1a9",
        "referenceCode": "EXAMPLE",
        "revision": 1,
        "status": "REQUESTED",
        "partySize": 1,
        "scheduledAt": "2026-01-15T12:00:00.000Z",
        "endsAt": "2026-12-31T18:00:00.000Z",
        "allowedActions": [
          "CONFIRM"
        ]
      }
    }
  },
  "example": {
    "original": {
      "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
      "referenceCode": "EXAMPLE",
      "revision": 1,
      "status": "example",
      "warningCodes": [
        "EXAMPLE"
      ],
      "eventIds": [
        "6825b43e-93d6-4f3b-8171-c1661099fae8"
      ],
      "agreementChange": {
        "id": "940006a2-9bbf-40d0-86a4-891c3d173dcc",
        "state": "PENDING",
        "planHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
        "expiresAt": "2026-12-31T18:00:00.000Z"
      }
    },
    "manageToken": null,
    "manageTokenExpiresAt": "2026-12-31T18:00:00.000Z",
    "manageAccessState": "CURRENT",
    "currentState": "AVAILABLE",
    "current": {
      "venue": {
        "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
        "name": "Example name",
        "timeZone": "Asia/Tbilisi"
      },
      "publicChannel": {
        "id": "3db2ed63-9466-4829-81aa-e4959a2279b0",
        "publicHandle": "example",
        "status": "DRAFT"
      },
      "servicePeriod": {
        "id": "9c73cff6-cdc4-44f1-80c7-f0668753d7a8",
        "name": "Example name",
        "bookingMode": "INSTANT"
      },
      "source": {
        "kind": "RESERVATION",
        "entityId": "6b288694-8b6d-49cd-8007-264ca7224921",
        "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
        "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
        "presentation": {
          "kind": "CANONICAL",
          "connectionId": null,
          "resourceId": null,
          "origin": null
        }
      },
      "grantExpiresAt": "2026-12-31T18:00:00.000Z",
      "serverTime": "2026-01-15T12:00:00.000Z",
      "pendingAgreement": null,
      "guarantee": null,
      "kind": "RESERVATION",
      "id": "a42073ae-5313-4ace-86d8-86fb33fde1a9",
      "referenceCode": "EXAMPLE",
      "revision": 1,
      "status": "REQUESTED",
      "partySize": 1,
      "scheduledAt": "2026-01-15T12:00:00.000Z",
      "endsAt": "2026-12-31T18:00:00.000Z",
      "allowedActions": [
        "CONFIRM"
      ]
    }
  }
}
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"
}
IdempotencyConflictError

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

Полное определение
{
  "example": {
    "statusCode": 409,
    "error": "errors:http.conflict",
    "code": "IDEMPOTENCY_REQUEST_IN_PROGRESS",
    "message": "errors:idempotency.inProgress",
    "translationKey": "errors:idempotency.inProgress"
  },
  "allOf": [
    {
      "$ref": "#/components/schemas/TranslatedErrorDto"
    },
    {
      "type": "object",
      "required": [
        "code"
      ],
      "properties": {
        "statusCode": {
          "type": "integer",
          "enum": [
            409
          ],
          "description": "Статус конфликта HTTP 409.",
          "example": 409
        },
        "code": {
          "type": "string",
          "enum": [
            "IDEMPOTENCY_REQUEST_NOT_READY",
            "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH",
            "IDEMPOTENCY_REQUEST_IN_PROGRESS",
            "IDEMPOTENCY_SCOPE_INCOMPLETE"
          ],
          "description": "Допустимые значения `code`: IDEMPOTENCY_REQUEST_NOT_READY, IDEMPOTENCY_KEY_PAYLOAD_MISMATCH, IDEMPOTENCY_REQUEST_IN_PROGRESS, IDEMPOTENCY_SCOPE_INCOMPLETE.",
          "example": "IDEMPOTENCY_REQUEST_NOT_READY"
        }
      },
      "example": {
        "code": "IDEMPOTENCY_REQUEST_NOT_READY"
      }
    }
  ],
  "description": "Ключ идемпотентности уже обрабатывается или использован повторно с другим телом."
}

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

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