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

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

Получить своё бронирование или запись листа ожидания

GET/public/reservations/manage

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

Авторизация

Authorization: Bearer <HALLIFY_RESERVATION_MANAGE_TOKEN>

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

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

Параметры

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

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

string · uri
Полное определение
{
  "type": "string",
  "format": "uri",
  "maxLength": 2048,
  "example": "https://example.test/resource"
}

Ответы

200Возвращает запись, доступную по токену, разрешённые действия и текущую ревизию.
ReservationPublicReadManagedResultDto
Полное определение
{
  "$ref": "#/components/schemas/ReservationPublicReadManagedResultDto"
}
Пример ответа · 200 · application/json
{
  "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"
  ]
}
401Отклоняет отсутствующий, некорректный, истёкший, отозванный или недействительный ключ reservationManageToken на границе владеющего домена.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 401 · application/json
{
  "statusCode": 401,
  "error": "errors:http.unauthorized",
  "code": "HTTP_UNAUTHORIZED",
  "message": "errors:http.unauthorized",
  "translationKey": "errors:http.unauthorized"
}

Схемы

ReservationPublicReadManagedResultDto

Текущее безопасное гостевое управление при точном нативном READ-доступе и текущих правах presentation. Отделено от неизменяемой исходной квитанции команды.

Полное определение
{
  "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"
    ]
  }
}
TranslatedErrorDto

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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