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

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

Получить опубликованную витрину заведения или бренда

GET/public/storefronts/{publicHandle}

Возвращает неизменяемое типизированное представление, опубликованное через активное hosted-подключение с текущими подтверждёнными правами хоста. Профиль заведения и nullable discovery прикреплённого нативного предзаказа явно публичны и актуальны. У бренда без выбранного заведения нет ordering-входа. Чтение не даёт прав бронирования, заказа, стола или оплаты. Nullable discovery бронирования указывает только на прикреплённый активный нативный канал и тоже равно null без выбранного заведения.

Авторизация

Учётная запись Hallify не требуется. Соблюдайте предварительные условия и ограничения этого метода.

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

Параметры

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

Глобально зарезервированный идентификатор опубликованной витрины.

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

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

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

Ответы

200Текущее опубликованное представление бренда или заведения с проверенным каноническим URL.

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

ETag

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

string
Полное определение
{
  "type": "string",
  "example": "example"
}
Cache-Control

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

string
Полное определение
{
  "type": "string",
  "example": "public, max-age=0, must-revalidate"
}
StorefrontPublicPresentationDto
Полное определение
{
  "$ref": "#/components/schemas/StorefrontPublicPresentationDto"
}
Пример ответа · 200 · application/json
{
  "connectionId": "2fde64d5-54a3-47d0-800f-a015f92a8878",
  "publicHandle": "example",
  "kind": "BRAND",
  "canonicalUrl": "https://example.test/resource",
  "publication": {
    "publicationId": "6df588a1-7850-4942-8bce-1d836572d66f",
    "sourceRevision": 1,
    "schemaVersion": 1,
    "contentHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
    "publishedAt": "2026-01-15T12:00:00.000Z"
  },
  "document": {
    "schemaVersion": 1,
    "defaultLocale": "en",
    "theme": {
      "colorScheme": "LIGHT",
      "accent": "AMBER",
      "density": "COMFORTABLE"
    },
    "seo": {
      "title": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      },
      "description": {
        "en": "Synthetic example",
        "ka": "Synthetic example",
        "ru": "Synthetic example"
      }
    },
    "blocks": [
      {
        "id": "example-id",
        "kind": "HERO",
        "title": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        },
        "body": null,
        "image": null
      }
    ]
  },
  "venue": null,
  "ordering": null,
  "reservations": null
}
304Текущее разрешённое публичное представление соответствует If-None-Match. Тело ответа отсутствует.

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

ETag

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

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

Для этого ответа тело не предусмотрено контрактом.

400Некорректный публичный идентификатор.
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"
}
404Для этого идентификатора нет активного опубликованного представления с действующей проверенной привязкой хоста.
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Невозможно безопасно спроецировать сохранённую публикацию или нативное ordering discovery в текущем scope. Сбои проекции ordering используют STOREFRONT_ORDERING_UNAVAILABLE. Некорректное scoped discovery бронирования использует STOREFRONT_RESERVATIONS_UNAVAILABLE.
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"
}

Схемы

StorefrontPublicPresentationDto

Текущее публичное hosted-представление с несекретным локатором подключения, каноническим адресом, неизменяемой публикацией, типизированным документом, nullable профилем заведения и nullable нативным discovery ordering и бронирования. Discovery не даёт гостевых или финансовых прав.

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

UUID соединения опубликованного представления; не является секретом.

string · uuid
Полное определение
{
  "type": "string",
  "description": "UUID соединения опубликованного представления; не является секретом.",
  "format": "uuid",
  "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
}
publicHandleОбязательно

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

string
Полное определение
{
  "type": "string",
  "description": "Глобально зарезервированный публичный идентификатор опубликованного представления.",
  "minLength": 1,
  "maxLength": 48,
  "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$",
  "example": "example"
}
kindОбязательно

Признак целевого типа представления. Для представления бренда конкретное заведение выбирают через отдельный каталог заведений.

string
Полное определение
{
  "type": "string",
  "description": "Признак целевого типа представления. Для представления бренда конкретное заведение выбирают через отдельный каталог заведений.",
  "enum": [
    "BRAND",
    "VENUE"
  ],
  "example": "BRAND"
}
canonicalUrlОбязательно

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

string · uri
Полное определение
{
  "type": "string",
  "description": "Канонический адрес витрины, определённый действующей проверенной привязкой.",
  "format": "uri",
  "maxLength": 2048,
  "example": "https://example.test/resource"
}
publicationОбязательно

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

allOf
Полное определение
{
  "description": "Данные текущей неизменяемой публикации представления.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontPublicationDto"
    }
  ],
  "example": {
    "publicationId": "6df588a1-7850-4942-8bce-1d836572d66f",
    "sourceRevision": 1,
    "schemaVersion": 1,
    "contentHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
    "publishedAt": "2026-01-15T12:00:00.000Z"
  }
}
documentОбязательно

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

allOf
Полное определение
{
  "description": "Точный типизированный документ представления из неизменяемой публикации.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontDocumentDto"
    }
  ],
  "example": {
    "schemaVersion": 1,
    "defaultLocale": "en",
    "theme": {
      "colorScheme": "LIGHT",
      "accent": "AMBER",
      "density": "COMFORTABLE"
    },
    "seo": {
      "title": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      },
      "description": {
        "en": "Synthetic example",
        "ka": "Synthetic example",
        "ru": "Synthetic example"
      }
    },
    "blocks": [
      {
        "id": "example-id",
        "kind": "HERO",
        "title": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        },
        "body": null,
        "image": null
      }
    ]
  }
}
venueОбязательно

Безопасное представление данных заведения для его витрины либо null при выборе заведения бренда.

object · null
Полное определение
{
  "description": "Безопасное представление данных заведения для его витрины либо null при выборе заведения бренда.",
  "nullable": true,
  "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"
    }
  },
  "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
  }
}
orderingОбязательно

Текущий привязанный активный нативный канал предзаказа выбранного заведения либо null при отсутствии допустимой привязки или выбранного заведения у бренда. Нативные каталог, quote и авторизация Origin запроса остаются определяющими.

object · null
Полное определение
{
  "description": "Текущий привязанный активный нативный канал предзаказа выбранного заведения либо null при отсутствии допустимой привязки или выбранного заведения у бренда. Нативные каталог, quote и авторизация Origin запроса остаются определяющими.",
  "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 при отсутствии допустимого прикрепления или выбранного заведения бренда. Нативная доступность, бронирование, ожидание и разрешение Origin запроса сохраняют силу.

object · null
Полное определение
{
  "description": "Текущий прикреплённый активный нативный канал бронирования выбранного заведения либо null при отсутствии допустимого прикрепления или выбранного заведения бренда. Нативная доступность, бронирование, ожидание и разрешение Origin запроса сохраняют силу.",
  "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": {
    "connectionId": {
      "type": "string",
      "description": "UUID соединения опубликованного представления; не является секретом.",
      "format": "uuid",
      "example": "2fde64d5-54a3-47d0-800f-a015f92a8878"
    },
    "publicHandle": {
      "type": "string",
      "description": "Глобально зарезервированный публичный идентификатор опубликованного представления.",
      "minLength": 1,
      "maxLength": 48,
      "pattern": "^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$",
      "example": "example"
    },
    "kind": {
      "type": "string",
      "description": "Признак целевого типа представления. Для представления бренда конкретное заведение выбирают через отдельный каталог заведений.",
      "enum": [
        "BRAND",
        "VENUE"
      ],
      "example": "BRAND"
    },
    "canonicalUrl": {
      "type": "string",
      "description": "Канонический адрес витрины, определённый действующей проверенной привязкой.",
      "format": "uri",
      "maxLength": 2048,
      "example": "https://example.test/resource"
    },
    "publication": {
      "description": "Данные текущей неизменяемой публикации представления.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontPublicationDto"
        }
      ],
      "example": {
        "publicationId": "6df588a1-7850-4942-8bce-1d836572d66f",
        "sourceRevision": 1,
        "schemaVersion": 1,
        "contentHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
        "publishedAt": "2026-01-15T12:00:00.000Z"
      }
    },
    "document": {
      "description": "Точный типизированный документ представления из неизменяемой публикации.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontDocumentDto"
        }
      ],
      "example": {
        "schemaVersion": 1,
        "defaultLocale": "en",
        "theme": {
          "colorScheme": "LIGHT",
          "accent": "AMBER",
          "density": "COMFORTABLE"
        },
        "seo": {
          "title": {
            "en": "example",
            "ka": "example",
            "ru": "example"
          },
          "description": {
            "en": "Synthetic example",
            "ka": "Synthetic example",
            "ru": "Synthetic example"
          }
        },
        "blocks": [
          {
            "id": "example-id",
            "kind": "HERO",
            "title": {
              "en": "example",
              "ka": "example",
              "ru": "example"
            },
            "body": null,
            "image": null
          }
        ]
      }
    },
    "venue": {
      "description": "Безопасное представление данных заведения для его витрины либо null при выборе заведения бренда.",
      "nullable": true,
      "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"
        }
      },
      "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
      }
    },
    "ordering": {
      "description": "Текущий привязанный активный нативный канал предзаказа выбранного заведения либо null при отсутствии допустимой привязки или выбранного заведения у бренда. Нативные каталог, quote и авторизация Origin запроса остаются определяющими.",
      "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 при отсутствии допустимого прикрепления или выбранного заведения бренда. Нативная доступность, бронирование, ожидание и разрешение Origin запроса сохраняют силу.",
      "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": "Текущее публичное hosted-представление с несекретным локатором подключения, каноническим адресом, неизменяемой публикацией, типизированным документом, nullable профилем заведения и nullable нативным discovery ordering и бронирования. Discovery не даёт гостевых или финансовых прав.",
  "required": [
    "connectionId",
    "publicHandle",
    "kind",
    "canonicalUrl",
    "publication",
    "document",
    "venue",
    "ordering",
    "reservations"
  ],
  "example": {
    "connectionId": "2fde64d5-54a3-47d0-800f-a015f92a8878",
    "publicHandle": "example",
    "kind": "BRAND",
    "canonicalUrl": "https://example.test/resource",
    "publication": {
      "publicationId": "6df588a1-7850-4942-8bce-1d836572d66f",
      "sourceRevision": 1,
      "schemaVersion": 1,
      "contentHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
      "publishedAt": "2026-01-15T12:00:00.000Z"
    },
    "document": {
      "schemaVersion": 1,
      "defaultLocale": "en",
      "theme": {
        "colorScheme": "LIGHT",
        "accent": "AMBER",
        "density": "COMFORTABLE"
      },
      "seo": {
        "title": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        },
        "description": {
          "en": "Synthetic example",
          "ka": "Synthetic example",
          "ru": "Synthetic example"
        }
      },
      "blocks": [
        {
          "id": "example-id",
          "kind": "HERO",
          "title": {
            "en": "example",
            "ka": "example",
            "ru": "example"
          },
          "body": null,
          "image": null
        }
      ]
    },
    "venue": null,
    "ordering": null,
    "reservations": null
  }
}
StorefrontPublicationDto

Идентификатор неизменяемой публикации, исходная ревизия, версия схемы, хеш нормализованного содержимого и исходное время публикации.

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

UUID неизменяемой публикации представления.

string · uuid
Полное определение
{
  "type": "string",
  "description": "UUID неизменяемой публикации представления.",
  "format": "uuid",
  "example": "6df588a1-7850-4942-8bce-1d836572d66f"
}
sourceRevisionОбязательно

Ревизия исходного черновика, зафиксированная в публикации.

integer
Полное определение
{
  "type": "integer",
  "description": "Ревизия исходного черновика, зафиксированная в публикации.",
  "minimum": 1,
  "example": 1
}
schemaVersionОбязательно

Зафиксированная версия схемы типизированного документа.

integer
Полное определение
{
  "type": "integer",
  "description": "Зафиксированная версия схемы типизированного документа.",
  "enum": [
    1
  ],
  "minimum": 1,
  "maximum": 1,
  "example": 1
}
contentHashОбязательно

Хеш SHA-256 неизменяемого нормализованного содержимого представления.

string
Полное определение
{
  "type": "string",
  "description": "Хеш SHA-256 неизменяемого нормализованного содержимого представления.",
  "minLength": 64,
  "maxLength": 64,
  "pattern": "^[a-f0-9]{64}$",
  "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
}
publishedAtОбязательно

Исходное время публикации.

string · date-time
Полное определение
{
  "type": "string",
  "description": "Исходное время публикации.",
  "format": "date-time",
  "example": "2026-01-15T12:00:00.000Z"
}
Полное определение
{
  "type": "object",
  "properties": {
    "publicationId": {
      "type": "string",
      "description": "UUID неизменяемой публикации представления.",
      "format": "uuid",
      "example": "6df588a1-7850-4942-8bce-1d836572d66f"
    },
    "sourceRevision": {
      "type": "integer",
      "description": "Ревизия исходного черновика, зафиксированная в публикации.",
      "minimum": 1,
      "example": 1
    },
    "schemaVersion": {
      "type": "integer",
      "description": "Зафиксированная версия схемы типизированного документа.",
      "enum": [
        1
      ],
      "minimum": 1,
      "maximum": 1,
      "example": 1
    },
    "contentHash": {
      "type": "string",
      "description": "Хеш SHA-256 неизменяемого нормализованного содержимого представления.",
      "minLength": 64,
      "maxLength": 64,
      "pattern": "^[a-f0-9]{64}$",
      "example": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
    },
    "publishedAt": {
      "type": "string",
      "description": "Исходное время публикации.",
      "format": "date-time",
      "example": "2026-01-15T12:00:00.000Z"
    }
  },
  "description": "Идентификатор неизменяемой публикации, исходная ревизия, версия схемы, хеш нормализованного содержимого и исходное время публикации.",
  "required": [
    "publicationId",
    "sourceRevision",
    "schemaVersion",
    "contentHash",
    "publishedAt"
  ],
  "example": {
    "publicationId": "6df588a1-7850-4942-8bce-1d836572d66f",
    "sourceRevision": 1,
    "schemaVersion": 1,
    "contentHash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
    "publishedAt": "2026-01-15T12:00:00.000Z"
  }
}
StorefrontDocumentDto

Многоязычный документ представления версии схемы 1: безопасные токены темы, поисковые метаданные и упорядоченные типизированные блоки в пределах ограничения нормализованного размера UTF-8.

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

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

integer
Полное определение
{
  "type": "integer",
  "description": "Точная версия схемы типизированного представления.",
  "enum": [
    1
  ],
  "minimum": 1,
  "maximum": 1,
  "example": 1
}
defaultLocaleОбязательно

Основной язык представления. Каждое текстовое значение также содержит EN, KA и RU.

string
Полное определение
{
  "type": "string",
  "description": "Основной язык представления. Каждое текстовое значение также содержит EN, KA и RU.",
  "enum": [
    "en",
    "ka",
    "ru"
  ],
  "example": "en"
}
themeОбязательно

Безопасные токены темы витрины.

allOf
Полное определение
{
  "description": "Безопасные токены темы витрины.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontThemeDto"
    }
  ],
  "example": {
    "colorScheme": "LIGHT",
    "accent": "AMBER",
    "density": "COMFORTABLE"
  }
}
seoОбязательно

Локализованные публичные метаданные.

allOf
Полное определение
{
  "description": "Локализованные публичные метаданные.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontSeoDto"
    }
  ],
  "example": {
    "title": {
      "en": "example",
      "ka": "example",
      "ru": "example"
    },
    "description": {
      "en": "Synthetic example",
      "ka": "Synthetic example",
      "ru": "Synthetic example"
    }
  }
}
blocksОбязательно

Упорядоченные типизированные блоки содержимого с уникальными идентификаторами. Полный нормализованный документ ограничен 65536 байтами UTF-8.

array
Полное определение
{
  "type": "array",
  "description": "Упорядоченные типизированные блоки содержимого с уникальными идентификаторами. Полный нормализованный документ ограничен 65536 байтами UTF-8.",
  "minItems": 1,
  "maxItems": 24,
  "items": {
    "oneOf": [
      {
        "$ref": "#/components/schemas/StorefrontHeroBlockDto"
      },
      {
        "$ref": "#/components/schemas/StorefrontTextBlockDto"
      },
      {
        "$ref": "#/components/schemas/StorefrontGalleryBlockDto"
      },
      {
        "$ref": "#/components/schemas/StorefrontLinksBlockDto"
      }
    ],
    "discriminator": {
      "propertyName": "kind"
    },
    "example": {
      "id": "example-id",
      "kind": "HERO",
      "title": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      },
      "body": null,
      "image": null
    }
  },
  "example": [
    {
      "id": "example-id",
      "kind": "HERO",
      "title": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      },
      "body": null,
      "image": null
    }
  ]
}
Полное определение
{
  "type": "object",
  "properties": {
    "schemaVersion": {
      "type": "integer",
      "description": "Точная версия схемы типизированного представления.",
      "enum": [
        1
      ],
      "minimum": 1,
      "maximum": 1,
      "example": 1
    },
    "defaultLocale": {
      "type": "string",
      "description": "Основной язык представления. Каждое текстовое значение также содержит EN, KA и RU.",
      "enum": [
        "en",
        "ka",
        "ru"
      ],
      "example": "en"
    },
    "theme": {
      "description": "Безопасные токены темы витрины.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontThemeDto"
        }
      ],
      "example": {
        "colorScheme": "LIGHT",
        "accent": "AMBER",
        "density": "COMFORTABLE"
      }
    },
    "seo": {
      "description": "Локализованные публичные метаданные.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontSeoDto"
        }
      ],
      "example": {
        "title": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        },
        "description": {
          "en": "Synthetic example",
          "ka": "Synthetic example",
          "ru": "Synthetic example"
        }
      }
    },
    "blocks": {
      "type": "array",
      "description": "Упорядоченные типизированные блоки содержимого с уникальными идентификаторами. Полный нормализованный документ ограничен 65536 байтами UTF-8.",
      "minItems": 1,
      "maxItems": 24,
      "items": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/StorefrontHeroBlockDto"
          },
          {
            "$ref": "#/components/schemas/StorefrontTextBlockDto"
          },
          {
            "$ref": "#/components/schemas/StorefrontGalleryBlockDto"
          },
          {
            "$ref": "#/components/schemas/StorefrontLinksBlockDto"
          }
        ],
        "discriminator": {
          "propertyName": "kind"
        },
        "example": {
          "id": "example-id",
          "kind": "HERO",
          "title": {
            "en": "example",
            "ka": "example",
            "ru": "example"
          },
          "body": null,
          "image": null
        }
      },
      "example": [
        {
          "id": "example-id",
          "kind": "HERO",
          "title": {
            "en": "example",
            "ka": "example",
            "ru": "example"
          },
          "body": null,
          "image": null
        }
      ]
    }
  },
  "description": "Многоязычный документ представления версии схемы 1: безопасные токены темы, поисковые метаданные и упорядоченные типизированные блоки в пределах ограничения нормализованного размера UTF-8.",
  "required": [
    "schemaVersion",
    "defaultLocale",
    "theme",
    "seo",
    "blocks"
  ],
  "example": {
    "schemaVersion": 1,
    "defaultLocale": "en",
    "theme": {
      "colorScheme": "LIGHT",
      "accent": "AMBER",
      "density": "COMFORTABLE"
    },
    "seo": {
      "title": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      },
      "description": {
        "en": "Synthetic example",
        "ka": "Synthetic example",
        "ru": "Synthetic example"
      }
    },
    "blocks": [
      {
        "id": "example-id",
        "kind": "HERO",
        "title": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        },
        "body": null,
        "image": null
      }
    ]
  }
}
StorefrontThemeDto

Ограниченный набор токенов оформления витрины: поддерживаемая цветовая схема, акцент и плотность содержимого.

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

Цветовая схема витрины из поддерживаемого набора токенов.

string
Полное определение
{
  "type": "string",
  "description": "Цветовая схема витрины из поддерживаемого набора токенов.",
  "enum": [
    "LIGHT",
    "DARK",
    "PURPLE"
  ],
  "example": "LIGHT"
}
accentОбязательно

Токен акцентного цвета витрины. Произвольные значения CSS не принимаются.

string
Полное определение
{
  "type": "string",
  "description": "Токен акцентного цвета витрины. Произвольные значения CSS не принимаются.",
  "enum": [
    "AMBER",
    "CORAL",
    "EMERALD",
    "INDIGO"
  ],
  "example": "AMBER"
}
densityОбязательно

Поддерживаемая плотность содержимого.

string
Полное определение
{
  "type": "string",
  "description": "Поддерживаемая плотность содержимого.",
  "enum": [
    "COMFORTABLE",
    "COMPACT"
  ],
  "example": "COMFORTABLE"
}
Полное определение
{
  "type": "object",
  "properties": {
    "colorScheme": {
      "type": "string",
      "description": "Цветовая схема витрины из поддерживаемого набора токенов.",
      "enum": [
        "LIGHT",
        "DARK",
        "PURPLE"
      ],
      "example": "LIGHT"
    },
    "accent": {
      "type": "string",
      "description": "Токен акцентного цвета витрины. Произвольные значения CSS не принимаются.",
      "enum": [
        "AMBER",
        "CORAL",
        "EMERALD",
        "INDIGO"
      ],
      "example": "AMBER"
    },
    "density": {
      "type": "string",
      "description": "Поддерживаемая плотность содержимого.",
      "enum": [
        "COMFORTABLE",
        "COMPACT"
      ],
      "example": "COMFORTABLE"
    }
  },
  "description": "Ограниченный набор токенов оформления витрины: поддерживаемая цветовая схема, акцент и плотность содержимого.",
  "required": [
    "colorScheme",
    "accent",
    "density"
  ],
  "example": {
    "colorScheme": "LIGHT",
    "accent": "AMBER",
    "density": "COMFORTABLE"
  }
}
StorefrontSeoDto

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

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

Локализованный публичный заголовок документа.

allOf
Полное определение
{
  "description": "Локализованный публичный заголовок документа.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontHeadingTextDto"
    }
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
descriptionОбязательно

Локализованное публичное описание для поиска.

allOf
Полное определение
{
  "description": "Локализованное публичное описание для поиска.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontDescriptionTextDto"
    }
  ],
  "example": {
    "en": "Synthetic example",
    "ka": "Synthetic example",
    "ru": "Synthetic example"
  }
}
Полное определение
{
  "type": "object",
  "properties": {
    "title": {
      "description": "Локализованный публичный заголовок документа.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontHeadingTextDto"
        }
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    },
    "description": {
      "description": "Локализованное публичное описание для поиска.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontDescriptionTextDto"
        }
      ],
      "example": {
        "en": "Synthetic example",
        "ka": "Synthetic example",
        "ru": "Synthetic example"
      }
    }
  },
  "description": "Публичные поисковые метаданные с обязательными заголовком и описанием на английском, грузинском и русском языках.",
  "required": [
    "title",
    "description"
  ],
  "example": {
    "title": {
      "en": "example",
      "ka": "example",
      "ru": "example"
    },
    "description": {
      "en": "Synthetic example",
      "ka": "Synthetic example",
      "ru": "Synthetic example"
    }
  }
}
StorefrontHeadingTextDto

Обязательный заголовок обычным текстом на английском, грузинском и русском языках: от 1 до 160 символов для каждого языка.

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

Заголовок обычным текстом на английском языке.

string
Полное определение
{
  "type": "string",
  "description": "Заголовок обычным текстом на английском языке.",
  "minLength": 1,
  "maxLength": 160,
  "example": "example"
}
kaОбязательно

Заголовок обычным текстом на грузинском языке.

string
Полное определение
{
  "type": "string",
  "description": "Заголовок обычным текстом на грузинском языке.",
  "minLength": 1,
  "maxLength": 160,
  "example": "example"
}
ruОбязательно

Заголовок обычным текстом на русском языке.

string
Полное определение
{
  "type": "string",
  "description": "Заголовок обычным текстом на русском языке.",
  "minLength": 1,
  "maxLength": 160,
  "example": "example"
}
Полное определение
{
  "type": "object",
  "properties": {
    "en": {
      "type": "string",
      "description": "Заголовок обычным текстом на английском языке.",
      "minLength": 1,
      "maxLength": 160,
      "example": "example"
    },
    "ka": {
      "type": "string",
      "description": "Заголовок обычным текстом на грузинском языке.",
      "minLength": 1,
      "maxLength": 160,
      "example": "example"
    },
    "ru": {
      "type": "string",
      "description": "Заголовок обычным текстом на русском языке.",
      "minLength": 1,
      "maxLength": 160,
      "example": "example"
    }
  },
  "description": "Обязательный заголовок обычным текстом на английском, грузинском и русском языках: от 1 до 160 символов для каждого языка.",
  "required": [
    "en",
    "ka",
    "ru"
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
StorefrontDescriptionTextDto

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

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

Поисковое описание на английском языке.

string
Полное определение
{
  "type": "string",
  "description": "Поисковое описание на английском языке.",
  "minLength": 1,
  "maxLength": 320,
  "example": "Synthetic example"
}
kaОбязательно

Поисковое описание на грузинском языке.

string
Полное определение
{
  "type": "string",
  "description": "Поисковое описание на грузинском языке.",
  "minLength": 1,
  "maxLength": 320,
  "example": "Synthetic example"
}
ruОбязательно

Поисковое описание на русском языке.

string
Полное определение
{
  "type": "string",
  "description": "Поисковое описание на русском языке.",
  "minLength": 1,
  "maxLength": 320,
  "example": "Synthetic example"
}
Полное определение
{
  "type": "object",
  "properties": {
    "en": {
      "type": "string",
      "description": "Поисковое описание на английском языке.",
      "minLength": 1,
      "maxLength": 320,
      "example": "Synthetic example"
    },
    "ka": {
      "type": "string",
      "description": "Поисковое описание на грузинском языке.",
      "minLength": 1,
      "maxLength": 320,
      "example": "Synthetic example"
    },
    "ru": {
      "type": "string",
      "description": "Поисковое описание на русском языке.",
      "minLength": 1,
      "maxLength": 320,
      "example": "Synthetic example"
    }
  },
  "description": "Обязательное публичное поисковое описание на английском, грузинском и русском языках: от 1 до 320 символов для каждого языка.",
  "required": [
    "en",
    "ka",
    "ru"
  ],
  "example": {
    "en": "Synthetic example",
    "ka": "Synthetic example",
    "ru": "Synthetic example"
  }
}
StorefrontHeroBlockDto

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

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

Стабильный идентификатор блока, уникальный в пределах документа.

string
Полное определение
{
  "type": "string",
  "description": "Стабильный идентификатор блока, уникальный в пределах документа.",
  "minLength": 1,
  "maxLength": 48,
  "example": "example-id"
}
kindОбязательно

Признак главного блока HERO.

string
Полное определение
{
  "type": "string",
  "description": "Признак главного блока HERO.",
  "enum": [
    "HERO"
  ],
  "example": "HERO"
}
titleОбязательно

Локализованный заголовок главного блока.

allOf
Полное определение
{
  "description": "Локализованный заголовок главного блока.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontHeadingTextDto"
    }
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
bodyОбязательно

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

object · null
Полное определение
{
  "description": "Локализованный поясняющий текст либо null, если он не задан в представлении.",
  "nullable": true,
  "type": "object",
  "properties": {
    "en": {
      "type": "string",
      "description": "Поясняющий текст главного блока на английском языке.",
      "minLength": 1,
      "maxLength": 1000,
      "example": "example"
    },
    "ka": {
      "type": "string",
      "description": "Поясняющий текст главного блока на грузинском языке.",
      "minLength": 1,
      "maxLength": 1000,
      "example": "example"
    },
    "ru": {
      "type": "string",
      "description": "Поясняющий текст главного блока на русском языке.",
      "minLength": 1,
      "maxLength": 1000,
      "example": "example"
    }
  },
  "required": [
    "en",
    "ka",
    "ru"
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
imageОбязательно

Изображение главного блока либо null для текстового блока без изображения.

object · null
Полное определение
{
  "description": "Изображение главного блока либо null для текстового блока без изображения.",
  "nullable": true,
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Публичный HTTPS-адрес изображения. Это значение не разрешает серверную загрузку изображения.",
      "format": "uri",
      "minLength": 1,
      "maxLength": 2048,
      "example": "https://example.test/resource"
    },
    "alt": {
      "description": "Альтернативный текст на каждом поддерживаемом языке витрины.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontImageAltTextDto"
        }
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    }
  },
  "required": [
    "url",
    "alt"
  ],
  "example": {
    "url": "https://example.test/resource",
    "alt": {
      "en": "example",
      "ka": "example",
      "ru": "example"
    }
  }
}
Полное определение
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Стабильный идентификатор блока, уникальный в пределах документа.",
      "minLength": 1,
      "maxLength": 48,
      "example": "example-id"
    },
    "kind": {
      "type": "string",
      "description": "Признак главного блока HERO.",
      "enum": [
        "HERO"
      ],
      "example": "HERO"
    },
    "title": {
      "description": "Локализованный заголовок главного блока.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontHeadingTextDto"
        }
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    },
    "body": {
      "description": "Локализованный поясняющий текст либо null, если он не задан в представлении.",
      "nullable": true,
      "type": "object",
      "properties": {
        "en": {
          "type": "string",
          "description": "Поясняющий текст главного блока на английском языке.",
          "minLength": 1,
          "maxLength": 1000,
          "example": "example"
        },
        "ka": {
          "type": "string",
          "description": "Поясняющий текст главного блока на грузинском языке.",
          "minLength": 1,
          "maxLength": 1000,
          "example": "example"
        },
        "ru": {
          "type": "string",
          "description": "Поясняющий текст главного блока на русском языке.",
          "minLength": 1,
          "maxLength": 1000,
          "example": "example"
        }
      },
      "required": [
        "en",
        "ka",
        "ru"
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    },
    "image": {
      "description": "Изображение главного блока либо null для текстового блока без изображения.",
      "nullable": true,
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "description": "Публичный HTTPS-адрес изображения. Это значение не разрешает серверную загрузку изображения.",
          "format": "uri",
          "minLength": 1,
          "maxLength": 2048,
          "example": "https://example.test/resource"
        },
        "alt": {
          "description": "Альтернативный текст на каждом поддерживаемом языке витрины.",
          "allOf": [
            {
              "$ref": "#/components/schemas/StorefrontImageAltTextDto"
            }
          ],
          "example": {
            "en": "example",
            "ka": "example",
            "ru": "example"
          }
        }
      },
      "required": [
        "url",
        "alt"
      ],
      "example": {
        "url": "https://example.test/resource",
        "alt": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        }
      }
    }
  },
  "description": "Главный блок представления с обязательным многоязычным заголовком, необязательным многоязычным пояснением и необязательным изображением с доступным описанием.",
  "required": [
    "id",
    "kind",
    "title",
    "body",
    "image"
  ],
  "example": {
    "id": "example-id",
    "kind": "HERO",
    "title": {
      "en": "example",
      "ka": "example",
      "ru": "example"
    },
    "body": null,
    "image": null
  }
}
StorefrontImageAltTextDto

Обязательное доступное описание изображения на английском, грузинском и русском языках: от 1 до 240 символов для каждого языка.

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

Альтернативный текст изображения на английском языке.

string
Полное определение
{
  "type": "string",
  "description": "Альтернативный текст изображения на английском языке.",
  "minLength": 1,
  "maxLength": 240,
  "example": "example"
}
kaОбязательно

Альтернативный текст изображения на грузинском языке.

string
Полное определение
{
  "type": "string",
  "description": "Альтернативный текст изображения на грузинском языке.",
  "minLength": 1,
  "maxLength": 240,
  "example": "example"
}
ruОбязательно

Альтернативный текст изображения на русском языке.

string
Полное определение
{
  "type": "string",
  "description": "Альтернативный текст изображения на русском языке.",
  "minLength": 1,
  "maxLength": 240,
  "example": "example"
}
Полное определение
{
  "type": "object",
  "properties": {
    "en": {
      "type": "string",
      "description": "Альтернативный текст изображения на английском языке.",
      "minLength": 1,
      "maxLength": 240,
      "example": "example"
    },
    "ka": {
      "type": "string",
      "description": "Альтернативный текст изображения на грузинском языке.",
      "minLength": 1,
      "maxLength": 240,
      "example": "example"
    },
    "ru": {
      "type": "string",
      "description": "Альтернативный текст изображения на русском языке.",
      "minLength": 1,
      "maxLength": 240,
      "example": "example"
    }
  },
  "description": "Обязательное доступное описание изображения на английском, грузинском и русском языках: от 1 до 240 символов для каждого языка.",
  "required": [
    "en",
    "ka",
    "ru"
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
StorefrontTextBlockDto

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

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

Стабильный идентификатор блока, уникальный в пределах документа.

string
Полное определение
{
  "type": "string",
  "description": "Стабильный идентификатор блока, уникальный в пределах документа.",
  "minLength": 1,
  "maxLength": 48,
  "example": "example-id"
}
kindОбязательно

Признак блока обычного текста.

string
Полное определение
{
  "type": "string",
  "description": "Признак блока обычного текста.",
  "enum": [
    "TEXT"
  ],
  "example": "TEXT"
}
headingОбязательно

Локализованный заголовок либо null для абзаца без заголовка.

object · null
Полное определение
{
  "description": "Локализованный заголовок либо null для абзаца без заголовка.",
  "nullable": true,
  "type": "object",
  "properties": {
    "en": {
      "type": "string",
      "description": "Заголовок обычным текстом на английском языке.",
      "minLength": 1,
      "maxLength": 160,
      "example": "example"
    },
    "ka": {
      "type": "string",
      "description": "Заголовок обычным текстом на грузинском языке.",
      "minLength": 1,
      "maxLength": 160,
      "example": "example"
    },
    "ru": {
      "type": "string",
      "description": "Заголовок обычным текстом на русском языке.",
      "minLength": 1,
      "maxLength": 160,
      "example": "example"
    }
  },
  "required": [
    "en",
    "ka",
    "ru"
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
bodyОбязательно

Локализованный обычный текст, который не исполняется как HTML.

allOf
Полное определение
{
  "description": "Локализованный обычный текст, который не исполняется как HTML.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontParagraphTextDto"
    }
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
Полное определение
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Стабильный идентификатор блока, уникальный в пределах документа.",
      "minLength": 1,
      "maxLength": 48,
      "example": "example-id"
    },
    "kind": {
      "type": "string",
      "description": "Признак блока обычного текста.",
      "enum": [
        "TEXT"
      ],
      "example": "TEXT"
    },
    "heading": {
      "description": "Локализованный заголовок либо null для абзаца без заголовка.",
      "nullable": true,
      "type": "object",
      "properties": {
        "en": {
          "type": "string",
          "description": "Заголовок обычным текстом на английском языке.",
          "minLength": 1,
          "maxLength": 160,
          "example": "example"
        },
        "ka": {
          "type": "string",
          "description": "Заголовок обычным текстом на грузинском языке.",
          "minLength": 1,
          "maxLength": 160,
          "example": "example"
        },
        "ru": {
          "type": "string",
          "description": "Заголовок обычным текстом на русском языке.",
          "minLength": 1,
          "maxLength": 160,
          "example": "example"
        }
      },
      "required": [
        "en",
        "ka",
        "ru"
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    },
    "body": {
      "description": "Локализованный обычный текст, который не исполняется как HTML.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontParagraphTextDto"
        }
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    }
  },
  "description": "Текстовый блок представления с обязательным многоязычным абзацем и многоязычным заголовком, явно допускающим null.",
  "required": [
    "id",
    "kind",
    "heading",
    "body"
  ],
  "example": {
    "id": "example-id",
    "kind": "TEXT",
    "heading": null,
    "body": {
      "en": "example",
      "ka": "example",
      "ru": "example"
    }
  }
}
StorefrontParagraphTextDto

Обязательный абзац обычным текстом на английском, грузинском и русском языках: от 1 до 4000 символов для каждого языка.

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

Абзац обычным текстом на английском языке.

string
Полное определение
{
  "type": "string",
  "description": "Абзац обычным текстом на английском языке.",
  "minLength": 1,
  "maxLength": 4000,
  "example": "example"
}
kaОбязательно

Абзац обычным текстом на грузинском языке.

string
Полное определение
{
  "type": "string",
  "description": "Абзац обычным текстом на грузинском языке.",
  "minLength": 1,
  "maxLength": 4000,
  "example": "example"
}
ruОбязательно

Абзац обычным текстом на русском языке.

string
Полное определение
{
  "type": "string",
  "description": "Абзац обычным текстом на русском языке.",
  "minLength": 1,
  "maxLength": 4000,
  "example": "example"
}
Полное определение
{
  "type": "object",
  "properties": {
    "en": {
      "type": "string",
      "description": "Абзац обычным текстом на английском языке.",
      "minLength": 1,
      "maxLength": 4000,
      "example": "example"
    },
    "ka": {
      "type": "string",
      "description": "Абзац обычным текстом на грузинском языке.",
      "minLength": 1,
      "maxLength": 4000,
      "example": "example"
    },
    "ru": {
      "type": "string",
      "description": "Абзац обычным текстом на русском языке.",
      "minLength": 1,
      "maxLength": 4000,
      "example": "example"
    }
  },
  "description": "Обязательный абзац обычным текстом на английском, грузинском и русском языках: от 1 до 4000 символов для каждого языка.",
  "required": [
    "en",
    "ka",
    "ru"
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
StorefrontGalleryBlockDto

Упорядоченная галерея представления: от 1 до 12 изображений по публичным HTTPS-адресам с многоязычным альтернативным текстом.

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

Стабильный идентификатор блока, уникальный в пределах документа.

string
Полное определение
{
  "type": "string",
  "description": "Стабильный идентификатор блока, уникальный в пределах документа.",
  "minLength": 1,
  "maxLength": 48,
  "example": "example-id"
}
kindОбязательно

Признак блока галереи.

string
Полное определение
{
  "type": "string",
  "description": "Признак блока галереи.",
  "enum": [
    "GALLERY"
  ],
  "example": "GALLERY"
}
imagesОбязательно

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

array
Полное определение
{
  "description": "Упорядоченные изображения галереи с локализованным альтернативным текстом.",
  "minItems": 1,
  "maxItems": 12,
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/StorefrontImageDto"
  },
  "example": [
    {
      "url": "https://example.test/resource",
      "alt": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    }
  ]
}
Полное определение
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Стабильный идентификатор блока, уникальный в пределах документа.",
      "minLength": 1,
      "maxLength": 48,
      "example": "example-id"
    },
    "kind": {
      "type": "string",
      "description": "Признак блока галереи.",
      "enum": [
        "GALLERY"
      ],
      "example": "GALLERY"
    },
    "images": {
      "description": "Упорядоченные изображения галереи с локализованным альтернативным текстом.",
      "minItems": 1,
      "maxItems": 12,
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/StorefrontImageDto"
      },
      "example": [
        {
          "url": "https://example.test/resource",
          "alt": {
            "en": "example",
            "ka": "example",
            "ru": "example"
          }
        }
      ]
    }
  },
  "description": "Упорядоченная галерея представления: от 1 до 12 изображений по публичным HTTPS-адресам с многоязычным альтернативным текстом.",
  "required": [
    "id",
    "kind",
    "images"
  ],
  "example": {
    "id": "example-id",
    "kind": "GALLERY",
    "images": [
      {
        "url": "https://example.test/resource",
        "alt": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        }
      }
    ]
  }
}
StorefrontImageDto

Изображение представления по публичному HTTPS-адресу с обязательным альтернативным текстом на английском, грузинском и русском языках для доступного отображения.

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

Публичный HTTPS-адрес изображения. Это значение не разрешает серверную загрузку изображения.

string · uri
Полное определение
{
  "type": "string",
  "description": "Публичный HTTPS-адрес изображения. Это значение не разрешает серверную загрузку изображения.",
  "format": "uri",
  "minLength": 1,
  "maxLength": 2048,
  "example": "https://example.test/resource"
}
altОбязательно

Альтернативный текст на каждом поддерживаемом языке витрины.

allOf
Полное определение
{
  "description": "Альтернативный текст на каждом поддерживаемом языке витрины.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontImageAltTextDto"
    }
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
Полное определение
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Публичный HTTPS-адрес изображения. Это значение не разрешает серверную загрузку изображения.",
      "format": "uri",
      "minLength": 1,
      "maxLength": 2048,
      "example": "https://example.test/resource"
    },
    "alt": {
      "description": "Альтернативный текст на каждом поддерживаемом языке витрины.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontImageAltTextDto"
        }
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    }
  },
  "description": "Изображение представления по публичному HTTPS-адресу с обязательным альтернативным текстом на английском, грузинском и русском языках для доступного отображения.",
  "required": [
    "url",
    "alt"
  ],
  "example": {
    "url": "https://example.test/resource",
    "alt": {
      "en": "example",
      "ka": "example",
      "ru": "example"
    }
  }
}
StorefrontLinksBlockDto

Упорядоченный блок ссылок представления: от 1 до 12 публичных HTTPS-адресов с явными подписями.

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

Стабильный идентификатор блока, уникальный в пределах документа.

string
Полное определение
{
  "type": "string",
  "description": "Стабильный идентификатор блока, уникальный в пределах документа.",
  "minLength": 1,
  "maxLength": 48,
  "example": "example-id"
}
kindОбязательно

Признак блока группы ссылок.

string
Полное определение
{
  "type": "string",
  "description": "Признак блока группы ссылок.",
  "enum": [
    "LINKS"
  ],
  "example": "LINKS"
}
linksОбязательно

Упорядоченные внешние ссылки.

array
Полное определение
{
  "description": "Упорядоченные внешние ссылки.",
  "minItems": 1,
  "maxItems": 12,
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/StorefrontLinkDto"
  },
  "example": [
    {
      "label": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      },
      "url": "https://example.test/resource"
    }
  ]
}
Полное определение
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Стабильный идентификатор блока, уникальный в пределах документа.",
      "minLength": 1,
      "maxLength": 48,
      "example": "example-id"
    },
    "kind": {
      "type": "string",
      "description": "Признак блока группы ссылок.",
      "enum": [
        "LINKS"
      ],
      "example": "LINKS"
    },
    "links": {
      "description": "Упорядоченные внешние ссылки.",
      "minItems": 1,
      "maxItems": 12,
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/StorefrontLinkDto"
      },
      "example": [
        {
          "label": {
            "en": "example",
            "ka": "example",
            "ru": "example"
          },
          "url": "https://example.test/resource"
        }
      ]
    }
  },
  "description": "Упорядоченный блок ссылок представления: от 1 до 12 публичных HTTPS-адресов с явными подписями.",
  "required": [
    "id",
    "kind",
    "links"
  ],
  "example": {
    "id": "example-id",
    "kind": "LINKS",
    "links": [
      {
        "label": {
          "en": "example",
          "ka": "example",
          "ru": "example"
        },
        "url": "https://example.test/resource"
      }
    ]
  }
}
StorefrontLinkDto

Публичный HTTPS-адрес назначения представления с обязательными подписями ссылки на английском, грузинском и русском языках.

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

Локализованная подпись внешней ссылки.

allOf
Полное определение
{
  "description": "Локализованная подпись внешней ссылки.",
  "allOf": [
    {
      "$ref": "#/components/schemas/StorefrontLinkLabelTextDto"
    }
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
urlОбязательно

Публичный HTTPS-адрес назначения. Учётные данные в адресе и нестандартные порты отклоняются.

string · uri
Полное определение
{
  "type": "string",
  "description": "Публичный HTTPS-адрес назначения. Учётные данные в адресе и нестандартные порты отклоняются.",
  "format": "uri",
  "minLength": 1,
  "maxLength": 2048,
  "example": "https://example.test/resource"
}
Полное определение
{
  "type": "object",
  "properties": {
    "label": {
      "description": "Локализованная подпись внешней ссылки.",
      "allOf": [
        {
          "$ref": "#/components/schemas/StorefrontLinkLabelTextDto"
        }
      ],
      "example": {
        "en": "example",
        "ka": "example",
        "ru": "example"
      }
    },
    "url": {
      "type": "string",
      "description": "Публичный HTTPS-адрес назначения. Учётные данные в адресе и нестандартные порты отклоняются.",
      "format": "uri",
      "minLength": 1,
      "maxLength": 2048,
      "example": "https://example.test/resource"
    }
  },
  "description": "Публичный HTTPS-адрес назначения представления с обязательными подписями ссылки на английском, грузинском и русском языках.",
  "required": [
    "label",
    "url"
  ],
  "example": {
    "label": {
      "en": "example",
      "ka": "example",
      "ru": "example"
    },
    "url": "https://example.test/resource"
  }
}
StorefrontLinkLabelTextDto

Обязательная подпись ссылки представления на английском, грузинском и русском языках: от 1 до 120 символов для каждого языка.

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

Подпись ссылки на английском языке.

string
Полное определение
{
  "type": "string",
  "description": "Подпись ссылки на английском языке.",
  "minLength": 1,
  "maxLength": 120,
  "example": "example"
}
kaОбязательно

Подпись ссылки на грузинском языке.

string
Полное определение
{
  "type": "string",
  "description": "Подпись ссылки на грузинском языке.",
  "minLength": 1,
  "maxLength": 120,
  "example": "example"
}
ruОбязательно

Подпись ссылки на русском языке.

string
Полное определение
{
  "type": "string",
  "description": "Подпись ссылки на русском языке.",
  "minLength": 1,
  "maxLength": 120,
  "example": "example"
}
Полное определение
{
  "type": "object",
  "properties": {
    "en": {
      "type": "string",
      "description": "Подпись ссылки на английском языке.",
      "minLength": 1,
      "maxLength": 120,
      "example": "example"
    },
    "ka": {
      "type": "string",
      "description": "Подпись ссылки на грузинском языке.",
      "minLength": 1,
      "maxLength": 120,
      "example": "example"
    },
    "ru": {
      "type": "string",
      "description": "Подпись ссылки на русском языке.",
      "minLength": 1,
      "maxLength": 120,
      "example": "example"
    }
  },
  "description": "Обязательная подпись ссылки представления на английском, грузинском и русском языках: от 1 до 120 символов для каждого языка.",
  "required": [
    "en",
    "ka",
    "ru"
  ],
  "example": {
    "en": "example",
    "ka": "example",
    "ru": "example"
  }
}
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 поддерживают вход, язык и тему. Аналитика выключена, пока вы явно ее не разрешите.