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

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

Получить публичную конфигурацию бронирования

GET/public/reservations/{publicHandle}/config

Возвращает опубликованные сведения о заведении, правила бронирования, периоды обслуживания и гостевую конфигурацию, разрешённую для Origin запроса. Метод публичный, авторизация не требуется.

Авторизация

x-hallify-widget-context: <HALLIFY_STOREFRONT_WIDGET_CONTEXT>

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

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

Параметры

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

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

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

Фактический Origin браузерного запроса для проверки текущих прав представления. Обязателен для новых заявок и продолжения через 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"
}

Ответы

200Возвращает конфигурацию публичного канала бронирования без закрытых данных заведения.
ReservationPublicConfigResultDto
Полное определение
{
  "$ref": "#/components/schemas/ReservationPublicConfigResultDto"
}
Пример ответа · 200 · application/json
{
  "publicHandle": "example",
  "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
  "venue": {
    "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
    "name": "Example name",
    "timeZone": "Asia/Tbilisi"
  },
  "termsVersion": "example",
  "privacyVersion": "example",
  "waitlistStatus": "CLOSED",
  "verificationOptions": [
    {
      "contactType": "EMAIL",
      "deliveryChannel": "EMAIL"
    }
  ],
  "bookingPolicy": {
    "holdMinutes": 0,
    "waitlistVerificationMinutes": 0,
    "defaultDurationMinutes": 0,
    "turnBufferMinutes": 0,
    "graceMinutes": 0
  },
  "waitlistPolicy": {
    "maxPartySize": 0,
    "maxEntries": 0,
    "claimMinutes": 0
  },
  "serverTime": "2026-01-15T12:00:00.000Z",
  "servicePeriods": [
    {
      "guaranteeKind": null,
      "guaranteeAmountBasis": "FIXED",
      "guaranteeUnitAmount": null,
      "guaranteeMinimumPartySize": 1,
      "guaranteeDueBeforeMinutes": 0,
      "guaranteeFreeCancellationBeforeMinutes": 0,
      "guaranteeForfeitOnLateCancellation": true,
      "guaranteeForfeitOnNoShow": true,
      "id": "b926f345-3866-4e0a-8870-720a7d6d91be",
      "name": "Example name",
      "dayOfWeek": 0,
      "startsAtMinute": 0,
      "endsAtMinute": 0,
      "slotIntervalMinutes": 0,
      "maxPartySize": 0,
      "minimumLeadMinutes": 0,
      "bookingHorizonDays": 0,
      "publicBookingCutoffMinutes": 0,
      "bookingMode": "INSTANT"
    }
  ]
}

Схемы

ReservationPublicConfigResultDto

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

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

Публичный идентификатор канала бронирования.

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

UUID нативного публичного канала бронирования этого заведения.

string · uuid
Полное определение
{
  "type": "string",
  "description": "UUID нативного публичного канала бронирования этого заведения.",
  "format": "uuid",
  "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
}
venueОбязательно

Публичные сведения о заведении и часовой пояс расписания.

object
Полное определение
{
  "type": "object",
  "description": "Публичные сведения о заведении и часовой пояс расписания.",
  "required": [
    "id",
    "name",
    "timeZone"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Идентификатор заведения.",
      "format": "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"
  }
}
termsVersionОбязательно

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

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

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

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

Действующая доступность листа ожидания после истечения запланированной паузы.

string
Полное определение
{
  "type": "string",
  "description": "Действующая доступность листа ожидания после истечения запланированной паузы.",
  "enum": [
    "CLOSED",
    "OPEN",
    "PAUSED"
  ],
  "example": "CLOSED"
}
verificationOptionsОбязательно

Реальные включённые нативные варианты проверки контакта заведения. Пустой список означает, что сейчас ни один способ недоступен; варианты не обещают доставку провайдера.

array
Полное определение
{
  "type": "array",
  "description": "Реальные включённые нативные варианты проверки контакта заведения. Пустой список означает, что сейчас ни один способ недоступен; варианты не обещают доставку провайдера.",
  "items": {
    "type": "object",
    "description": "Один включённый тип контакта и его нативный канал доставки.",
    "additionalProperties": false,
    "required": [
      "contactType",
      "deliveryChannel"
    ],
    "properties": {
      "contactType": {
        "type": "string",
        "description": "Тип контакта, принимаемый этим нативным каналом.",
        "enum": [
          "EMAIL",
          "PHONE"
        ],
        "example": "EMAIL"
      },
      "deliveryChannel": {
        "type": "string",
        "description": "Текущий нативный канал доставки, выбранный для этого типа контакта.",
        "enum": [
          "EMAIL",
          "SMS",
          "WHATSAPP"
        ],
        "example": "EMAIL"
      }
    },
    "example": {
      "contactType": "EMAIL",
      "deliveryChannel": "EMAIL"
    }
  },
  "example": [
    {
      "contactType": "EMAIL",
      "deliveryChannel": "EMAIL"
    }
  ]
}
bookingPolicyОбязательно

Текущие публичные окна намерения и нативные правила занятости по умолчанию. Исключения дат и правила оборота сохраняют силу при доступности и конвертации.

object
Полное определение
{
  "type": "object",
  "description": "Текущие публичные окна намерения и нативные правила занятости по умолчанию. Исключения дат и правила оборота сохраняют силу при доступности и конвертации.",
  "additionalProperties": false,
  "required": [
    "holdMinutes",
    "waitlistVerificationMinutes",
    "defaultDurationMinutes",
    "turnBufferMinutes",
    "graceMinutes"
  ],
  "properties": {
    "holdMinutes": {
      "type": "integer",
      "description": "Длительность намерения бронирования и удержания вместимости публичного канала в минутах.",
      "example": 0
    },
    "waitlistVerificationMinutes": {
      "type": "integer",
      "description": "Длительность намерения листа ожидания публичного канала в минутах. Фактический срок контактного кода возвращается отдельно и может быть раньше.",
      "example": 0
    },
    "defaultDurationMinutes": {
      "type": "integer",
      "description": "Нативная длительность бронирования по умолчанию в минутах до применения правил оборота.",
      "example": 0
    },
    "turnBufferMinutes": {
      "type": "integer",
      "description": "Нативный буфер оборота по умолчанию в минутах до применения правил оборота.",
      "example": 0
    },
    "graceMinutes": {
      "type": "integer",
      "description": "Нативный настроенный льготный период прибытия в минутах.",
      "example": 0
    }
  },
  "example": {
    "holdMinutes": 0,
    "waitlistVerificationMinutes": 0,
    "defaultDurationMinutes": 0,
    "turnBufferMinutes": 0,
    "graceMinutes": 0
  }
}
waitlistPolicyОбязательно

Текущие нативные ограничения числа гостей, очереди и принятия приглашения удалённого листа ожидания. Для входа по-прежнему нужны фактический открытый статус и нативный допуск по business date обслуживания.

object
Полное определение
{
  "type": "object",
  "description": "Текущие нативные ограничения числа гостей, очереди и принятия приглашения удалённого листа ожидания. Для входа по-прежнему нужны фактический открытый статус и нативный допуск по business date обслуживания.",
  "additionalProperties": false,
  "required": [
    "maxPartySize",
    "maxEntries",
    "claimMinutes"
  ],
  "properties": {
    "maxPartySize": {
      "type": "integer",
      "description": "Нативное максимальное число гостей для удалённого листа ожидания.",
      "example": 0
    },
    "maxEntries": {
      "type": "integer",
      "description": "Нативный максимум активных записей ожидания; не раскрывает текущий размер очереди.",
      "example": 0
    },
    "claimMinutes": {
      "type": "integer",
      "description": "Нативное окно принятия предложения в минутах. Конкретное принятое предложение ограничено фактическим claimExpiresAt.",
      "example": 0
    }
  },
  "example": {
    "maxPartySize": 0,
    "maxEntries": 0,
    "claimMinutes": 0
  }
}
serverTimeОбязательно

Серверный момент для интерпретации текущих окон политики в часовом поясе заведения.

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

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

array
Полное определение
{
  "type": "array",
  "description": "Активные публичные периоды обслуживания.",
  "items": {
    "type": "object",
    "description": "Доступное гостю представление периода обслуживания для бронирования.",
    "required": [
      "id",
      "name",
      "dayOfWeek",
      "startsAtMinute",
      "endsAtMinute",
      "slotIntervalMinutes",
      "maxPartySize",
      "bookingMode",
      "minimumLeadMinutes",
      "bookingHorizonDays",
      "publicBookingCutoffMinutes",
      "guaranteeKind",
      "guaranteeAmountBasis",
      "guaranteeUnitAmount",
      "guaranteeMinimumPartySize",
      "guaranteeDueBeforeMinutes",
      "guaranteeFreeCancellationBeforeMinutes",
      "guaranteeForfeitOnLateCancellation",
      "guaranteeForfeitOnNoShow"
    ],
    "properties": {
      "guaranteeKind": {
        "type": "string",
        "enum": [
          "DEPOSIT",
          "CARD_HOLD",
          "PREPAID",
          null
        ],
        "nullable": true,
        "description": "Обязательная гарантия либо null для NONE.",
        "example": "DEPOSIT"
      },
      "guaranteeAmountBasis": {
        "type": "string",
        "enum": [
          "FIXED",
          "PER_GUEST"
        ],
        "description": "Точная фиксированная сумма за бронь либо сумма за принятого гостя.",
        "example": "FIXED"
      },
      "guaranteeUnitAmount": {
        "type": "string",
        "nullable": true,
        "pattern": "^(0|[1-9][0-9]{0,9})\\.[0-9]{2}$",
        "description": "Каноническая нативная единичная сумма с двумя десятичными знаками либо null для NONE.",
        "example": "1.00"
      },
      "guaranteeMinimumPartySize": {
        "type": "integer",
        "minimum": 1,
        "maximum": 99,
        "description": "Минимальное число гостей, к которому применяется политика.",
        "example": 1
      },
      "guaranteeDueBeforeMinutes": {
        "type": "integer",
        "minimum": 0,
        "description": "Число минут до запланированного момента, когда наступает срок оплаты.",
        "example": 0
      },
      "guaranteeFreeCancellationBeforeMinutes": {
        "type": "integer",
        "minimum": 0,
        "description": "Число минут до запланированного момента, когда заканчивается бесплатная отмена.",
        "example": 0
      },
      "guaranteeForfeitOnLateCancellation": {
        "type": "boolean",
        "description": "Разрешают ли принятые условия поздней отмены явное удержание уполномоченным сотрудником.",
        "example": true
      },
      "guaranteeForfeitOnNoShow": {
        "type": "boolean",
        "description": "Разрешают ли принятые условия неявки явное удержание уполномоченным сотрудником; никогда не автоматическое списание.",
        "example": true
      },
      "id": {
        "type": "string",
        "description": "Идентификатор периода обслуживания.",
        "format": "uuid",
        "example": "b926f345-3866-4e0a-8870-720a7d6d91be"
      },
      "name": {
        "type": "string",
        "description": "Название периода обслуживания, показываемое гостю.",
        "example": "Example name"
      },
      "dayOfWeek": {
        "type": "integer",
        "description": "Повторяющийся день недели по местному времени заведения.",
        "example": 0
      },
      "startsAtMinute": {
        "type": "integer",
        "description": "Местное время открытия в минутах после полуночи.",
        "example": 0
      },
      "endsAtMinute": {
        "type": "integer",
        "description": "Местное время закрытия в минутах после полуночи.",
        "example": 0
      },
      "slotIntervalMinutes": {
        "type": "integer",
        "description": "Интервал в минутах между предлагаемыми временами начала.",
        "example": 0
      },
      "maxPartySize": {
        "type": "integer",
        "description": "Максимальное количество гостей для бронирования.",
        "example": 0
      },
      "minimumLeadMinutes": {
        "type": "integer",
        "description": "Нативное минимальное время до бронирования в минутах для периода.",
        "example": 0
      },
      "bookingHorizonDays": {
        "type": "integer",
        "description": "Нативный максимальный горизонт бронирования в днях для периода.",
        "example": 0
      },
      "publicBookingCutoffMinutes": {
        "type": "integer",
        "description": "Нативная граница публичного бронирования до предложенного начала в минутах.",
        "example": 0
      },
      "bookingMode": {
        "type": "string",
        "description": "Подтверждается ли бронирование сразу или требует проверки.",
        "enum": [
          "INSTANT",
          "REQUEST"
        ],
        "example": "INSTANT"
      }
    },
    "example": {
      "guaranteeKind": null,
      "guaranteeAmountBasis": "FIXED",
      "guaranteeUnitAmount": null,
      "guaranteeMinimumPartySize": 1,
      "guaranteeDueBeforeMinutes": 0,
      "guaranteeFreeCancellationBeforeMinutes": 0,
      "guaranteeForfeitOnLateCancellation": true,
      "guaranteeForfeitOnNoShow": true,
      "id": "b926f345-3866-4e0a-8870-720a7d6d91be",
      "name": "Example name",
      "dayOfWeek": 0,
      "startsAtMinute": 0,
      "endsAtMinute": 0,
      "slotIntervalMinutes": 0,
      "maxPartySize": 0,
      "minimumLeadMinutes": 0,
      "bookingHorizonDays": 0,
      "publicBookingCutoffMinutes": 0,
      "bookingMode": "INSTANT"
    }
  },
  "example": [
    {
      "guaranteeKind": null,
      "guaranteeAmountBasis": "FIXED",
      "guaranteeUnitAmount": null,
      "guaranteeMinimumPartySize": 1,
      "guaranteeDueBeforeMinutes": 0,
      "guaranteeFreeCancellationBeforeMinutes": 0,
      "guaranteeForfeitOnLateCancellation": true,
      "guaranteeForfeitOnNoShow": true,
      "id": "b926f345-3866-4e0a-8870-720a7d6d91be",
      "name": "Example name",
      "dayOfWeek": 0,
      "startsAtMinute": 0,
      "endsAtMinute": 0,
      "slotIntervalMinutes": 0,
      "maxPartySize": 0,
      "minimumLeadMinutes": 0,
      "bookingHorizonDays": 0,
      "publicBookingCutoffMinutes": 0,
      "bookingMode": "INSTANT"
    }
  ]
}
Полное определение
{
  "type": "object",
  "description": "Публичная конфигурация бронирования с данными, безопасными для гостя.",
  "required": [
    "publicHandle",
    "venue",
    "termsVersion",
    "privacyVersion",
    "waitlistStatus",
    "servicePeriods",
    "publicChannelId",
    "verificationOptions",
    "bookingPolicy",
    "waitlistPolicy",
    "serverTime"
  ],
  "properties": {
    "publicHandle": {
      "type": "string",
      "description": "Публичный идентификатор канала бронирования.",
      "example": "example"
    },
    "publicChannelId": {
      "type": "string",
      "description": "UUID нативного публичного канала бронирования этого заведения.",
      "format": "uuid",
      "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
    },
    "venue": {
      "type": "object",
      "description": "Публичные сведения о заведении и часовой пояс расписания.",
      "required": [
        "id",
        "name",
        "timeZone"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Идентификатор заведения.",
          "format": "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"
      }
    },
    "termsVersion": {
      "type": "string",
      "description": "Версия условий, которую необходимо принять для нового бронирования.",
      "example": "example"
    },
    "privacyVersion": {
      "type": "string",
      "description": "Версия уведомления о персональных данных, которую необходимо принять для нового бронирования.",
      "example": "example"
    },
    "waitlistStatus": {
      "type": "string",
      "description": "Действующая доступность листа ожидания после истечения запланированной паузы.",
      "enum": [
        "CLOSED",
        "OPEN",
        "PAUSED"
      ],
      "example": "CLOSED"
    },
    "verificationOptions": {
      "type": "array",
      "description": "Реальные включённые нативные варианты проверки контакта заведения. Пустой список означает, что сейчас ни один способ недоступен; варианты не обещают доставку провайдера.",
      "items": {
        "type": "object",
        "description": "Один включённый тип контакта и его нативный канал доставки.",
        "additionalProperties": false,
        "required": [
          "contactType",
          "deliveryChannel"
        ],
        "properties": {
          "contactType": {
            "type": "string",
            "description": "Тип контакта, принимаемый этим нативным каналом.",
            "enum": [
              "EMAIL",
              "PHONE"
            ],
            "example": "EMAIL"
          },
          "deliveryChannel": {
            "type": "string",
            "description": "Текущий нативный канал доставки, выбранный для этого типа контакта.",
            "enum": [
              "EMAIL",
              "SMS",
              "WHATSAPP"
            ],
            "example": "EMAIL"
          }
        },
        "example": {
          "contactType": "EMAIL",
          "deliveryChannel": "EMAIL"
        }
      },
      "example": [
        {
          "contactType": "EMAIL",
          "deliveryChannel": "EMAIL"
        }
      ]
    },
    "bookingPolicy": {
      "type": "object",
      "description": "Текущие публичные окна намерения и нативные правила занятости по умолчанию. Исключения дат и правила оборота сохраняют силу при доступности и конвертации.",
      "additionalProperties": false,
      "required": [
        "holdMinutes",
        "waitlistVerificationMinutes",
        "defaultDurationMinutes",
        "turnBufferMinutes",
        "graceMinutes"
      ],
      "properties": {
        "holdMinutes": {
          "type": "integer",
          "description": "Длительность намерения бронирования и удержания вместимости публичного канала в минутах.",
          "example": 0
        },
        "waitlistVerificationMinutes": {
          "type": "integer",
          "description": "Длительность намерения листа ожидания публичного канала в минутах. Фактический срок контактного кода возвращается отдельно и может быть раньше.",
          "example": 0
        },
        "defaultDurationMinutes": {
          "type": "integer",
          "description": "Нативная длительность бронирования по умолчанию в минутах до применения правил оборота.",
          "example": 0
        },
        "turnBufferMinutes": {
          "type": "integer",
          "description": "Нативный буфер оборота по умолчанию в минутах до применения правил оборота.",
          "example": 0
        },
        "graceMinutes": {
          "type": "integer",
          "description": "Нативный настроенный льготный период прибытия в минутах.",
          "example": 0
        }
      },
      "example": {
        "holdMinutes": 0,
        "waitlistVerificationMinutes": 0,
        "defaultDurationMinutes": 0,
        "turnBufferMinutes": 0,
        "graceMinutes": 0
      }
    },
    "waitlistPolicy": {
      "type": "object",
      "description": "Текущие нативные ограничения числа гостей, очереди и принятия приглашения удалённого листа ожидания. Для входа по-прежнему нужны фактический открытый статус и нативный допуск по business date обслуживания.",
      "additionalProperties": false,
      "required": [
        "maxPartySize",
        "maxEntries",
        "claimMinutes"
      ],
      "properties": {
        "maxPartySize": {
          "type": "integer",
          "description": "Нативное максимальное число гостей для удалённого листа ожидания.",
          "example": 0
        },
        "maxEntries": {
          "type": "integer",
          "description": "Нативный максимум активных записей ожидания; не раскрывает текущий размер очереди.",
          "example": 0
        },
        "claimMinutes": {
          "type": "integer",
          "description": "Нативное окно принятия предложения в минутах. Конкретное принятое предложение ограничено фактическим claimExpiresAt.",
          "example": 0
        }
      },
      "example": {
        "maxPartySize": 0,
        "maxEntries": 0,
        "claimMinutes": 0
      }
    },
    "serverTime": {
      "type": "string",
      "description": "Серверный момент для интерпретации текущих окон политики в часовом поясе заведения.",
      "format": "date-time",
      "example": "2026-01-15T12:00:00.000Z"
    },
    "servicePeriods": {
      "type": "array",
      "description": "Активные публичные периоды обслуживания.",
      "items": {
        "type": "object",
        "description": "Доступное гостю представление периода обслуживания для бронирования.",
        "required": [
          "id",
          "name",
          "dayOfWeek",
          "startsAtMinute",
          "endsAtMinute",
          "slotIntervalMinutes",
          "maxPartySize",
          "bookingMode",
          "minimumLeadMinutes",
          "bookingHorizonDays",
          "publicBookingCutoffMinutes",
          "guaranteeKind",
          "guaranteeAmountBasis",
          "guaranteeUnitAmount",
          "guaranteeMinimumPartySize",
          "guaranteeDueBeforeMinutes",
          "guaranteeFreeCancellationBeforeMinutes",
          "guaranteeForfeitOnLateCancellation",
          "guaranteeForfeitOnNoShow"
        ],
        "properties": {
          "guaranteeKind": {
            "type": "string",
            "enum": [
              "DEPOSIT",
              "CARD_HOLD",
              "PREPAID",
              null
            ],
            "nullable": true,
            "description": "Обязательная гарантия либо null для NONE.",
            "example": "DEPOSIT"
          },
          "guaranteeAmountBasis": {
            "type": "string",
            "enum": [
              "FIXED",
              "PER_GUEST"
            ],
            "description": "Точная фиксированная сумма за бронь либо сумма за принятого гостя.",
            "example": "FIXED"
          },
          "guaranteeUnitAmount": {
            "type": "string",
            "nullable": true,
            "pattern": "^(0|[1-9][0-9]{0,9})\\.[0-9]{2}$",
            "description": "Каноническая нативная единичная сумма с двумя десятичными знаками либо null для NONE.",
            "example": "1.00"
          },
          "guaranteeMinimumPartySize": {
            "type": "integer",
            "minimum": 1,
            "maximum": 99,
            "description": "Минимальное число гостей, к которому применяется политика.",
            "example": 1
          },
          "guaranteeDueBeforeMinutes": {
            "type": "integer",
            "minimum": 0,
            "description": "Число минут до запланированного момента, когда наступает срок оплаты.",
            "example": 0
          },
          "guaranteeFreeCancellationBeforeMinutes": {
            "type": "integer",
            "minimum": 0,
            "description": "Число минут до запланированного момента, когда заканчивается бесплатная отмена.",
            "example": 0
          },
          "guaranteeForfeitOnLateCancellation": {
            "type": "boolean",
            "description": "Разрешают ли принятые условия поздней отмены явное удержание уполномоченным сотрудником.",
            "example": true
          },
          "guaranteeForfeitOnNoShow": {
            "type": "boolean",
            "description": "Разрешают ли принятые условия неявки явное удержание уполномоченным сотрудником; никогда не автоматическое списание.",
            "example": true
          },
          "id": {
            "type": "string",
            "description": "Идентификатор периода обслуживания.",
            "format": "uuid",
            "example": "b926f345-3866-4e0a-8870-720a7d6d91be"
          },
          "name": {
            "type": "string",
            "description": "Название периода обслуживания, показываемое гостю.",
            "example": "Example name"
          },
          "dayOfWeek": {
            "type": "integer",
            "description": "Повторяющийся день недели по местному времени заведения.",
            "example": 0
          },
          "startsAtMinute": {
            "type": "integer",
            "description": "Местное время открытия в минутах после полуночи.",
            "example": 0
          },
          "endsAtMinute": {
            "type": "integer",
            "description": "Местное время закрытия в минутах после полуночи.",
            "example": 0
          },
          "slotIntervalMinutes": {
            "type": "integer",
            "description": "Интервал в минутах между предлагаемыми временами начала.",
            "example": 0
          },
          "maxPartySize": {
            "type": "integer",
            "description": "Максимальное количество гостей для бронирования.",
            "example": 0
          },
          "minimumLeadMinutes": {
            "type": "integer",
            "description": "Нативное минимальное время до бронирования в минутах для периода.",
            "example": 0
          },
          "bookingHorizonDays": {
            "type": "integer",
            "description": "Нативный максимальный горизонт бронирования в днях для периода.",
            "example": 0
          },
          "publicBookingCutoffMinutes": {
            "type": "integer",
            "description": "Нативная граница публичного бронирования до предложенного начала в минутах.",
            "example": 0
          },
          "bookingMode": {
            "type": "string",
            "description": "Подтверждается ли бронирование сразу или требует проверки.",
            "enum": [
              "INSTANT",
              "REQUEST"
            ],
            "example": "INSTANT"
          }
        },
        "example": {
          "guaranteeKind": null,
          "guaranteeAmountBasis": "FIXED",
          "guaranteeUnitAmount": null,
          "guaranteeMinimumPartySize": 1,
          "guaranteeDueBeforeMinutes": 0,
          "guaranteeFreeCancellationBeforeMinutes": 0,
          "guaranteeForfeitOnLateCancellation": true,
          "guaranteeForfeitOnNoShow": true,
          "id": "b926f345-3866-4e0a-8870-720a7d6d91be",
          "name": "Example name",
          "dayOfWeek": 0,
          "startsAtMinute": 0,
          "endsAtMinute": 0,
          "slotIntervalMinutes": 0,
          "maxPartySize": 0,
          "minimumLeadMinutes": 0,
          "bookingHorizonDays": 0,
          "publicBookingCutoffMinutes": 0,
          "bookingMode": "INSTANT"
        }
      },
      "example": [
        {
          "guaranteeKind": null,
          "guaranteeAmountBasis": "FIXED",
          "guaranteeUnitAmount": null,
          "guaranteeMinimumPartySize": 1,
          "guaranteeDueBeforeMinutes": 0,
          "guaranteeFreeCancellationBeforeMinutes": 0,
          "guaranteeForfeitOnLateCancellation": true,
          "guaranteeForfeitOnNoShow": true,
          "id": "b926f345-3866-4e0a-8870-720a7d6d91be",
          "name": "Example name",
          "dayOfWeek": 0,
          "startsAtMinute": 0,
          "endsAtMinute": 0,
          "slotIntervalMinutes": 0,
          "maxPartySize": 0,
          "minimumLeadMinutes": 0,
          "bookingHorizonDays": 0,
          "publicBookingCutoffMinutes": 0,
          "bookingMode": "INSTANT"
        }
      ]
    }
  },
  "example": {
    "publicHandle": "example",
    "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
    "venue": {
      "id": "fbc6db41-f1c2-4f74-862d-210bd28ee2a0",
      "name": "Example name",
      "timeZone": "Asia/Tbilisi"
    },
    "termsVersion": "example",
    "privacyVersion": "example",
    "waitlistStatus": "CLOSED",
    "verificationOptions": [
      {
        "contactType": "EMAIL",
        "deliveryChannel": "EMAIL"
      }
    ],
    "bookingPolicy": {
      "holdMinutes": 0,
      "waitlistVerificationMinutes": 0,
      "defaultDurationMinutes": 0,
      "turnBufferMinutes": 0,
      "graceMinutes": 0
    },
    "waitlistPolicy": {
      "maxPartySize": 0,
      "maxEntries": 0,
      "claimMinutes": 0
    },
    "serverTime": "2026-01-15T12:00:00.000Z",
    "servicePeriods": [
      {
        "guaranteeKind": null,
        "guaranteeAmountBasis": "FIXED",
        "guaranteeUnitAmount": null,
        "guaranteeMinimumPartySize": 1,
        "guaranteeDueBeforeMinutes": 0,
        "guaranteeFreeCancellationBeforeMinutes": 0,
        "guaranteeForfeitOnLateCancellation": true,
        "guaranteeForfeitOnNoShow": true,
        "id": "b926f345-3866-4e0a-8870-720a7d6d91be",
        "name": "Example name",
        "dayOfWeek": 0,
        "startsAtMinute": 0,
        "endsAtMinute": 0,
        "slotIntervalMinutes": 0,
        "maxPartySize": 0,
        "minimumLeadMinutes": 0,
        "bookingHorizonDays": 0,
        "publicBookingCutoffMinutes": 0,
        "bookingMode": "INSTANT"
      }
    ]
  }
}

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

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