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

Наблюдение за гостевыми ресурсами

Получить начальный снимок наблюдения за ресурсом Hallify

POST/public/guest-observers/baseline

Проверяет текущий ключ READ ресурса Hallify и фактический Origin, фиксирует реальную позицию журнала ресурса, затем повторно проверяет те же права перед чтением безопасного текущего снимка. Использованный допуск Socket не требуется. Запросите отдельный билет и сравните scopeBinding перед подпиской на public-guest с этим курсором. При недоступности зависимостей возвращается ошибка без подставного курсора.

Авторизация

Персональный доступ передаётся в body: public-guest-native-read-capability.

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

Параметры

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

Фактический Origin, переданный браузером: обязателен и проверяется для канонического и привязанного доступа READ к ресурсу Hallify.

string
Полное определение
{
  "type": "string",
  "maxLength": 2048,
  "example": "example"
}

Тело запроса

Обязательно

Точный ресурс Hallify и его действующий приватный ключ READ, переданные прямо в теле. Запасной доступ через учётную запись, устройство, cookie или URL не используется.

application/json

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

Ответы

200Безопасный текущий снимок ресурса Hallify и реальный курсор, привязанный к ресурсу и его правам. Операция не выдаёт билет или новый ключ ресурса.

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

Cache-Control

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

string
Полное определение
{
  "type": "string",
  "enum": [
    "no-store"
  ],
  "example": "no-store"
}
PublicGuestObserverBaselineDto
Полное определение
{
  "$ref": "#/components/schemas/PublicGuestObserverBaselineDto"
}
Пример ответа · 200 · application/json
{
  "streamId": "public-guest",
  "scopeBinding": "gpos1_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
  "cursor": "WyIzblpfaUh2aGkyUmw0MHpIQXNvcEF4UE1QX1hmQmhnVWdGemVVSDB5YktNIiwwLCJzeW50aGV0aWMtb2JzZXJ2ZXItZXBvY2giLCIwIiwxODkzNDU2MDAwMDAwXQ.mLmPD58AQQrBrOVbBTVSC1hGgPgEAqJHdEWB-qBcs6Q",
  "snapshot": {
    "kind": "PREORDER",
    "id": "c279756e-3e4a-4ce8-80ee-294a35df0667",
    "orderId": "445745d8-5b60-47eb-98e2-c3a9a146f7fa",
    "revision": 1,
    "status": "CONFIRMED",
    "serviceMode": "PICKUP",
    "scheduledFor": "2030-01-02T12:00:00.000Z",
    "partySize": 2
  }
}
400Некорректный формат ресурса Hallify или ключа доступа.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 400 · application/json
{
  "statusCode": 400,
  "error": "errors:http.badRequest",
  "code": "HTTP_BAD_REQUEST",
  "message": "errors:http.badRequest",
  "translationKey": "errors:http.badRequest"
}
401Текущие права истекли, изменились или больше не принадлежат этому ресурсу.
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"
}
403Фактический Origin браузера отсутствует или не разрешён.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 403 · application/json
{
  "statusCode": 403,
  "error": "errors:http.forbidden",
  "code": "HTTP_FORBIDDEN",
  "message": "errors:http.forbidden",
  "translationKey": "errors:http.forbidden"
}
404Доступ READ к ресурсу Hallify недоступен; наличие ресурса не раскрывается.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 404 · application/json
{
  "statusCode": 404,
  "error": "errors:http.notFound",
  "code": "HTTP_NOT_FOUND",
  "message": "errors:http.notFound",
  "translationKey": "errors:http.notFound"
}
503Реальный журнал или защитный барьер не готовы, превышены установленные пределы запроса либо зависимости стали недоступны.
TranslatedErrorDto
Полное определение
{
  "$ref": "#/components/schemas/TranslatedErrorDto"
}
Пример ответа · 503 · application/json
{
  "statusCode": 503,
  "error": "errors:http.serviceUnavailable",
  "code": "HTTP_SERVICE_UNAVAILABLE",
  "message": "errors:http.serviceUnavailable",
  "translationKey": "errors:http.serviceUnavailable"
}

Схемы

ReadPublicGuestObserverBaselineDto

Приватный запрос READ ресурса Hallify для безопасного снимка и его курсора наблюдения. После фиксации позиции журнала повторно проверяются действующий ключ и фактический Origin браузера. Запрос не выдаёт билет, cookie или новый ключ ресурса.

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

Тип ресурса Hallify с реализованным допуском наблюдателей, разрешённый переданным текущим ключом READ. Запланированный предзаказ, бронирование, лист ожидания и сессия стола проверяются своими доменами.

allOf
Полное определение
{
  "description": "Тип ресурса Hallify с реализованным допуском наблюдателей, разрешённый переданным текущим ключом READ. Запланированный предзаказ, бронирование, лист ожидания и сессия стола проверяются своими доменами.",
  "allOf": [
    {
      "$ref": "#/components/schemas/PublicObserverTicketResourceKind"
    }
  ],
  "example": "PREORDER"
}
resourceIdОбязательно

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

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "Точный UUID исполнения предзаказа, бронирования, записи листа ожидания или сессии стола Hallify. Текущий ключ должен принадлежать этому ресурсу.",
  "example": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568"
}
capabilityОбязательно

Текущий приватный ключ READ выбранного ресурса Hallify. Передавайте прямо в теле этой команды; не помещайте в URL, Redux, журналы или механизм авторизации учётной записи браузера.

string
Полное определение
{
  "type": "string",
  "minLength": 20,
  "maxLength": 1024,
  "writeOnly": true,
  "description": "Текущий приватный ключ READ выбранного ресурса Hallify. Передавайте прямо в теле этой команды; не помещайте в URL, Redux, журналы или механизм авторизации учётной записи браузера.",
  "example": "https://example.test/resource"
}
Полное определение
{
  "type": "object",
  "properties": {
    "kind": {
      "description": "Тип ресурса Hallify с реализованным допуском наблюдателей, разрешённый переданным текущим ключом READ. Запланированный предзаказ, бронирование, лист ожидания и сессия стола проверяются своими доменами.",
      "allOf": [
        {
          "$ref": "#/components/schemas/PublicObserverTicketResourceKind"
        }
      ],
      "example": "PREORDER"
    },
    "resourceId": {
      "type": "string",
      "format": "uuid",
      "description": "Точный UUID исполнения предзаказа, бронирования, записи листа ожидания или сессии стола Hallify. Текущий ключ должен принадлежать этому ресурсу.",
      "example": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568"
    },
    "capability": {
      "type": "string",
      "minLength": 20,
      "maxLength": 1024,
      "writeOnly": true,
      "description": "Текущий приватный ключ READ выбранного ресурса Hallify. Передавайте прямо в теле этой команды; не помещайте в URL, Redux, журналы или механизм авторизации учётной записи браузера.",
      "example": "https://example.test/resource"
    }
  },
  "description": "Приватный запрос READ ресурса Hallify для безопасного снимка и его курсора наблюдения. После фиксации позиции журнала повторно проверяются действующий ключ и фактический Origin браузера. Запрос не выдаёт билет, cookie или новый ключ ресурса.",
  "required": [
    "kind",
    "resourceId",
    "capability"
  ],
  "example": {
    "kind": "PREORDER",
    "resourceId": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568",
    "capability": "https://example.test/resource"
  }
}
PublicObserverTicketResourceKind

Тип ресурса Hallify с реализованным допуском наблюдателей, разрешённый переданным текущим ключом READ. Запланированный предзаказ, бронирование, лист ожидания и сессия стола проверяются своими доменами.

Полное определение
{
  "type": "string",
  "enum": [
    "PREORDER",
    "RESERVATION",
    "WAITLIST",
    "TABLE_SESSION"
  ],
  "description": "Тип ресурса Hallify с реализованным допуском наблюдателей, разрешённый переданным текущим ключом READ. Запланированный предзаказ, бронирование, лист ожидания и сессия стола проверяются своими доменами.",
  "example": "PREORDER"
}
PublicGuestObserverBaselineDto

Снимок ресурса Hallify в области ключа с реальным курсором Socket, привязанным к ресурсу и правам и зафиксированным перед снимком. Запросите отдельный билет и потребуйте совпадение scopeBinding перед подпиской. Ответ не предоставляет новый доступ к ресурсу или транспортную cookie.

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

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

string
Полное определение
{
  "type": "string",
  "enum": [
    "public-guest"
  ],
  "description": "Единственный публичный поток наблюдения за ресурсами Hallify, поддерживаемый этим начальным снимком.",
  "example": "public-guest"
}
scopeBindingОбязательно

Несекретная привязка прав. Должна совпадать с отдельно выданным билетом; для области сессии добавьте двоеточие и клиентский контекст длиной от 1 до 128 символов.

string
Полное определение
{
  "type": "string",
  "minLength": 49,
  "maxLength": 49,
  "pattern": "^gpos1_[A-Za-z0-9_-]{43}$",
  "example": "gpos1_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
  "description": "Несекретная привязка прав. Должна совпадать с отдельно выданным билетом; для области сессии добавьте двоеточие и клиентский контекст длиной от 1 до 128 символов."
}
cursorОбязательно

Реальный подписанный курсор из настроенного журнала с текущими правами ресурса Hallify. Храните вместе с этим снимком и контекстом ресурса; сам курсор прав не предоставляет. Пример использует только вымышленные данные и вымышленный ключ подписи.

string
Полное определение
{
  "type": "string",
  "minLength": 1,
  "maxLength": 512,
  "example": "WyIzblpfaUh2aGkyUmw0MHpIQXNvcEF4UE1QX1hmQmhnVWdGemVVSDB5YktNIiwwLCJzeW50aGV0aWMtb2JzZXJ2ZXItZXBvY2giLCIwIiwxODkzNDU2MDAwMDAwXQ.mLmPD58AQQrBrOVbBTVSC1hGgPgEAqJHdEWB-qBcs6Q",
  "description": "Реальный подписанный курсор из настроенного журнала с текущими правами ресурса Hallify. Храните вместе с этим снимком и контекстом ресурса; сам курсор прав не предоставляет. Пример использует только вымышленные данные и вымышленный ключ подписи."
}
snapshotОбязательно

Безопасное текущее представление READ, возвращённое точным владельцем ресурса после повторной авторизации.

oneOf
Полное определение
{
  "description": "Безопасное текущее представление READ, возвращённое точным владельцем ресурса после повторной авторизации.",
  "oneOf": [
    {
      "$ref": "#/components/schemas/PublicGuestObserverPreorderSnapshotDto"
    },
    {
      "$ref": "#/components/schemas/PublicGuestObserverReservationSnapshotDto"
    },
    {
      "$ref": "#/components/schemas/PublicGuestObserverWaitlistSnapshotDto"
    },
    {
      "$ref": "#/components/schemas/PublicGuestObserverTableSnapshotDto"
    }
  ],
  "discriminator": {
    "propertyName": "kind",
    "mapping": {
      "PREORDER": "#/components/schemas/PublicGuestObserverPreorderSnapshotDto",
      "RESERVATION": "#/components/schemas/PublicGuestObserverReservationSnapshotDto",
      "WAITLIST": "#/components/schemas/PublicGuestObserverWaitlistSnapshotDto",
      "TABLE_SESSION": "#/components/schemas/PublicGuestObserverTableSnapshotDto"
    }
  },
  "example": {
    "kind": "PREORDER",
    "id": "c279756e-3e4a-4ce8-80ee-294a35df0667",
    "orderId": "445745d8-5b60-47eb-98e2-c3a9a146f7fa",
    "revision": 1,
    "status": "CONFIRMED",
    "serviceMode": "PICKUP",
    "scheduledFor": "2030-01-02T12:00:00.000Z",
    "partySize": 2
  }
}
Полное определение
{
  "type": "object",
  "properties": {
    "streamId": {
      "type": "string",
      "enum": [
        "public-guest"
      ],
      "description": "Единственный публичный поток наблюдения за ресурсами Hallify, поддерживаемый этим начальным снимком.",
      "example": "public-guest"
    },
    "scopeBinding": {
      "type": "string",
      "minLength": 49,
      "maxLength": 49,
      "pattern": "^gpos1_[A-Za-z0-9_-]{43}$",
      "example": "gpos1_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
      "description": "Несекретная привязка прав. Должна совпадать с отдельно выданным билетом; для области сессии добавьте двоеточие и клиентский контекст длиной от 1 до 128 символов."
    },
    "cursor": {
      "type": "string",
      "minLength": 1,
      "maxLength": 512,
      "example": "WyIzblpfaUh2aGkyUmw0MHpIQXNvcEF4UE1QX1hmQmhnVWdGemVVSDB5YktNIiwwLCJzeW50aGV0aWMtb2JzZXJ2ZXItZXBvY2giLCIwIiwxODkzNDU2MDAwMDAwXQ.mLmPD58AQQrBrOVbBTVSC1hGgPgEAqJHdEWB-qBcs6Q",
      "description": "Реальный подписанный курсор из настроенного журнала с текущими правами ресурса Hallify. Храните вместе с этим снимком и контекстом ресурса; сам курсор прав не предоставляет. Пример использует только вымышленные данные и вымышленный ключ подписи."
    },
    "snapshot": {
      "description": "Безопасное текущее представление READ, возвращённое точным владельцем ресурса после повторной авторизации.",
      "oneOf": [
        {
          "$ref": "#/components/schemas/PublicGuestObserverPreorderSnapshotDto"
        },
        {
          "$ref": "#/components/schemas/PublicGuestObserverReservationSnapshotDto"
        },
        {
          "$ref": "#/components/schemas/PublicGuestObserverWaitlistSnapshotDto"
        },
        {
          "$ref": "#/components/schemas/PublicGuestObserverTableSnapshotDto"
        }
      ],
      "discriminator": {
        "propertyName": "kind",
        "mapping": {
          "PREORDER": "#/components/schemas/PublicGuestObserverPreorderSnapshotDto",
          "RESERVATION": "#/components/schemas/PublicGuestObserverReservationSnapshotDto",
          "WAITLIST": "#/components/schemas/PublicGuestObserverWaitlistSnapshotDto",
          "TABLE_SESSION": "#/components/schemas/PublicGuestObserverTableSnapshotDto"
        }
      },
      "example": {
        "kind": "PREORDER",
        "id": "c279756e-3e4a-4ce8-80ee-294a35df0667",
        "orderId": "445745d8-5b60-47eb-98e2-c3a9a146f7fa",
        "revision": 1,
        "status": "CONFIRMED",
        "serviceMode": "PICKUP",
        "scheduledFor": "2030-01-02T12:00:00.000Z",
        "partySize": 2
      }
    }
  },
  "description": "Снимок ресурса Hallify в области ключа с реальным курсором Socket, привязанным к ресурсу и правам и зафиксированным перед снимком. Запросите отдельный билет и потребуйте совпадение scopeBinding перед подпиской. Ответ не предоставляет новый доступ к ресурсу или транспортную cookie.",
  "required": [
    "streamId",
    "scopeBinding",
    "cursor",
    "snapshot"
  ],
  "example": {
    "streamId": "public-guest",
    "scopeBinding": "gpos1_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    "cursor": "WyIzblpfaUh2aGkyUmw0MHpIQXNvcEF4UE1QX1hmQmhnVWdGemVVSDB5YktNIiwwLCJzeW50aGV0aWMtb2JzZXJ2ZXItZXBvY2giLCIwIiwxODkzNDU2MDAwMDAwXQ.mLmPD58AQQrBrOVbBTVSC1hGgPgEAqJHdEWB-qBcs6Q",
    "snapshot": {
      "kind": "PREORDER",
      "id": "c279756e-3e4a-4ce8-80ee-294a35df0667",
      "orderId": "445745d8-5b60-47eb-98e2-c3a9a146f7fa",
      "revision": 1,
      "status": "CONFIRMED",
      "serviceMode": "PICKUP",
      "scheduledFor": "2030-01-02T12:00:00.000Z",
      "partySize": 2
    }
  }
}
PublicGuestObserverPreorderSnapshotDto

Текущий снимок READ запланированного предзаказа Hallify в области ключа. Владелец ресурса предоставляет публичные статус и расписание без контактов, депозита, распределений и приватных платёжных данных.

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

Тип ресурса Hallify в этом снимке.

string
Полное определение
{
  "type": "string",
  "enum": [
    "PREORDER"
  ],
  "description": "Тип ресурса Hallify в этом снимке.",
  "example": "PREORDER"
}
idОбязательно

Точное запланированное исполнение Hallify, разрешённое ключом.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "Точное запланированное исполнение Hallify, разрешённое ключом.",
  "example": "c279756e-3e4a-4ce8-80ee-294a35df0667"
}
orderIdОбязательно

Заказ Hallify, принадлежащий разрешённому запланированному исполнению.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "Заказ Hallify, принадлежащий разрешённому запланированному исполнению.",
  "example": "445745d8-5b60-47eb-98e2-c3a9a146f7fa"
}
revisionОбязательно

Текущая бизнес-ревизия исполнения Hallify.

integer
Полное определение
{
  "type": "integer",
  "minimum": 1,
  "description": "Текущая бизнес-ревизия исполнения Hallify.",
  "example": 1
}
statusОбязательно

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

string
Полное определение
{
  "type": "string",
  "enum": [
    "DRAFT",
    "HELD",
    "CONFIRMED",
    "IN_PREPARATION",
    "READY_FOR_HANDOFF",
    "OUT_FOR_DELIVERY",
    "COMPLETED",
    "CANCELED",
    "EXPIRED"
  ],
  "description": "Текущий статус запланированного исполнения, полученный от его владельца.",
  "example": "CONFIRMED"
}
serviceModeОбязательно

Текущий способ обслуживания исполнения Hallify.

string
Полное определение
{
  "type": "string",
  "enum": [
    "DINE_IN",
    "PICKUP",
    "DELIVERY",
    "CATERING"
  ],
  "description": "Текущий способ обслуживания исполнения Hallify.",
  "example": "PICKUP"
}
scheduledForОбязательно

Текущее запланированное время обслуживания разрешённого исполнения.

string · date-time
Полное определение
{
  "type": "string",
  "format": "date-time",
  "description": "Текущее запланированное время обслуживания разрешённого исполнения.",
  "example": "2030-01-02T12:00:00.000Z"
}
partySizeОбязательно

Текущее число гостей Hallify.

integer
Полное определение
{
  "type": "integer",
  "minimum": 1,
  "description": "Текущее число гостей Hallify.",
  "example": 2
}
deliveryTrackingНеобязательно

Текущее представление доставки для принятой пары предложений. Отсутствует для старых исполнений; равно null, когда соответствующего внешнего курьерского отправления нет.

object · null
Полное определение
{
  "nullable": true,
  "description": "Текущее представление доставки для принятой пары предложений. Отсутствует для старых исполнений; равно null, когда соответствующего внешнего курьерского отправления нет.",
  "type": "object",
  "properties": {
    "shipmentId": {
      "type": "string",
      "format": "uuid",
      "description": "Курьерское отправление, привязанное к текущей принятой паре предложений заказа.",
      "example": "107f0aae-41ba-4259-84aa-b07de763733f"
    },
    "revision": {
      "type": "integer",
      "minimum": 1,
      "description": "Монотонно возрастающая ревизия представления курьерского отправления.",
      "example": 1
    },
    "provider": {
      "type": "string",
      "enum": [
        "UBER_DIRECT",
        "WOLT_DRIVE"
      ],
      "description": "Курьерская служба, зафиксированная в принятом запросе на доставку заказа.",
      "example": "UBER_DIRECT"
    },
    "state": {
      "description": "Подтверждённое представление курьерской доставки, включая явные состояния неопределённости и сверки.",
      "allOf": [
        {
          "$ref": "#/components/schemas/DeliveryShipmentState"
        }
      ],
      "example": "PREPARED"
    },
    "trackingUrl": {
      "type": "string",
      "nullable": true,
      "format": "uri",
      "maxLength": 2048,
      "description": "Проверенная HTTPS-ссылка для отслеживания либо null, если она недоступна или скрыта действующими правилами приватности.",
      "example": "https://example.test/resource"
    },
    "pickupEta": {
      "type": "string",
      "nullable": true,
      "format": "date-time",
      "description": "Последняя оценка времени забора заказа провайдером в формате ISO UTC либо null.",
      "example": "2026-01-15T12:00:00.000Z"
    },
    "dropoffEtaMin": {
      "type": "string",
      "nullable": true,
      "format": "date-time",
      "description": "Самая ранняя оценка времени вручения заказа провайдером в формате ISO UTC либо null.",
      "example": "2026-01-15T12:00:00.000Z"
    },
    "dropoffEtaMax": {
      "type": "string",
      "nullable": true,
      "format": "date-time",
      "description": "Самая поздняя оценка времени вручения заказа провайдером в формате ISO UTC либо null.",
      "example": "2026-01-15T12:00:00.000Z"
    },
    "requiresAttention": {
      "type": "boolean",
      "description": "Данные курьера или применение результата к заказу требуют внимания оператора; это не даёт полномочий на оплату или отмену самого заказа.",
      "example": true
    }
  },
  "required": [
    "shipmentId",
    "revision",
    "provider",
    "state",
    "trackingUrl",
    "pickupEta",
    "dropoffEtaMin",
    "dropoffEtaMax",
    "requiresAttention"
  ],
  "example": {
    "shipmentId": "107f0aae-41ba-4259-84aa-b07de763733f",
    "revision": 1,
    "provider": "UBER_DIRECT",
    "state": "PREPARED",
    "trackingUrl": null,
    "pickupEta": null,
    "dropoffEtaMin": null,
    "dropoffEtaMax": null,
    "requiresAttention": true
  }
}
Полное определение
{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "PREORDER"
      ],
      "description": "Тип ресурса Hallify в этом снимке.",
      "example": "PREORDER"
    },
    "id": {
      "type": "string",
      "format": "uuid",
      "description": "Точное запланированное исполнение Hallify, разрешённое ключом.",
      "example": "c279756e-3e4a-4ce8-80ee-294a35df0667"
    },
    "orderId": {
      "type": "string",
      "format": "uuid",
      "description": "Заказ Hallify, принадлежащий разрешённому запланированному исполнению.",
      "example": "445745d8-5b60-47eb-98e2-c3a9a146f7fa"
    },
    "revision": {
      "type": "integer",
      "minimum": 1,
      "description": "Текущая бизнес-ревизия исполнения Hallify.",
      "example": 1
    },
    "status": {
      "type": "string",
      "enum": [
        "DRAFT",
        "HELD",
        "CONFIRMED",
        "IN_PREPARATION",
        "READY_FOR_HANDOFF",
        "OUT_FOR_DELIVERY",
        "COMPLETED",
        "CANCELED",
        "EXPIRED"
      ],
      "description": "Текущий статус запланированного исполнения, полученный от его владельца.",
      "example": "CONFIRMED"
    },
    "serviceMode": {
      "type": "string",
      "enum": [
        "DINE_IN",
        "PICKUP",
        "DELIVERY",
        "CATERING"
      ],
      "description": "Текущий способ обслуживания исполнения Hallify.",
      "example": "PICKUP"
    },
    "scheduledFor": {
      "type": "string",
      "format": "date-time",
      "description": "Текущее запланированное время обслуживания разрешённого исполнения.",
      "example": "2030-01-02T12:00:00.000Z"
    },
    "partySize": {
      "type": "integer",
      "minimum": 1,
      "description": "Текущее число гостей Hallify.",
      "example": 2
    },
    "deliveryTracking": {
      "nullable": true,
      "description": "Текущее представление доставки для принятой пары предложений. Отсутствует для старых исполнений; равно null, когда соответствующего внешнего курьерского отправления нет.",
      "type": "object",
      "properties": {
        "shipmentId": {
          "type": "string",
          "format": "uuid",
          "description": "Курьерское отправление, привязанное к текущей принятой паре предложений заказа.",
          "example": "107f0aae-41ba-4259-84aa-b07de763733f"
        },
        "revision": {
          "type": "integer",
          "minimum": 1,
          "description": "Монотонно возрастающая ревизия представления курьерского отправления.",
          "example": 1
        },
        "provider": {
          "type": "string",
          "enum": [
            "UBER_DIRECT",
            "WOLT_DRIVE"
          ],
          "description": "Курьерская служба, зафиксированная в принятом запросе на доставку заказа.",
          "example": "UBER_DIRECT"
        },
        "state": {
          "description": "Подтверждённое представление курьерской доставки, включая явные состояния неопределённости и сверки.",
          "allOf": [
            {
              "$ref": "#/components/schemas/DeliveryShipmentState"
            }
          ],
          "example": "PREPARED"
        },
        "trackingUrl": {
          "type": "string",
          "nullable": true,
          "format": "uri",
          "maxLength": 2048,
          "description": "Проверенная HTTPS-ссылка для отслеживания либо null, если она недоступна или скрыта действующими правилами приватности.",
          "example": "https://example.test/resource"
        },
        "pickupEta": {
          "type": "string",
          "nullable": true,
          "format": "date-time",
          "description": "Последняя оценка времени забора заказа провайдером в формате ISO UTC либо null.",
          "example": "2026-01-15T12:00:00.000Z"
        },
        "dropoffEtaMin": {
          "type": "string",
          "nullable": true,
          "format": "date-time",
          "description": "Самая ранняя оценка времени вручения заказа провайдером в формате ISO UTC либо null.",
          "example": "2026-01-15T12:00:00.000Z"
        },
        "dropoffEtaMax": {
          "type": "string",
          "nullable": true,
          "format": "date-time",
          "description": "Самая поздняя оценка времени вручения заказа провайдером в формате ISO UTC либо null.",
          "example": "2026-01-15T12:00:00.000Z"
        },
        "requiresAttention": {
          "type": "boolean",
          "description": "Данные курьера или применение результата к заказу требуют внимания оператора; это не даёт полномочий на оплату или отмену самого заказа.",
          "example": true
        }
      },
      "required": [
        "shipmentId",
        "revision",
        "provider",
        "state",
        "trackingUrl",
        "pickupEta",
        "dropoffEtaMin",
        "dropoffEtaMax",
        "requiresAttention"
      ],
      "example": {
        "shipmentId": "107f0aae-41ba-4259-84aa-b07de763733f",
        "revision": 1,
        "provider": "UBER_DIRECT",
        "state": "PREPARED",
        "trackingUrl": null,
        "pickupEta": null,
        "dropoffEtaMin": null,
        "dropoffEtaMax": null,
        "requiresAttention": true
      }
    }
  },
  "description": "Текущий снимок READ запланированного предзаказа Hallify в области ключа. Владелец ресурса предоставляет публичные статус и расписание без контактов, депозита, распределений и приватных платёжных данных.",
  "required": [
    "kind",
    "id",
    "orderId",
    "revision",
    "status",
    "serviceMode",
    "scheduledFor",
    "partySize"
  ],
  "example": {
    "kind": "PREORDER",
    "id": "c279756e-3e4a-4ce8-80ee-294a35df0667",
    "orderId": "445745d8-5b60-47eb-98e2-c3a9a146f7fa",
    "revision": 1,
    "status": "CONFIRMED",
    "serviceMode": "PICKUP",
    "scheduledFor": "2030-01-02T12:00:00.000Z",
    "partySize": 2
  }
}
DeliveryShipmentState

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

Полное определение
{
  "type": "string",
  "enum": [
    "PREPARED",
    "DISPATCHING",
    "UNKNOWN",
    "CONFIRMED",
    "PICKUP_STARTED",
    "PICKED_UP",
    "IN_TRANSIT",
    "DELIVERED",
    "CANCELED",
    "NOT_DELIVERED",
    "RETURNING",
    "RETURNED",
    "REJECTED",
    "RECONCILIATION_REQUIRED"
  ],
  "description": "Подтверждённое представление курьерской доставки, включая явные состояния неопределённости и сверки.",
  "example": "PREPARED"
}
PublicGuestObserverReservationSnapshotDto

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

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

Тип ресурса Hallify в этом снимке.

string
Полное определение
{
  "type": "string",
  "enum": [
    "RESERVATION"
  ],
  "description": "Тип ресурса Hallify в этом снимке.",
  "example": "RESERVATION"
}
idОбязательно

Точное бронирование, разрешённое текущим ключом.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "Точное бронирование, разрешённое текущим ключом.",
  "example": "c279756e-3e4a-4ce8-80ee-294a35df0667"
}
referenceCodeОбязательно

Публичный код разрешённого бронирования.

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

Текущая бизнес-ревизия бронирования Hallify.

integer
Полное определение
{
  "type": "integer",
  "minimum": 1,
  "description": "Текущая бизнес-ревизия бронирования Hallify.",
  "example": 1
}
statusОбязательно

Текущий статус бронирования Hallify; события наблюдения не подменяют статус.

string
Полное определение
{
  "type": "string",
  "enum": [
    "REQUESTED",
    "BOOKED",
    "CONFIRMED",
    "ARRIVED",
    "SEATED",
    "CANCELED",
    "NO_SHOW",
    "DECLINED",
    "EXPIRED"
  ],
  "description": "Текущий статус бронирования Hallify; события наблюдения не подменяют статус.",
  "example": "CONFIRMED"
}
scheduledAtОбязательно

Текущее разрешённое время начала бронирования.

string · date-time
Полное определение
{
  "type": "string",
  "format": "date-time",
  "description": "Текущее разрешённое время начала бронирования.",
  "example": "2030-01-02T12:00:00.000Z"
}
endsAtОбязательно

Текущее разрешённое время окончания бронирования.

string · date-time
Полное определение
{
  "type": "string",
  "format": "date-time",
  "description": "Текущее разрешённое время окончания бронирования.",
  "example": "2030-01-02T14:00:00.000Z"
}
partySizeОбязательно

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

integer
Полное определение
{
  "type": "integer",
  "minimum": 1,
  "description": "Текущее число гостей этого бронирования.",
  "example": 2
}
Полное определение
{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "RESERVATION"
      ],
      "description": "Тип ресурса Hallify в этом снимке.",
      "example": "RESERVATION"
    },
    "id": {
      "type": "string",
      "format": "uuid",
      "description": "Точное бронирование, разрешённое текущим ключом.",
      "example": "c279756e-3e4a-4ce8-80ee-294a35df0667"
    },
    "referenceCode": {
      "type": "string",
      "description": "Публичный код разрешённого бронирования.",
      "example": "SYNTHETIC"
    },
    "revision": {
      "type": "integer",
      "minimum": 1,
      "description": "Текущая бизнес-ревизия бронирования Hallify.",
      "example": 1
    },
    "status": {
      "type": "string",
      "enum": [
        "REQUESTED",
        "BOOKED",
        "CONFIRMED",
        "ARRIVED",
        "SEATED",
        "CANCELED",
        "NO_SHOW",
        "DECLINED",
        "EXPIRED"
      ],
      "description": "Текущий статус бронирования Hallify; события наблюдения не подменяют статус.",
      "example": "CONFIRMED"
    },
    "scheduledAt": {
      "type": "string",
      "format": "date-time",
      "description": "Текущее разрешённое время начала бронирования.",
      "example": "2030-01-02T12:00:00.000Z"
    },
    "endsAt": {
      "type": "string",
      "format": "date-time",
      "description": "Текущее разрешённое время окончания бронирования.",
      "example": "2030-01-02T14:00:00.000Z"
    },
    "partySize": {
      "type": "integer",
      "minimum": 1,
      "description": "Текущее число гостей этого бронирования.",
      "example": 2
    }
  },
  "description": "Текущий снимок READ бронирования в области ключа, ограниченный публичными полями статуса, расписания и числа гостей Hallify.",
  "required": [
    "kind",
    "id",
    "referenceCode",
    "revision",
    "status",
    "scheduledAt",
    "endsAt",
    "partySize"
  ],
  "example": {
    "kind": "RESERVATION",
    "id": "c279756e-3e4a-4ce8-80ee-294a35df0667",
    "referenceCode": "SYNTHETIC",
    "revision": 1,
    "status": "CONFIRMED",
    "scheduledAt": "2030-01-02T12:00:00.000Z",
    "endsAt": "2030-01-02T14:00:00.000Z",
    "partySize": 2
  }
}
PublicGuestObserverWaitlistSnapshotDto

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

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

Тип ресурса Hallify в этом снимке.

string
Полное определение
{
  "type": "string",
  "enum": [
    "WAITLIST"
  ],
  "description": "Тип ресурса Hallify в этом снимке.",
  "example": "WAITLIST"
}
idОбязательно

Точная запись листа ожидания, разрешённая текущим ключом.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "Точная запись листа ожидания, разрешённая текущим ключом.",
  "example": "c279756e-3e4a-4ce8-80ee-294a35df0667"
}
referenceCodeОбязательно

Публичный код разрешённой записи листа ожидания.

string
Полное определение
{
  "type": "string",
  "description": "Публичный код разрешённой записи листа ожидания.",
  "example": "SYNTHETIC"
}
revisionОбязательно

Текущая бизнес-ревизия листа ожидания Hallify.

integer
Полное определение
{
  "type": "integer",
  "minimum": 1,
  "description": "Текущая бизнес-ревизия листа ожидания Hallify.",
  "example": 1
}
statusОбязательно

Текущий статус листа ожидания Hallify, полученный от его владельца.

string
Полное определение
{
  "type": "string",
  "enum": [
    "WAITING",
    "NOTIFIED",
    "CLAIMED",
    "SKIPPED",
    "SEATED",
    "CANCELED",
    "NO_SHOW"
  ],
  "description": "Текущий статус листа ожидания Hallify, полученный от его владельца.",
  "example": "WAITING"
}
partySizeОбязательно

Текущее число гостей этой записи листа ожидания.

integer
Полное определение
{
  "type": "integer",
  "minimum": 1,
  "description": "Текущее число гостей этой записи листа ожидания.",
  "example": 2
}
claimExpiresAtОбязательно

Текущий крайний срок принятия; null, если окно принятия отсутствует.

string · date-time · null
Полное определение
{
  "type": "string",
  "format": "date-time",
  "nullable": true,
  "description": "Текущий крайний срок принятия; null, если окно принятия отсутствует.",
  "example": null
}
Полное определение
{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "WAITLIST"
      ],
      "description": "Тип ресурса Hallify в этом снимке.",
      "example": "WAITLIST"
    },
    "id": {
      "type": "string",
      "format": "uuid",
      "description": "Точная запись листа ожидания, разрешённая текущим ключом.",
      "example": "c279756e-3e4a-4ce8-80ee-294a35df0667"
    },
    "referenceCode": {
      "type": "string",
      "description": "Публичный код разрешённой записи листа ожидания.",
      "example": "SYNTHETIC"
    },
    "revision": {
      "type": "integer",
      "minimum": 1,
      "description": "Текущая бизнес-ревизия листа ожидания Hallify.",
      "example": 1
    },
    "status": {
      "type": "string",
      "enum": [
        "WAITING",
        "NOTIFIED",
        "CLAIMED",
        "SKIPPED",
        "SEATED",
        "CANCELED",
        "NO_SHOW"
      ],
      "description": "Текущий статус листа ожидания Hallify, полученный от его владельца.",
      "example": "WAITING"
    },
    "partySize": {
      "type": "integer",
      "minimum": 1,
      "description": "Текущее число гостей этой записи листа ожидания.",
      "example": 2
    },
    "claimExpiresAt": {
      "type": "string",
      "format": "date-time",
      "nullable": true,
      "description": "Текущий крайний срок принятия; null, если окно принятия отсутствует.",
      "example": null
    }
  },
  "description": "Текущий снимок READ листа ожидания в области ключа: публичный статус, число гостей и необязательное окно принятия.",
  "required": [
    "kind",
    "id",
    "referenceCode",
    "revision",
    "status",
    "partySize",
    "claimExpiresAt"
  ],
  "example": {
    "kind": "WAITLIST",
    "id": "c279756e-3e4a-4ce8-80ee-294a35df0667",
    "referenceCode": "SYNTHETIC",
    "revision": 1,
    "status": "WAITING",
    "partySize": 2,
    "claimExpiresAt": null
  }
}
PublicGuestObserverTableSnapshotDto

Текущее представление READ участия по QR в Hallify для разрешённого слота гостя без CRM-идентичности, данных сотрудников и состояния заказов или платежей.

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

Тип ресурса Hallify в этом снимке.

string
Полное определение
{
  "type": "string",
  "enum": [
    "TABLE_SESSION"
  ],
  "description": "Тип ресурса Hallify в этом снимке.",
  "example": "TABLE_SESSION"
}
membershipIdОбязательно

Участие Hallify, разрешающее гостю эту область READ.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "Участие Hallify, разрешающее гостю эту область READ.",
  "example": "c279756e-3e4a-4ce8-80ee-294a35df0667"
}
tableSessionIdОбязательно

Точная сессия стола Hallify, разрешённая этим участием.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "Точная сессия стола Hallify, разрешённая этим участием.",
  "example": "445745d8-5b60-47eb-98e2-c3a9a146f7fa"
}
tableSessionGuestIdОбязательно

Разрешённый слот гостя Hallify в этой сессии стола.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "description": "Разрешённый слот гостя Hallify в этой сессии стола.",
  "example": "3ddab55e-0d96-4cda-bf10-5cb7a5848306"
}
guestLabelОбязательно

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

string
Полное определение
{
  "type": "string",
  "description": "Текущая отображаемая подпись разрешённого слота гостя.",
  "example": "Guest 1"
}
tableLabelОбязательно

Текущее публичное обозначение разрешённого физического стола.

string
Полное определение
{
  "type": "string",
  "description": "Текущее публичное обозначение разрешённого физического стола.",
  "example": "Table 4"
}
paymentScopeОбязательно

Текущая подсказка доступности платёжного входа. Не даёт платёжных полномочий; для списания нужны текущий нативный платёжный доступ и явное согласие.

string
Полное определение
{
  "type": "string",
  "enum": [
    "DISABLED",
    "ASSIGNED_ITEMS",
    "SESSION_BILL"
  ],
  "description": "Текущая подсказка доступности платёжного входа. Не даёт платёжных полномочий; для списания нужны текущий нативный платёжный доступ и явное согласие.",
  "example": "DISABLED"
}
revisionОбязательно

Текущая ревизия прав участия Hallify.

integer
Полное определение
{
  "type": "integer",
  "minimum": 1,
  "description": "Текущая ревизия прав участия Hallify.",
  "example": 1
}
accessEpochОбязательно

Эпоха доступа сессии стола Hallify для этого участия.

integer
Полное определение
{
  "type": "integer",
  "minimum": 1,
  "description": "Эпоха доступа сессии стола Hallify для этого участия.",
  "example": 1
}
policyAccessEpochОбязательно

Эпоха QR-прав заведения Hallify для этого участия.

integer
Полное определение
{
  "type": "integer",
  "minimum": 1,
  "description": "Эпоха QR-прав заведения Hallify для этого участия.",
  "example": 1
}
expiresAtОбязательно

Исходный срок участия Hallify; билеты и разрешения наблюдения также ограничены текущими сроками представления.

string · date-time
Полное определение
{
  "type": "string",
  "format": "date-time",
  "description": "Исходный срок участия Hallify; билеты и разрешения наблюдения также ограничены текущими сроками представления.",
  "example": "2030-01-01T00:10:00.000Z"
}
Полное определение
{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "TABLE_SESSION"
      ],
      "description": "Тип ресурса Hallify в этом снимке.",
      "example": "TABLE_SESSION"
    },
    "membershipId": {
      "type": "string",
      "format": "uuid",
      "description": "Участие Hallify, разрешающее гостю эту область READ.",
      "example": "c279756e-3e4a-4ce8-80ee-294a35df0667"
    },
    "tableSessionId": {
      "type": "string",
      "format": "uuid",
      "description": "Точная сессия стола Hallify, разрешённая этим участием.",
      "example": "445745d8-5b60-47eb-98e2-c3a9a146f7fa"
    },
    "tableSessionGuestId": {
      "type": "string",
      "format": "uuid",
      "description": "Разрешённый слот гостя Hallify в этой сессии стола.",
      "example": "3ddab55e-0d96-4cda-bf10-5cb7a5848306"
    },
    "guestLabel": {
      "type": "string",
      "description": "Текущая отображаемая подпись разрешённого слота гостя.",
      "example": "Guest 1"
    },
    "tableLabel": {
      "type": "string",
      "description": "Текущее публичное обозначение разрешённого физического стола.",
      "example": "Table 4"
    },
    "paymentScope": {
      "type": "string",
      "enum": [
        "DISABLED",
        "ASSIGNED_ITEMS",
        "SESSION_BILL"
      ],
      "description": "Текущая подсказка доступности платёжного входа. Не даёт платёжных полномочий; для списания нужны текущий нативный платёжный доступ и явное согласие.",
      "example": "DISABLED"
    },
    "revision": {
      "type": "integer",
      "minimum": 1,
      "description": "Текущая ревизия прав участия Hallify.",
      "example": 1
    },
    "accessEpoch": {
      "type": "integer",
      "minimum": 1,
      "description": "Эпоха доступа сессии стола Hallify для этого участия.",
      "example": 1
    },
    "policyAccessEpoch": {
      "type": "integer",
      "minimum": 1,
      "description": "Эпоха QR-прав заведения Hallify для этого участия.",
      "example": 1
    },
    "expiresAt": {
      "type": "string",
      "format": "date-time",
      "description": "Исходный срок участия Hallify; билеты и разрешения наблюдения также ограничены текущими сроками представления.",
      "example": "2030-01-01T00:10:00.000Z"
    }
  },
  "description": "Текущее представление READ участия по QR в Hallify для разрешённого слота гостя без CRM-идентичности, данных сотрудников и состояния заказов или платежей.",
  "required": [
    "kind",
    "membershipId",
    "tableSessionId",
    "tableSessionGuestId",
    "guestLabel",
    "tableLabel",
    "paymentScope",
    "revision",
    "accessEpoch",
    "policyAccessEpoch",
    "expiresAt"
  ],
  "example": {
    "kind": "TABLE_SESSION",
    "membershipId": "c279756e-3e4a-4ce8-80ee-294a35df0667",
    "tableSessionId": "445745d8-5b60-47eb-98e2-c3a9a146f7fa",
    "tableSessionGuestId": "3ddab55e-0d96-4cda-bf10-5cb7a5848306",
    "guestLabel": "Guest 1",
    "tableLabel": "Table 4",
    "paymentScope": "DISABLED",
    "revision": 1,
    "accessEpoch": 1,
    "policyAccessEpoch": 1,
    "expiresAt": "2030-01-01T00:10:00.000Z"
  }
}
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 поддерживают вход, язык и тему. Аналитика выключена, пока вы явно ее не разрешите.