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

Опубликованные витрины

Получить прикреплённые заведения для проверенного widget frame

GET/public/storefront-widgets/{connectionId}/outlets

Перепроверяет подписанный widget presentation proof, фактический изолированный frame origin, текущую generation подключения и точный parent binding, затем возвращает одну ограниченную страницу явно прикреплённых заведений бренда. Native preorder/reservation discovery используют существующие scoped batch projectors. Операция не объединяет корзины, гостевые или платёжные права между заведениями.

Авторизация

x-hallify-widget-context: <HALLIFY_STOREFRONT_WIDGET_CONTEXT>

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

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

Параметры

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

UUID точного widget-подключения, сохранённого в подписанном presentation proof.

string · uuid
Полное определение
{
  "type": "string",
  "format": "uuid",
  "example": "9b6163a8-afea-4877-818b-8e2ae28a2845"
}
limitПараметр запроса · Необязательно

Максимальное число результатов. Если не задано, сервер использует 20.

integer
Полное определение
{
  "minimum": 1,
  "maximum": 50,
  "default": 20,
  "type": "integer",
  "example": 20
}
cursorПараметр запроса · Необязательно

Непрозрачный курсор продолжения с предыдущей страницы для той же области и порядка.

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

Фактический настроенный изолированный frame origin.

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

Ответы

200Приватная no-store ограниченная страница заведений точного widget-бренда при текущих правах родителя.

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

Cache-Control

Права widget outlet перепроверяются при каждом чтении.

string
Полное определение
{
  "type": "string",
  "enum": [
    "no-store"
  ],
  "example": "no-store"
}
StorefrontPublicOutletPageDto
Полное определение
{
  "$ref": "#/components/schemas/StorefrontPublicOutletPageDto"
}
Пример ответа · 200 · application/json
{
  "items": [
    {
      "storefrontId": "26a6ca08-40bb-46b0-88cb-edd7b56e8643",
      "venue": {
        "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
        "name": "Example name",
        "currency": "GEL",
        "timeZone": "Asia/Tbilisi",
        "countryCode": null,
        "city": null,
        "region": null
      },
      "ordering": null,
      "reservations": null
    }
  ],
  "nextCursor": null
}
400Некорректные UUID подключения, page limit или scope-bound cursor.
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Обязательный widget context отсутствует, некорректен, просрочен или имеет неверную подпись. Код: STOREFRONT_WIDGET_CONTEXT_INVALID.
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"
}
404Подписанный context не соответствует подключению или фактическому frame origin либо недоступны текущие widget, parent binding или права опубликованного бренда. Код: STOREFRONT_PRESENTATION_UNAVAILABLE.
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Конфигурация виджета или ключи подписи недоступны либо scoped native discovery нельзя безопасно спроецировать.
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"
}

Схемы

StorefrontPublicOutletPageDto

Ограниченная страница публичного каталога заведений бренда: безопасные данные заведений и непрозрачный курсор продолжения, допускающий null.

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

Ограниченная страница каталога заведений.

array
Полное определение
{
  "description": "Ограниченная страница каталога заведений.",
  "maxItems": 50,
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/StorefrontPublicOutletDto"
  },
  "example": [
    {
      "storefrontId": "26a6ca08-40bb-46b0-88cb-edd7b56e8643",
      "venue": {
        "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
        "name": "Example name",
        "currency": "GEL",
        "timeZone": "Asia/Tbilisi",
        "countryCode": null,
        "city": null,
        "region": null
      },
      "ordering": null,
      "reservations": null
    }
  ]
}
nextCursorОбязательно

Непрозрачный курсор продолжения либо null для последней страницы каталога.

string · null
Полное определение
{
  "type": "string",
  "description": "Непрозрачный курсор продолжения либо null для последней страницы каталога.",
  "nullable": true,
  "minLength": 1,
  "maxLength": 256,
  "example": "example"
}
Полное определение
{
  "type": "object",
  "properties": {
    "items": {
      "description": "Ограниченная страница каталога заведений.",
      "maxItems": 50,
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/StorefrontPublicOutletDto"
      },
      "example": [
        {
          "storefrontId": "26a6ca08-40bb-46b0-88cb-edd7b56e8643",
          "venue": {
            "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
            "name": "Example name",
            "currency": "GEL",
            "timeZone": "Asia/Tbilisi",
            "countryCode": null,
            "city": null,
            "region": null
          },
          "ordering": null,
          "reservations": null
        }
      ]
    },
    "nextCursor": {
      "type": "string",
      "description": "Непрозрачный курсор продолжения либо null для последней страницы каталога.",
      "nullable": true,
      "minLength": 1,
      "maxLength": 256,
      "example": "example"
    }
  },
  "description": "Ограниченная страница публичного каталога заведений бренда: безопасные данные заведений и непрозрачный курсор продолжения, допускающий null.",
  "required": [
    "items",
    "nextCursor"
  ],
  "example": {
    "items": [
      {
        "storefrontId": "26a6ca08-40bb-46b0-88cb-edd7b56e8643",
        "venue": {
          "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
          "name": "Example name",
          "currency": "GEL",
          "timeZone": "Asia/Tbilisi",
          "countryCode": null,
          "city": null,
          "region": null
        },
        "ordering": null,
        "reservations": null
      }
    ],
    "nextCursor": null
  }
}
StorefrontPublicOutletDto

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

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

UUID витрины заведения, явно выбранной в этом каталоге бренда.

string · uuid
Полное определение
{
  "type": "string",
  "description": "UUID витрины заведения, явно выбранной в этом каталоге бренда.",
  "format": "uuid",
  "example": "26a6ca08-40bb-46b0-88cb-edd7b56e8643"
}
venueОбязательно

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

allOf
Полное определение
{
  "description": "Безопасный публичный профиль фактического заведения.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontPublicVenueProfileDto"
    }
  ],
  "example": {
    "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
    "name": "Example name",
    "currency": "GEL",
    "timeZone": "Asia/Tbilisi",
    "countryCode": null,
    "city": null,
    "region": null
  }
}
orderingОбязательно

Текущий привязанный активный нативный канал предзаказа этой точки и подключения представления либо null при отсутствии. Несекретная discovery не разрешает заказ или оплату.

object · null
Полное определение
{
  "description": "Текущий привязанный активный нативный канал предзаказа этой точки и подключения представления либо null при отсутствии. Несекретная discovery не разрешает заказ или оплату.",
  "nullable": true,
  "type": "object",
  "properties": {
    "connectionId": {
      "type": "string",
      "description": "UUID подключения представления, сохраняемый как несекретный connection locator в нативных публичных запросах черновика. Не заменяет текущую авторизацию Origin запроса.",
      "format": "uuid",
      "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
    },
    "resourceId": {
      "type": "string",
      "description": "UUID текущего привязанного ресурса PREORDER внутри подключения представления и выбранного заведения. Это discovery locator, а не токен доступа.",
      "format": "uuid",
      "example": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568"
    },
    "venueId": {
      "type": "string",
      "description": "UUID фактического нативного заведения — владельца этой привязки и канала предзаказа. Заказы остаются в scope этого заведения.",
      "format": "uuid",
      "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
    },
    "publicChannelId": {
      "type": "string",
      "description": "UUID активного нативного публичного канала предзаказа выбранного заведения.",
      "format": "uuid",
      "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
    },
    "publicChannelHandle": {
      "type": "string",
      "description": "Discovery handle нативного канала предзаказа для публичного каталога. Отличается от handle содержащего представления витрины.",
      "minLength": 1,
      "maxLength": 48,
      "example": "example"
    }
  },
  "required": [
    "connectionId",
    "resourceId",
    "venueId",
    "publicChannelId",
    "publicChannelHandle"
  ],
  "example": {
    "connectionId": "2fde64d5-54a3-47d0-800f-a015f92a8878",
    "resourceId": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568",
    "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
    "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
    "publicChannelHandle": "example"
  }
}
reservationsОбязательно

Текущий прикреплённый активный нативный канал бронирования этого заведения и подключения либо null при недоступности. Несекретное discovery не даёт прав бронирования, ожидания, гостевого или финансового доступа.

object · null
Полное определение
{
  "description": "Текущий прикреплённый активный нативный канал бронирования этого заведения и подключения либо null при недоступности. Несекретное discovery не даёт прав бронирования, ожидания, гостевого или финансового доступа.",
  "nullable": true,
  "type": "object",
  "properties": {
    "connectionId": {
      "type": "string",
      "description": "UUID подключения представления, используемый только как несекретный локатор нативных публичных запросов бронирования. Не заменяет текущее разрешение Origin запроса.",
      "format": "uuid",
      "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
    },
    "resourceId": {
      "type": "string",
      "description": "UUID текущего прикреплённого ресурса RESERVATION в этом подключении и заведении. Это discovery-локатор, а не capability.",
      "format": "uuid",
      "example": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568"
    },
    "venueId": {
      "type": "string",
      "description": "UUID фактического нативного заведения, которому принадлежат прикрепление и канал бронирования. Бронирование и спрос листа ожидания ограничены этим заведением.",
      "format": "uuid",
      "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
    },
    "publicChannelId": {
      "type": "string",
      "description": "UUID активного нативного публичного канала бронирования выбранного заведения.",
      "format": "uuid",
      "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
    },
    "publicChannelHandle": {
      "type": "string",
      "description": "Discovery-handle нативного канала бронирования для публичной конфигурации и доступности. Отличается от handle окружающего представления Storefront.",
      "minLength": 1,
      "maxLength": 48,
      "example": "1.000"
    }
  },
  "required": [
    "connectionId",
    "resourceId",
    "venueId",
    "publicChannelId",
    "publicChannelHandle"
  ],
  "example": {
    "connectionId": "2fde64d5-54a3-47d0-800f-a015f92a8878",
    "resourceId": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568",
    "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
    "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
    "publicChannelHandle": "1.000"
  }
}
Полное определение
{
  "type": "object",
  "properties": {
    "storefrontId": {
      "type": "string",
      "description": "UUID витрины заведения, явно выбранной в этом каталоге бренда.",
      "format": "uuid",
      "example": "26a6ca08-40bb-46b0-88cb-edd7b56e8643"
    },
    "venue": {
      "description": "Безопасный публичный профиль фактического заведения.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontPublicVenueProfileDto"
        }
      ],
      "example": {
        "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
        "name": "Example name",
        "currency": "GEL",
        "timeZone": "Asia/Tbilisi",
        "countryCode": null,
        "city": null,
        "region": null
      }
    },
    "ordering": {
      "description": "Текущий привязанный активный нативный канал предзаказа этой точки и подключения представления либо null при отсутствии. Несекретная discovery не разрешает заказ или оплату.",
      "nullable": true,
      "type": "object",
      "properties": {
        "connectionId": {
          "type": "string",
          "description": "UUID подключения представления, сохраняемый как несекретный connection locator в нативных публичных запросах черновика. Не заменяет текущую авторизацию Origin запроса.",
          "format": "uuid",
          "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
        },
        "resourceId": {
          "type": "string",
          "description": "UUID текущего привязанного ресурса PREORDER внутри подключения представления и выбранного заведения. Это discovery locator, а не токен доступа.",
          "format": "uuid",
          "example": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568"
        },
        "venueId": {
          "type": "string",
          "description": "UUID фактического нативного заведения — владельца этой привязки и канала предзаказа. Заказы остаются в scope этого заведения.",
          "format": "uuid",
          "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
        },
        "publicChannelId": {
          "type": "string",
          "description": "UUID активного нативного публичного канала предзаказа выбранного заведения.",
          "format": "uuid",
          "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
        },
        "publicChannelHandle": {
          "type": "string",
          "description": "Discovery handle нативного канала предзаказа для публичного каталога. Отличается от handle содержащего представления витрины.",
          "minLength": 1,
          "maxLength": 48,
          "example": "example"
        }
      },
      "required": [
        "connectionId",
        "resourceId",
        "venueId",
        "publicChannelId",
        "publicChannelHandle"
      ],
      "example": {
        "connectionId": "2fde64d5-54a3-47d0-800f-a015f92a8878",
        "resourceId": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568",
        "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
        "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
        "publicChannelHandle": "example"
      }
    },
    "reservations": {
      "description": "Текущий прикреплённый активный нативный канал бронирования этого заведения и подключения либо null при недоступности. Несекретное discovery не даёт прав бронирования, ожидания, гостевого или финансового доступа.",
      "nullable": true,
      "type": "object",
      "properties": {
        "connectionId": {
          "type": "string",
          "description": "UUID подключения представления, используемый только как несекретный локатор нативных публичных запросов бронирования. Не заменяет текущее разрешение Origin запроса.",
          "format": "uuid",
          "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
        },
        "resourceId": {
          "type": "string",
          "description": "UUID текущего прикреплённого ресурса RESERVATION в этом подключении и заведении. Это discovery-локатор, а не capability.",
          "format": "uuid",
          "example": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568"
        },
        "venueId": {
          "type": "string",
          "description": "UUID фактического нативного заведения, которому принадлежат прикрепление и канал бронирования. Бронирование и спрос листа ожидания ограничены этим заведением.",
          "format": "uuid",
          "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
        },
        "publicChannelId": {
          "type": "string",
          "description": "UUID активного нативного публичного канала бронирования выбранного заведения.",
          "format": "uuid",
          "example": "9bee613d-3322-4a03-8b9f-8a6259984eee"
        },
        "publicChannelHandle": {
          "type": "string",
          "description": "Discovery-handle нативного канала бронирования для публичной конфигурации и доступности. Отличается от handle окружающего представления Storefront.",
          "minLength": 1,
          "maxLength": 48,
          "example": "1.000"
        }
      },
      "required": [
        "connectionId",
        "resourceId",
        "venueId",
        "publicChannelId",
        "publicChannelHandle"
      ],
      "example": {
        "connectionId": "2fde64d5-54a3-47d0-800f-a015f92a8878",
        "resourceId": "d5b5eb29-9b8d-4d6f-8f4f-6f0e58f32568",
        "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
        "publicChannelId": "9bee613d-3322-4a03-8b9f-8a6259984eee",
        "publicChannelHandle": "1.000"
      }
    }
  },
  "description": "Запись публичного каталога бренда: профиль фактического заведения и идентификатор явно выбранной витрины этого заведения.",
  "required": [
    "storefrontId",
    "venue",
    "ordering",
    "reservations"
  ],
  "example": {
    "storefrontId": "26a6ca08-40bb-46b0-88cb-edd7b56e8643",
    "venue": {
      "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
      "name": "Example name",
      "currency": "GEL",
      "timeZone": "Asia/Tbilisi",
      "countryCode": null,
      "city": null,
      "region": null
    },
    "ordering": null,
    "reservations": null
  }
}
StorefrontPublicVenueProfileDto

Безопасные публичные данные заведения Hallify: идентификатор, название, валюта, часовой пояс и географические подписи, допускающие null.

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

UUID фактического заведения Hallify.

string · uuid
Полное определение
{
  "type": "string",
  "description": "UUID фактического заведения Hallify.",
  "format": "uuid",
  "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
}
nameОбязательно

Публичное название заведения.

string
Полное определение
{
  "type": "string",
  "description": "Публичное название заведения.",
  "minLength": 1,
  "maxLength": 255,
  "example": "Example name"
}
currencyОбязательно

Код валюты заведения Hallify. Представление не выполняет конвертацию.

string
Полное определение
{
  "type": "string",
  "description": "Код валюты заведения Hallify. Представление не выполняет конвертацию.",
  "minLength": 3,
  "maxLength": 3,
  "example": "GEL"
}
timeZoneОбязательно

Идентификатор часового пояса заведения Hallify.

string
Полное определение
{
  "type": "string",
  "description": "Идентификатор часового пояса заведения Hallify.",
  "minLength": 1,
  "maxLength": 64,
  "example": "Asia/Tbilisi"
}
countryCodeОбязательно

Настроенный код страны заведения либо null, если он недоступен.

string · null
Полное определение
{
  "type": "string",
  "description": "Настроенный код страны заведения либо null, если он недоступен.",
  "nullable": true,
  "minLength": 2,
  "maxLength": 2,
  "example": "GE"
}
cityОбязательно

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

string · null
Полное определение
{
  "type": "string",
  "description": "Публичный город заведения либо null, если он недоступен.",
  "nullable": true,
  "maxLength": 120,
  "example": "example"
}
regionОбязательно

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

string · null
Полное определение
{
  "type": "string",
  "description": "Публичный регион заведения либо null, если он недоступен.",
  "nullable": true,
  "maxLength": 120,
  "example": "example"
}
Полное определение
{
  "type": "object",
  "properties": {
    "venueId": {
      "type": "string",
      "description": "UUID фактического заведения Hallify.",
      "format": "uuid",
      "example": "0604de3a-da74-4ad5-89f6-2dfe000d5391"
    },
    "name": {
      "type": "string",
      "description": "Публичное название заведения.",
      "minLength": 1,
      "maxLength": 255,
      "example": "Example name"
    },
    "currency": {
      "type": "string",
      "description": "Код валюты заведения Hallify. Представление не выполняет конвертацию.",
      "minLength": 3,
      "maxLength": 3,
      "example": "GEL"
    },
    "timeZone": {
      "type": "string",
      "description": "Идентификатор часового пояса заведения Hallify.",
      "minLength": 1,
      "maxLength": 64,
      "example": "Asia/Tbilisi"
    },
    "countryCode": {
      "type": "string",
      "description": "Настроенный код страны заведения либо null, если он недоступен.",
      "nullable": true,
      "minLength": 2,
      "maxLength": 2,
      "example": "GE"
    },
    "city": {
      "type": "string",
      "description": "Публичный город заведения либо null, если он недоступен.",
      "nullable": true,
      "maxLength": 120,
      "example": "example"
    },
    "region": {
      "type": "string",
      "description": "Публичный регион заведения либо null, если он недоступен.",
      "nullable": true,
      "maxLength": 120,
      "example": "example"
    }
  },
  "description": "Безопасные публичные данные заведения Hallify: идентификатор, название, валюта, часовой пояс и географические подписи, допускающие null.",
  "required": [
    "venueId",
    "name",
    "currency",
    "timeZone",
    "countryCode",
    "city",
    "region"
  ],
  "example": {
    "venueId": "0604de3a-da74-4ad5-89f6-2dfe000d5391",
    "name": "Example name",
    "currency": "GEL",
    "timeZone": "Asia/Tbilisi",
    "countryCode": null,
    "city": null,
    "region": null
  }
}
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 поддерживают вход, язык и тему. Аналитика выключена, пока вы явно ее не разрешите.