openapi: 3.0.3
info:
  title: banner
  version: 1.0.1777040387682
  description: Сервис banner
  license:
    name: CC BY-NC-ND 4.0
    url: https://gitlab.infra.rtkit.dev/openapi/key/raw/main/LICENCE.md
tags:
  - name: banner_lite(public)
    description: Методы banner_lite. Не требуют авторизацию. Доступны из интернета
  - name: banner(auth)
    description: Методы banner. Требуют авторизацию. Доступны из интернета
  - name: system(public)
    description: Методы system. Не требуют авторизацию. Доступны из интернета
paths:
  /banner/api/v1/banner:
    post:
      summary: |-
        Метод сохранения баннера.
        Поддерживает создание и обновление.
        Метод доступен для: admin, manager, service
      operationId: BannerService_PostBanner
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostBannerResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostBannerResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostBannerResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostBannerRequest"
        required: true
      tags:
        - banner(auth)
      security:
        - oauth2:
            - banner:edit
          bearerHttp: []
      parameters:
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
  /banner/api/v1/banner/count:
    get:
      summary: |-
        Метод получения количества баннеров.
        Метод доступен для: admin, manager, service
      operationId: BannerService_GetBannerCount
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetBannerCountResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetBannerCountResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetBannerCountResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.text
          description: |-
            По тексту.
            Если значение не передано то поиск по нему не производится.
            # Диапазон: 3..64.
            # Поиск производится по полям:
            # - Название;
            # - Заголовок;
            # - Подзаголовок;
            # - Список тегов пользователей;
            # - Список тегов приложений
          in: query
          required: false
          schema:
            type: string
        - name: filter.types
          description: |-
            По типам баннеров

             - TYPE_UNKNOWN: Значение не указано
             - STANDARD: Стандартный баннер
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
              enum:
                - STANDARD
        - name: filter.beginPriority
          description: От приоритета включительно (больше или равно)
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: filter.endPriority
          description: До приоритета (меньше)
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: filter.priorityTypes
          description: >-
            По типам приоритетов.

            Переписывает значения фильтров по приоритету.

            Если переданы все типы, то фильтр игнорируется(так как нужно вернуть всё)

             - PRIORITY_TYPE_UNKNOWN: Значение не указано
             - NORMAL: Обычный.
            Приоритет 31.

            Вычисляется в логике приложения как priority меньше 64.

            Извлекаются из базы по фильтру end_priority = 64
             - WHITE_LABEL: Вайт-лейбл.
            Приоритет 127.

            Вычисляется в логике приложения как priority больше или равно 64 и priority меньше 160.

            Извлекаются из базы по фильтру begin_priority = 64 и end_priority = 160
             - CRITICAL: Критикл.
            Приоритет 191.

            Вычисляется в логике приложения как priority больше или равно 160.

            Извлекаются из базы по фильтру begin_priority = 160
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
              enum:
                - NORMAL
                - WHITE_LABEL
                - CRITICAL
        - name: filter.beginShowStartAt
          description: От даты начала показа включительно (больше или равно)
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: filter.endShowStartAt
          description: До даты начала показа (меньше)
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: filter.beginShowEndedAt
          description: От даты конца показа включительно (больше или равно)
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: filter.endShowEndedAt
          description: До даты конца показа (меньше)
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: filter.statusTypes
          description: >-
            По статусам баннеров.

            Переписывает значения фильтров по датам.

            Если переданы все типы, то фильтр игнорируется(так как нужно вернуть всё)

             - STATUS_TYPE_UNKNOWN: Значение не указано
             - DEFERRED: Отложен.
            Вычисляется в логике приложения как сurr_date меньше show_start_at.

            Извлекаются из базы по фильтру end_show_start_at = сurr_date
             - ACTIVE: Активен.
            Вычисляется в логике приложения как сurr_date больше или равно show_start_at и сurr_date меньше show_ended_at.

            Извлекаются из базы по фильтру begin_show_start_at = сurr_date и end_show_ended_at = сurr_date
             - EXPIRED: Истёк.
            Вычисляется в логике приложения как сurr_date больше или равно show_ended_at.

            Извлекаются из базы по фильтру begin_show_ended_at = сurr_date
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
              enum:
                - DEFERRED
                - ACTIVE
                - EXPIRED
        - name: filter.userTags
          description: >-
            По пользовательским тегам.

            Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10.

            # Диапазон: 0..20.

            # Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: filter.appTags
          description: >-
            По тегам приложений.

            Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10.

            # Диапазон: 0..20.

            # Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - banner(auth)
      security:
        - oauth2:
            - banner:read
            - banner:edit
          bearerHttp: []
  /banner/api/v1/banner/list:
    get:
      summary: |-
        Метод получения списка баннеров.
        Метод доступен для: admin, manager, service
      operationId: BannerService_GetBannerList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    $ref: "#/components/schemas/v1GetBannerListResponse"
                  error:
                    $ref: "#/components/schemas/rpcStatus"
                title: Поток объектов v1GetBannerListResponse
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.text
          description: |-
            По тексту.
            Если значение не передано то поиск по нему не производится.
            # Диапазон: 3..64.
            # Поиск производится по полям:
            # - Название;
            # - Заголовок;
            # - Подзаголовок;
            # - Список тегов пользователей;
            # - Список тегов приложений
          in: query
          required: false
          schema:
            type: string
        - name: filter.types
          description: |-
            По типам баннеров

             - TYPE_UNKNOWN: Значение не указано
             - STANDARD: Стандартный баннер
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
              enum:
                - STANDARD
        - name: filter.beginPriority
          description: От приоритета включительно (больше или равно)
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: filter.endPriority
          description: До приоритета (меньше)
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: filter.priorityTypes
          description: >-
            По типам приоритетов.

            Переписывает значения фильтров по приоритету.

            Если переданы все типы, то фильтр игнорируется(так как нужно вернуть всё)

             - PRIORITY_TYPE_UNKNOWN: Значение не указано
             - NORMAL: Обычный.
            Приоритет 31.

            Вычисляется в логике приложения как priority меньше 64.

            Извлекаются из базы по фильтру end_priority = 64
             - WHITE_LABEL: Вайт-лейбл.
            Приоритет 127.

            Вычисляется в логике приложения как priority больше или равно 64 и priority меньше 160.

            Извлекаются из базы по фильтру begin_priority = 64 и end_priority = 160
             - CRITICAL: Критикл.
            Приоритет 191.

            Вычисляется в логике приложения как priority больше или равно 160.

            Извлекаются из базы по фильтру begin_priority = 160
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
              enum:
                - NORMAL
                - WHITE_LABEL
                - CRITICAL
        - name: filter.beginShowStartAt
          description: От даты начала показа включительно (больше или равно)
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: filter.endShowStartAt
          description: До даты начала показа (меньше)
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: filter.beginShowEndedAt
          description: От даты конца показа включительно (больше или равно)
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: filter.endShowEndedAt
          description: До даты конца показа (меньше)
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: filter.statusTypes
          description: >-
            По статусам баннеров.

            Переписывает значения фильтров по датам.

            Если переданы все типы, то фильтр игнорируется(так как нужно вернуть всё)

             - STATUS_TYPE_UNKNOWN: Значение не указано
             - DEFERRED: Отложен.
            Вычисляется в логике приложения как сurr_date меньше show_start_at.

            Извлекаются из базы по фильтру end_show_start_at = сurr_date
             - ACTIVE: Активен.
            Вычисляется в логике приложения как сurr_date больше или равно show_start_at и сurr_date меньше show_ended_at.

            Извлекаются из базы по фильтру begin_show_start_at = сurr_date и end_show_ended_at = сurr_date
             - EXPIRED: Истёк.
            Вычисляется в логике приложения как сurr_date больше или равно show_ended_at.

            Извлекаются из базы по фильтру begin_show_ended_at = сurr_date
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
              enum:
                - DEFERRED
                - ACTIVE
                - EXPIRED
        - name: filter.userTags
          description: >-
            По пользовательским тегам.

            Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10.

            # Диапазон: 0..20.

            # Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: filter.appTags
          description: >-
            По тегам приложений.

            Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10.

            # Диапазон: 0..20.

            # Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: paging.orderByType
          description: >-
            Тип значения сортировки.

            Если значение не передано, то будет взято значение по умолчанию.

            # По умолчанию: CHANGED_AT

             - ORDER_BY_TYPE_UNKNOWN: Значение не указано
             - CHANGED_AT: Дата последнего изменения
             - PRIORITY_THEN_SHOW_START_AT: По приоритету, затем по дате начала показа
             - CREATED_AT: Дата создания
             - SHOW_START_AT: Дата начала показа
             - SHOW_ENDED_AT: Дата конца показа
             - RANK: По рангу для поиска по тексту.
            Применяется когда передано поле для поиска по тексту.

            В случае если текстовое поле не передано, применяется значение по умолчанию
          in: query
          required: false
          schema:
            type: string
            enum:
              - CHANGED_AT
              - PRIORITY_THEN_SHOW_START_AT
              - CREATED_AT
              - SHOW_START_AT
              - SHOW_ENDED_AT
              - RANK
        - name: paging.directionType
          description: |-
            Тип направления сортировки.
            # По умолчанию: DESC

             - DIRECTION_TYPE_UNKNOWN: Значение не указано
             - DESC: От большего к меньшему
             - ASC: От меньшего к большему
          in: query
          required: false
          schema:
            type: string
            enum:
              - DESC
              - ASC
        - name: paging.limit
          description: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: paging.offset
          description: |-
            Сдвиг.
            # Диапазон: 0..2147483647
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - banner(auth)
      security:
        - oauth2:
            - banner:read
            - banner:edit
          bearerHttp: []
  "/banner/api/v1/banner/{bannerId}/upload_image":
    post:
      summary: |-
        Метод загрузки картинки баннера.
        Метод доступен для: admin, manager, service
      operationId: BannerService_PostBannerUploadImage
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostBannerUploadImageResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostBannerUploadImageResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostBannerUploadImageResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: bannerId
          description: >-
            Идентификатор баннера.

            Используется для складывания картинок баннера в папку баннера в бакете.

            Название картинки в папке создаётся из случайного Guid.

            # Тип: Guid
          in: path
          required: true
          schema:
            type: string
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1UploadImage"
        description: Загружаемая картинка
        required: true
      tags:
        - banner(auth)
      security:
        - oauth2:
            - banner:edit
          bearerHttp: []
  "/banner/api/v1/banner/{id}":
    get:
      summary: |-
        Метод получения баннера.
        Метод доступен для: admin, manager, service
      operationId: BannerService_GetBanner
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetBannerResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetBannerResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetBannerResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: id
          description: |-
            Идентификатор баннера.
            # Тип: Guid
          in: path
          required: true
          schema:
            type: string
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - banner(auth)
      security:
        - oauth2:
            - banner:read
            - banner:edit
          bearerHttp: []
  /banner/api/v1/banner_lite/list:
    get:
      summary: >-
        Метод получения списка упрощённых баннеров.

        Возвращает всегда активные баннеры.

        По умолчанию возвращает первые 20 баннеров осортированных по приоритету, затем по дате начала акции(от самых важных к не важным, затем от самых новых акций к самым старым).

        Если запрос выполнен хотя бы без одного изпризнака приложения возвращает пустой список.

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

        Не требует авторизации
      operationId: BannerService_GetBannerLiteList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    $ref: "#/components/schemas/v1GetBannerLiteListResponse"
                  error:
                    $ref: "#/components/schemas/rpcStatus"
                title: Поток объектов v1GetBannerLiteListResponse
        "400":
          description: Ошибка
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.types
          description: |-
            По типам баннеров

             - TYPE_UNKNOWN: Значение не указано
             - STANDARD: Стандартный баннер
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
              enum:
                - STANDARD
        - name: filter.appName
          description: |-
            Название приложения.
            # Диапазон: 1..19.
            # Паттерн: /^[0-9A-Z-]{1,19}$/
          in: query
          required: false
          schema:
            type: string
        - name: filter.platformType
          description: |-
            Тип платформы

             - PLATFORM_TYPE_UNKNOWN: Значение не указано
             - IOS: Платформа iOS.
            Приложение размещается в App Store
             - ANDROID: Платформа Android.
            Приложение размещается в Google Play, App Gallery или прочих сторах
             - WEB: Платформа Web.
            Приложение размещается по интернет адресу
          in: query
          required: false
          schema:
            type: string
            enum:
              - IOS
              - ANDROID
              - WEB
        - name: filter.version
          description: |-
            Версия приложения.
            # Диапазон: 1..19.
            # Паттерн: /^[0-9A-Z-]{1,19}$/
          in: query
          required: false
          schema:
            type: string
        - name: filter.userTags
          description: >-
            По тегам пользователя.

            Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10.

            # Диапазон: 1..20.

            # Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: isLinkFilterDisabled
          description: Признак отключения фильтрации по типу платформы
          in: query
          required: false
          schema:
            type: boolean
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - banner_lite(public)
  "/banner/api/v1/banner_lite/{id}":
    get:
      summary: |-
        Метод получения упрощённого баннера.
        Не требует авторизации
      operationId: BannerService_GetBannerLite
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetBannerLiteResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetBannerLiteResponse"
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetBannerLiteResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: id
          description: |-
            Идентификатор баннера.
            # Тип: Guid
          in: path
          required: true
          schema:
            type: string
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - banner_lite(public)
  /banner/api/v1/system/status:
    get:
      summary: |-
        Метод получения статуса сервиса.
        Не требует авторизации
      operationId: SystemService_GetSystemStatus
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSystemStatusResponse"
        "400":
          description: Ошибка
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - system(public)
      parameters:
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
components:
  schemas:
    BannerGradient:
      type: object
      properties:
        linear:
          title: Линейный градиент
          allOf:
            - $ref: "#/components/schemas/GradientLinear"
      title: Градиент
    BannerImage:
      type: object
      properties:
        type:
          title: |-
            Тип картинки.
            Обязательное
          allOf:
            - $ref: "#/components/schemas/BannerImageType"
        url:
          type: string
          title: |-
            Значение ссылки на картинку.
            Обязательное.
            # Диапазон: 12..512
      title: Объект картинки
      required:
        - type
        - url
    BannerImageType:
      type: string
      enum:
        - PORTRAIT
        - LANDSCAPE
        - ICON
      description: >-
        - TYPE_UNKNOWN: Значение не указано
         - PORTRAIT: Пререндеренный баннер в портретном режиме.
        В портретном режиме ширина меньше или равна высоте.

        Представление характерно для телефонов.

        Может содержать дополнительные параметры запроса в ссылке(https://docs.imgproxy.net/generating_the_url?id=processing-options).

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

        Если ссылки нет то нужно использовать ссылку из ландшафтного режима
         - LANDSCAPE: Пререндеренный баннер в ландшафтном режиме.
        В ландшафтном режиме ширина больше высоты.

        Представление характерно для планшетов и декстопа.

        Может содержать дополнительные параметры запроса в ссылке(https://docs.imgproxy.net/generating_the_url?id=processing-options).

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

        Если ссылки нет то нужно использовать ссылку из портретного режима
         - ICON: Иконка.
        Может содержать дополнительные параметры запроса в ссылке(https://docs.imgproxy.net/generating_the_url?id=processing-options).

        После загрузки изображения отрисовывается поверх цвета и градиента
      title: |-
        Справочник типов картинок.
        # Тип: byte
    BannerLink:
      type: object
      properties:
        platformType:
          title: |-
            Тип платформы.
            Обязательное
          allOf:
            - $ref: "#/components/schemas/BannerPlatformType"
        type:
          title: |-
            Тип ссылки.
            Обязательное
          allOf:
            - $ref: "#/components/schemas/BannerLinkType"
        url:
          type: string
          title: |-
            Значение ссылки для перехода.
            Обязательное.
            # Диапазон: 12..512
        packages:
          type: array
          items:
            type: string
          title: >-
            Список пакетов.

            Если пусто попытка перехода осуществляется безусловно.

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

            # Диапазон: 0..20
      title: Ссылка
      required:
        - platformType
        - type
        - url
    BannerLinkType:
      type: string
      enum:
        - INTERNAL_APP
        - EXTERNAL_APP
        - WEB_VIEW
        - WEB_BROWSER
        - EXTERNAL_WEB_VIEW
      description: >-
        - TYPE_UNKNOWN: Значение не указано
         - INTERNAL_APP: Ссылка для перехода на раздел текущего приложения
         - EXTERNAL_APP: Ссылка для перехода на стороннее приложение
         - WEB_VIEW: Ссылка для перехода на веб-вью внутренних (своих) приложений.
        В окне отсутствует адресаная строка.

        Для iOS используется WKWebView, для Android используется WebView
         - WEB_BROWSER: Ссылка для перехода на веб-браузер
         - EXTERNAL_WEB_VIEW: Ссылка для перехода на веб-вью внешних (партнёрских) приложений.
        В окне присутствует адресаная строка.

        Для iOS используется SFSafariViewController, для Android используется ChromeCustomTabs
      title: |-
        Справочник типов ссылок.
        # Тип: byte
    BannerLiteImageLite:
      type: object
      properties:
        type:
          title: |-
            Тип картинки.
            Обязательное
          allOf:
            - $ref: "#/components/schemas/BannerImageType"
        url:
          type: string
          title: |-
            Значение ссылки на картинку.
            Обязательное
      title: Упрощённый объект картинки
      required:
        - type
        - url
    BannerLiteLinkLite:
      type: object
      properties:
        type:
          title: |-
            Тип ссылки.
            Обязательное
          allOf:
            - $ref: "#/components/schemas/BannerLinkType"
        url:
          type: string
          title: |-
            Значение ссылки.
            Обязательное
        packages:
          type: array
          items:
            type: string
          title: >-
            Список пакетов.

            Если пусто попытка перехода осуществляется безусловно.

            Если заполнено, то переход осуществляется только в случае если хоть один пакет есть на устройстве иначе обработка переходит к следующей ссылке
        platformType:
          title: |-
            Тип платформы.
            Обязательное
          allOf:
            - $ref: "#/components/schemas/BannerPlatformType"
      title: Упрощённая ссылка
      required:
        - type
        - url
        - platformType
    BannerPagingDirectionType:
      type: string
      enum:
        - DESC
        - ASC
      description: |-
        - DIRECTION_TYPE_UNKNOWN: Значение не указано
         - DESC: От большего к меньшему
         - ASC: От меньшего к большему
      title: |-
        Справочник типов направлений сортировки.
        # Тип: byte
    BannerPagingOrderByType:
      type: string
      enum:
        - CHANGED_AT
        - PRIORITY_THEN_SHOW_START_AT
        - CREATED_AT
        - SHOW_START_AT
        - SHOW_ENDED_AT
        - RANK
      description: >-
        - ORDER_BY_TYPE_UNKNOWN: Значение не указано
         - CHANGED_AT: Дата последнего изменения
         - PRIORITY_THEN_SHOW_START_AT: По приоритету, затем по дате начала показа
         - CREATED_AT: Дата создания
         - SHOW_START_AT: Дата начала показа
         - SHOW_ENDED_AT: Дата конца показа
         - RANK: По рангу для поиска по тексту.
        Применяется когда передано поле для поиска по тексту.

        В случае если текстовое поле не передано, применяется значение по умолчанию
      title: |-
        Справочник типов значений сортировки.
        # Тип: byte
    BannerPlatformType:
      type: string
      enum:
        - IOS
        - ANDROID
        - WEB
      description: |-
        - PLATFORM_TYPE_UNKNOWN: Значение не указано
         - IOS: Платформа iOS.
        Приложение размещается в App Store
         - ANDROID: Платформа Android.
        Приложение размещается в Google Play, App Gallery или прочих сторах
         - WEB: Платформа Web.
        Приложение размещается по интернет адресу
      title: |-
        Справочник платформ.
        # Тип: byte
    BannerPriorityType:
      type: string
      enum:
        - NORMAL
        - WHITE_LABEL
        - CRITICAL
      description: >-
        - PRIORITY_TYPE_UNKNOWN: Значение не указано
         - NORMAL: Обычный.
        Приоритет 31.

        Вычисляется в логике приложения как priority меньше 64.

        Извлекаются из базы по фильтру end_priority = 64
         - WHITE_LABEL: Вайт-лейбл.
        Приоритет 127.

        Вычисляется в логике приложения как priority больше или равно 64 и priority меньше 160.

        Извлекаются из базы по фильтру begin_priority = 64 и end_priority = 160
         - CRITICAL: Критикл.
        Приоритет 191.

        Вычисляется в логике приложения как priority больше или равно 160.

        Извлекаются из базы по фильтру begin_priority = 160
      title: |-
        Справочник типов приоритетов.
        # Тип: byte
    BannerSavingError:
      type: object
      properties:
        conflict:
          title: Конфликт версий
          allOf:
            - $ref: "#/components/schemas/SavingErrorConflict"
      title: >-
        Ошибка сохранения.

        Эти проверки выполняются при работе с базой данных и сторонними сервисами
    BannerStatusType:
      type: string
      enum:
        - DEFERRED
        - ACTIVE
        - EXPIRED
      description: >-
        - STATUS_TYPE_UNKNOWN: Значение не указано
         - DEFERRED: Отложен.
        Вычисляется в логике приложения как сurr_date меньше show_start_at.

        Извлекаются из базы по фильтру end_show_start_at = сurr_date
         - ACTIVE: Активен.
        Вычисляется в логике приложения как сurr_date больше или равно show_start_at и сurr_date меньше show_ended_at.

        Извлекаются из базы по фильтру begin_show_start_at = сurr_date и end_show_ended_at = сurr_date
         - EXPIRED: Истёк.
        Вычисляется в логике приложения как сurr_date больше или равно show_ended_at.

        Извлекаются из базы по фильтру begin_show_ended_at = сurr_date
      title: |-
        Справочник статусов баннеров.
        # Тип: byte
    GradientLinear:
      type: object
      properties:
        angle:
          type: number
          format: float
          title: |-
            Угол направления линейного градиента в градусах.
            # Диапазон: 0..360
        points:
          type: array
          items:
            $ref: "#/components/schemas/LinearPoint"
          title: |-
            Точки градиента.
            Обязательное.
            # Диапазон: 2..20
      title: Линейный градиент
      required:
        - points
    LinearPoint:
      type: object
      properties:
        color:
          type: string
          title: |-
            Цвет линейного градиента.
            Обязательное.
            Отрисовывается до загрузки картинки и градиента.
            Все цвета должны быть в формате hex #RRGGBBAA.
            Пример: #7e00c380.
            # Диапазон: 9..9.
            # Паттерн: /^#[0-9a-fA-F]{8}$/
        stop:
          type: number
          format: float
          title: |-
            Стоп линейного градиента.
            Записывается в процентах.
            # Диапазон: 0..100
      title: Точка
      required:
        - color
    SavingErrorConflict:
      type: object
      title: |-
        Конфликт версий.
        Причины:
        - В базе хранится другая версия строки, значения changed_at отличаются
    protobufAny:
      type: object
      properties:
        "@type":
          type: string
      additionalProperties: {}
      title: Произвольный JSON
    rpcStatus:
      type: object
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
        details:
          type: array
          items:
            $ref: "#/components/schemas/protobufAny"
      title: Ошибка транспортного слоя
    v1Banner:
      type: object
      properties:
        id:
          type: string
          title: |-
            Идентификатор.
            Если не передан создаётся сервером.
            # Тип: Guid
        type:
          title: |-
            Тип баннера.
            Обязательное
          allOf:
            - $ref: "#/components/schemas/v1BannerType"
        priority:
          type: integer
          format: int32
          title: |-
            Приоритет.
            Обязательное.
            # Диапазон: 1..255
        priorityType:
          title: |-
            Тип приоритета.
            # Поле вычисляется в коде приложения
          readOnly: true
          allOf:
            - $ref: "#/components/schemas/BannerPriorityType"
        title:
          type: string
          title: |-
            Название.
            Обязательное.
            Обычно это название рекламной компании.
            Не отображается пользователям.
            # Диапазон: 3..256
        header:
          type: string
          title: |-
            Заголовок.
            # Диапазон: 3..64
        headerColor:
          type: string
          title: |-
            Цвет текста заголовка.
            Все цвета должны быть в формате hex #RRGGBBAA.
            Пример: #7e00c380.
            # Диапазон: 9..9.
            # Паттерн: /^#[0-9a-fA-F]{8}$/
        subtitle:
          type: string
          title: |-
            Подзаголовок.
            # Диапазон: 3..256
        subtitleColor:
          type: string
          title: |-
            Цвет текста подзаголовка.
            Все цвета должны быть в формате hex #RRGGBBAA.
            Пример: #7e00c380.
            # Диапазон: 9..9.
            # Паттерн: /^#[0-9a-fA-F]{8}$/
        backgroundColor:
          type: string
          title: |-
            Цвет заднего плана(подложки).
            Отрисовывается до загрузки картинки и градиента.
            Все цвета должны быть в формате hex #RRGGBBAA.
            Пример: #7e00c380.
            # Диапазон: 9..9.
            # Паттерн: /^#[0-9a-fA-F]{8}$/
        backgroundGradient:
          title: Градиент
          allOf:
            - $ref: "#/components/schemas/BannerGradient"
        repeatAfterDays:
          type: integer
          format: int32
          title: |-
            Количество дней через которое можно повторно показать баннер.
            Если null, то закрыть нельзя, баннер повторно выводится каждый раз.
            # Диапазон: 0..366
        showStartAt:
          type: string
          format: date-time
          title: |-
            Дата начала показа.
            Обязательное.
            Бессрочно если значение 2000-01-01.
            # Тип: DateOnly.
            # Диапазон: 730119..1095362
        showEndedAt:
          type: string
          format: date-time
          title: |-
            Дата конца показа.
            Обязательное.
            Бессрочно если значение 3000-01-01.
            # Тип: DateOnly.
            # Диапазон: 730119..1095362
        statusType:
          title: |-
            Статус баннера.
            # Поле вычисляется в коде приложения
          readOnly: true
          allOf:
            - $ref: "#/components/schemas/BannerStatusType"
        images:
          type: array
          items:
            $ref: "#/components/schemas/BannerImage"
          title: |-
            Картинки.
            # Диапазон: 0..20
        links:
          type: array
          items:
            $ref: "#/components/schemas/BannerLink"
          title: |-
            Ссылки для переходов.
            # Диапазон: 0..100
        userTags:
          type: array
          items:
            type: string
          title: >-
            Список тегов пользователей.

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

            Описывает кто может видеть баннер.

            Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10.

            # Диапазон: 1..100.

            # Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/
        appTags:
          type: array
          items:
            type: string
          title: >-
            Список тегов приложений.

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

            Описывает какие клиенты могут видеть баннер.

            Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10.

            # Диапазон: 1..20.

            # Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/
        createdAt:
          type: string
          format: date-time
          title: |-
            Дата создания.
            # Тип: DateTime
          readOnly: true
        changedAt:
          type: string
          format: date-time
          title: |-
            Дата последнего изменения.
            Заполняется и обновляется сервером.
            Заполняется при создании и изменении.
            Является версией объекта.
            # Тип: DateTime
          readOnly: true
      title: |-
        Баннер.
        # Описание модели
      required:
        - type
        - priority
        - title
        - showStartAt
        - showEndedAt
        - userTags
        - appTags
    v1BannerFilter:
      type: object
      properties:
        text:
          type: string
          title: |-
            По тексту.
            Если значение не передано то поиск по нему не производится.
            # Диапазон: 3..64.
            # Поиск производится по полям:
            # - Название;
            # - Заголовок;
            # - Подзаголовок;
            # - Список тегов пользователей;
            # - Список тегов приложений
        types:
          type: array
          items:
            $ref: "#/components/schemas/v1BannerType"
          title: По типам баннеров
        beginPriority:
          type: integer
          format: int32
          title: От приоритета включительно (больше или равно)
        endPriority:
          type: integer
          format: int32
          title: До приоритета (меньше)
        priorityTypes:
          type: array
          items:
            $ref: "#/components/schemas/BannerPriorityType"
          title: >-
            По типам приоритетов.

            Переписывает значения фильтров по приоритету.

            Если переданы все типы, то фильтр игнорируется(так как нужно вернуть всё)
        beginShowStartAt:
          type: string
          format: date-time
          title: От даты начала показа включительно (больше или равно)
        endShowStartAt:
          type: string
          format: date-time
          title: До даты начала показа (меньше)
        beginShowEndedAt:
          type: string
          format: date-time
          title: От даты конца показа включительно (больше или равно)
        endShowEndedAt:
          type: string
          format: date-time
          title: До даты конца показа (меньше)
        statusTypes:
          type: array
          items:
            $ref: "#/components/schemas/BannerStatusType"
          title: >-
            По статусам баннеров.

            Переписывает значения фильтров по датам.

            Если переданы все типы, то фильтр игнорируется(так как нужно вернуть всё)
        userTags:
          type: array
          items:
            type: string
          title: >-
            По пользовательским тегам.

            Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10.

            # Диапазон: 0..20.

            # Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/
        appTags:
          type: array
          items:
            type: string
          title: >-
            По тегам приложений.

            Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10.

            # Диапазон: 0..20.

            # Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/
      title: Фильтр баннеров
    v1BannerLite:
      type: object
      properties:
        id:
          type: string
          title: |-
            Идентификатор.
            # Тип: Guid
        repeatAfterDays:
          type: integer
          format: int32
          title: |-
            Количество дней через которое можно повторно показать баннер.
            Если Значение не указано то повторного показа баннера не будет
        images:
          type: array
          items:
            $ref: "#/components/schemas/BannerLiteImageLite"
          title: Картинки
        links:
          type: array
          items:
            $ref: "#/components/schemas/BannerLiteLinkLite"
          title: |-
            Ссылки для переходов.
            Возвращаются отфильтрованные по платформе
      title: Облегчённый баннер
    v1BannerLiteFilter:
      type: object
      properties:
        types:
          type: array
          items:
            $ref: "#/components/schemas/v1BannerType"
          title: По типам баннеров
        appName:
          type: string
          title: |-
            Название приложения.
            # Диапазон: 1..19.
            # Паттерн: /^[0-9A-Z-]{1,19}$/
        platformType:
          title: Тип платформы
          allOf:
            - $ref: "#/components/schemas/BannerPlatformType"
        version:
          type: string
          title: |-
            Версия приложения.
            # Диапазон: 1..19.
            # Паттерн: /^[0-9A-Z-]{1,19}$/
        userTags:
          type: array
          items:
            type: string
          title: >-
            По тегам пользователя.

            Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10.

            # Диапазон: 1..20.

            # Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/
      title: Упрощённый фильтр по баннерам
    v1BannerPaging:
      type: object
      properties:
        orderByType:
          title: |-
            Тип значения сортировки.
            Если значение не передано, то будет взято значение по умолчанию.
            # По умолчанию: CHANGED_AT
          allOf:
            - $ref: "#/components/schemas/BannerPagingOrderByType"
        directionType:
          title: |-
            Тип направления сортировки.
            # По умолчанию: DESC
          allOf:
            - $ref: "#/components/schemas/BannerPagingDirectionType"
        limit:
          type: integer
          format: int32
          title: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
        offset:
          type: integer
          format: int32
          title: |-
            Сдвиг.
            # Диапазон: 0..2147483647
      title: Пагинация баннеров
    v1BannerType:
      type: string
      enum:
        - STANDARD
      description: |-
        - TYPE_UNKNOWN: Значение не указано
         - STANDARD: Стандартный баннер
      title: |-
        Справочник типов баннеров.
        # Тип: byte
    v1GetBannerCountResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего баннеров
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetBannerCountResponseError"
      title: Ответ на запрос получения количества баннеров
    v1GetBannerCountResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения количества баннеров
    v1GetBannerListResponse:
      type: object
      properties:
        data:
          title: Баннер
          allOf:
            - $ref: "#/components/schemas/v1Banner"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetBannerListResponseError"
      title: Ответ на запрос получения списка баннеров
    v1GetBannerListResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения списка баннеров
    v1GetBannerLiteListResponse:
      type: object
      properties:
        data:
          title: Упрощённый баннер
          allOf:
            - $ref: "#/components/schemas/v1BannerLite"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetBannerLiteListResponseError"
      title: Ответ на запрос получения списка упрощённых баннеров
    v1GetBannerLiteListResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения списка баннеров
    v1GetBannerLiteResponse:
      type: object
      properties:
        data:
          title: Упрощённый баннер
          allOf:
            - $ref: "#/components/schemas/v1BannerLite"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetBannerLiteResponseError"
      title: Ответ на запрос получения упрощённого баннера
    v1GetBannerLiteResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения упрощённого баннера
    v1GetBannerResponse:
      type: object
      properties:
        data:
          title: Баннер
          allOf:
            - $ref: "#/components/schemas/v1Banner"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetBannerResponseError"
      title: Ответ на запрос получения баннера
    v1GetBannerResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения баннера
    v1GetSystemStatusResponse:
      type: object
      title: Ответ на запрос проверки доступности сервиса
    v1PostBannerRequest:
      type: object
      properties:
        data:
          title: Баннер
          allOf:
            - $ref: "#/components/schemas/v1Banner"
      title: Запрос сохранения баннера
      required:
        - data
    v1PostBannerResponse:
      type: object
      properties:
        data:
          title: Баннер
          allOf:
            - $ref: "#/components/schemas/v1Banner"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostBannerResponseError"
      title: Ответ на запрос сохранения баннера
    v1PostBannerResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        saving:
          title: Ошибка сохранения
          allOf:
            - $ref: "#/components/schemas/BannerSavingError"
      title: Ошибка запроса сохранения баннера
    v1PostBannerUploadImageResponse:
      type: object
      properties:
        data:
          type: string
          title: |-
            Ссылка на баннер на imageproxy cdn сервер.
            Общедоступна в интернете
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostBannerUploadImageResponseError"
      title: Ответ на запрос загрузки картинки баннера
    v1PostBannerUploadImageResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса загрузки картинки баннера
    v1UploadImage:
      type: object
      properties:
        base64:
          type: string
          title: |-
            Картинка в формате инлайн base64.
            Обязательное.
            Пример: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA...".
            # Паттерн: /^data:\s*image\/(png|jpeg|jpg);\s*base64/
      title: Объект загружаемой картинки
      required:
        - base64
    v1ValidationError:
      type: object
      properties:
        path:
          type: string
          title: Путь к полю в формате наименования прото
        message:
          type: string
          title: Валидационное сообщение
      title: |-
        Ошибки валидации.
        Эти проверки выполняются до обращения в базу данных
      required:
        - path
        - message
  securitySchemes:
    bearerHttp:
      type: http
      scheme: bearer
      bearerFormat: JWT
    oauth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://oauth2-staging.k8s.key.rt.ru/oauth2/token
          scopes:
            banner:edit: Предоставляет полный доступ в сервис banner
            banner:read: Предоставляет доступ на чтение данных из сервиса banner
servers:
  - url: https://keyapis-staging.k8s.key.rt.ru
    description: staging
  - url: https://{feature}.k8s.key.rt.ru/
    description: https feature
    variables:
      feature:
        default: ""
        description: Feature name
  - url: http://{feature}.k8s.key.rt.ru/
    description: http feature
    variables:
      feature:
        default: ""
        description: Feature name
  - url: https://localhost:3001
    description: localhost
  - url: https://keyapis.key.rt.ru
    description: production
