openapi: 3.0.3
info:
  title: access_management
  version: 1.0.1776943279169
  description: Сервис access_management
  license:
    name: CC BY-NC-ND 4.0
    url: https://gitlab.infra.rtkit.dev/openapi/key/raw/main/LICENCE.md
tags:
  - name: group(auth)
    description: Методы group. Требуют авторизацию. Доступны из интернета
  - name: group_template(auth)
    description: Методы group_template. Требуют авторизацию. Доступны из интернета
  - name: system(public)
    description: Методы system. Не требуют авторизацию. Доступны из интернета
paths:
  /access_management/api/v1/group:
    post:
      summary: |-
        Метод сохранения группы.
        Поддерживает создание и обновление как UPSERT по Group.id.
        Метод доступен для: admin, service
      operationId: GroupService_PostGroup
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostGroupResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostGroupResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostGroupResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostGroupRequest"
        required: true
      tags:
        - group(auth)
      security:
        - oauth2:
            - access_management: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, он никогда не
            будет перенаправлен на канареечный деплой
  /access_management/api/v1/group/by_template:
    post:
      summary: |-
        Метод создания группы по шаблону.
        Метод доступен для: admin, service, bti, seller
      operationId: GroupService_PostGroupByTemplate
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostGroupByTemplateResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostGroupByTemplateResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostGroupByTemplateResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostGroupByTemplateRequest"
        required: true
      tags:
        - group(auth)
      security:
        - oauth2:
            - access_management: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, он никогда не
            будет перенаправлен на канареечный деплой
  /access_management/api/v1/group/claim/count:
    get:
      summary: >-
        Метод получения количества уникальных назначенных атрибутов
        пользователя.

        Метод также сосчитает и атрибуты групп {key=GROUP_ID,value=Group.id}.

        Бизнес-пользователи получают только свои разрешения, поэтому для всех пользователей, кроме admin, owner, service, bti, seller игнорируются GroupClaimFilter.user_id, GroupClaimFilter.user_data, GroupClaimFilter.api_key_hash, а значения для них берутся из токена.

        Для admin, owner, service, bti, seller при наличии GroupClaimFilter.user_id отдаем разрешения для указанного GroupClaimFilter.user_id и GroupClaimFilter.user_data, при отсутствии GroupClaimFilter.user_id значения берутся из токена.

        Для admin, service при наличии GroupClaimFilter.api_key_hash возвращаем Claim с учетом только GroupClaimFilter.api_key_hash.

        Метод доступен для: admin, master, slave, owner, employee, service, bti, seller, external_seller, ltp_first, mrf, manager
      operationId: GroupService_GetGroupClaimCount
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupClaimCountResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.userId
          description: |-
            По идентификатору пользователя.
            Соответствует subject, sub из JWT.
            Для пользователя Ключа это user_id Ключа
          in: query
          required: false
          schema:
            type: string
        - name: filter.apiKeyHash
          description: Хешированное SHA256 значение ключа доступа ApiKey
          in: query
          required: false
          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:
        - group(auth)
      security:
        - oauth2:
            - access_management:read
            - access_management:edit
          bearerHttp: []
  /access_management/api/v1/group/claim/exist:
    get:
      summary: >-
        Метод проверки наличия назначенных атрибутов пользователя.

        Метод также проверит и атрибуты групп {key=GROUP_ID,value=Group.id}.

        Бизнес-пользователи получают только свои разрешения, поэтому для всех пользователей, кроме admin, owner, service, bti, seller игнорируются GroupClaimFilter.user_id, GroupClaimFilter.user_data, GroupClaimFilter.api_key_hash, а значения для них берутся из токена.

        Для admin, owner, service, bti, seller при наличии GroupClaimFilter.user_id отдаем разрешения для указанного GroupClaimFilter.user_id и GroupClaimFilter.user_data, при отсутствии GroupClaimFilter.user_id значения берутся из токена.

        Для admin, service при наличии GroupClaimFilter.api_key_hash возвращаем Claim с учетом только GroupClaimFilter.api_key_hash.

        Метод доступен для: admin, master, slave, owner, employee, service, bti, seller, external_seller, ltp_first, mrf, manager
      operationId: GroupService_GetGroupClaimExist
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupClaimExistResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupClaimExistResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupClaimExistResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.userId
          description: |-
            По идентификатору пользователя.
            Соответствует subject, sub из JWT.
            Для пользователя Ключа это user_id Ключа
          in: query
          required: false
          schema:
            type: string
        - name: filter.apiKeyHash
          description: Хешированное SHA256 значение ключа доступа ApiKey
          in: query
          required: false
          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:
        - group(auth)
      security:
        - oauth2:
            - access_management:read
            - access_management:edit
          bearerHttp: []
  /access_management/api/v1/group/claim/list:
    get:
      summary: >-
        Метод получения уникальных назначенных атрибутов пользователя.

        Метод также возвращает группы пользователя в виде атрибута (Claim) {key=GROUP_ID,value=Group.id}.

        Бизнес-пользователи получают только свои разрешения, поэтому для всех пользователей, кроме admin, owner, service, bti, seller игнорируются GroupClaimFilter.user_id, GroupClaimFilter.user_data, GroupClaimFilter.api_key_hash, а значения для них берутся из токена.

        Для admin, owner, service, bti, seller при наличии GroupClaimFilter.user_id отдаем разрешения для указанного GroupClaimFilter.user_id и GroupClaimFilter.user_data, при отсутствии GroupClaimFilter.user_id значения берутся из токена.

        Для admin, service при наличии GroupClaimFilter.api_key_hash возвращаем Claim с учетом только GroupClaimFilter.api_key_hash.

        Метод доступен для: admin, master, slave, owner, employee, service, bti, seller, external_seller, ltp_first, mrf, manager
      operationId: GroupService_GetGroupClaimList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    $ref: "#/components/schemas/v1GetGroupClaimListResponse"
                  error:
                    $ref: "#/components/schemas/rpcStatus"
                title: Поток объектов v1GetGroupClaimListResponse
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.userId
          description: |-
            По идентификатору пользователя.
            Соответствует subject, sub из JWT.
            Для пользователя Ключа это user_id Ключа
          in: query
          required: false
          schema:
            type: string
        - name: filter.apiKeyHash
          description: Хешированное SHA256 значение ключа доступа ApiKey
          in: query
          required: false
          schema:
            type: string
        - name: paging.orderByType
          description: |-
            Тип значения сортировки.
            Если значение не передано, то будет взято значение по умолчанию.
            # По умолчанию: KEY

             - ORDER_BY_TYPE_UNKNOWN: Значение не указано
             - KEY: По ключу атрибута
             - VALUE: По значению атрибута
          in: query
          required: false
          schema:
            type: string
            enum:
              - KEY
              - VALUE
        - 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:
        - group(auth)
      security:
        - oauth2:
            - access_management:read
            - access_management:edit
          bearerHttp: []
  /access_management/api/v1/group/count:
    get:
      summary: |-
        Метод получения количества групп.
        Метод доступен для: admin, service, bti, seller
      operationId: GroupService_GetGroupCount
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupCountResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupCountResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupCountResponse"
        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.tags
          description: |-
            По тегам.
            # Диапазон: 0..10
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: filter.hideDeleted
          description: >-
            Скрывать удалённые элементы.

            Если значение — true, возвращаются только записи, у которых deleted_at = null или deleted_at > текущего времени.

            Если значение — false или не задано, возвращаются все записи, включая удалённые
          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:
        - group(auth)
      security:
        - oauth2:
            - access_management:read
            - access_management:edit
          bearerHttp: []
  /access_management/api/v1/group/list:
    get:
      summary: |-
        Метод получения списка групп.
        Метод доступен для: admin, service, bti, seller
      operationId: GroupService_GetGroupList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    $ref: "#/components/schemas/v1GetGroupListResponse"
                  error:
                    $ref: "#/components/schemas/rpcStatus"
                title: Поток объектов v1GetGroupListResponse
        "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.tags
          description: |-
            По тегам.
            # Диапазон: 0..10
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: filter.hideDeleted
          description: >-
            Скрывать удалённые элементы.

            Если значение — true, возвращаются только записи, у которых deleted_at = null или deleted_at > текущего времени.

            Если значение — false или не задано, возвращаются все записи, включая удалённые
          in: query
          required: false
          schema:
            type: boolean
        - name: paging.orderByType
          description: |-
            Тип значения сортировки.
            Если значение не передано, то будет взято значение по умолчанию.
            # По умолчанию: ID

             - ORDER_BY_TYPE_UNKNOWN: Значение не указано
             - ID: По идентификатору
             - TITLE: По наименованию
          in: query
          required: false
          schema:
            type: string
            enum:
              - ID
              - TITLE
        - 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:
        - group(auth)
      security:
        - oauth2:
            - access_management:read
            - access_management:edit
          bearerHttp: []
  /access_management/api/v1/group/user/count:
    get:
      summary: |-
        Метод получения количества связей пользователей и групп.
        Метод доступен для: admin, owner, service, bti, seller
      operationId: GroupService_GetGroupUserCount
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupUserCountResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.groupIds
          description: По Идентификаторам группы
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: filter.userIds
          description: По Идентификаторам пользователя
          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:
        - group(auth)
      security:
        - oauth2:
            - access_management:read
            - access_management:edit
          bearerHttp: []
  /access_management/api/v1/group/user/list:
    get:
      summary: |-
        Метод получения списка связей пользователей и групп.
        Метод доступен для: admin, owner, service, bti, seller
      operationId: GroupService_GetGroupUserList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    $ref: "#/components/schemas/v1GetGroupUserListResponse"
                  error:
                    $ref: "#/components/schemas/rpcStatus"
                title: Поток объектов v1GetGroupUserListResponse
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.groupIds
          description: По Идентификаторам группы
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: filter.userIds
          description: По Идентификаторам пользователя
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: paging.orderByType
          description: |-
            Тип значения сортировки.
            По умолчанию: ID

             - ORDER_BY_TYPE_UNKNOWN: Значение не указано
             - GROUP_ID: По Идентификатору группы
             - USER_ID: По Идентификатору пользователя
          in: query
          required: false
          schema:
            type: string
            enum:
              - GROUP_ID
              - USER_ID
        - name: paging.directionType
          description: |-
            Тип направления сортировки.
            По умолчанию: DESC

             - DIRECTION_TYPE_UNKNOWN: Значение не указано
             - DESC: От большего к меньшему
             - ASC: От меньшего к большему
          in: query
          required: false
          schema:
            type: string
            enum:
              - DESC
              - ASC
        - name: paging.limit
          description: |-
            Количество записей на страницу.
            Минимальное значение: 1.
            Максимальное значение: 100.
            По умолчанию: 20.
            Если значение 0 (не передано), то выставляем значение по умолчанию
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: paging.offset
          description: |-
            Сдвиг.
            По умолчанию: 0
          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:
        - group(auth)
      security:
        - oauth2:
            - access_management:read
            - access_management:edit
          bearerHttp: []
  "/access_management/api/v1/group/{groupId}/api_key/create":
    put:
      summary: |-
        Метод добавления ключа доступа ApiKey.
        Метод доступен для: admin
      operationId: GroupService_PutGroupApiKeyCreate
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PutGroupApiKeyCreateResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: groupId
          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:
        - group(auth)
      security:
        - oauth2:
            - access_management:edit
          bearerHttp: []
  "/access_management/api/v1/group/{groupId}/api_key/delete":
    put:
      summary: |-
        Метод удаления ключей доступа ApiKey.
        Метод доступен для: admin
      operationId: GroupService_PutGroupApiKeyDelete
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PutGroupApiKeyDeleteResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: groupId
          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:
        - group(auth)
      security:
        - oauth2:
            - access_management:edit
          bearerHttp: []
  "/access_management/api/v1/group/{id}":
    get:
      summary: |-
        Метод получения группы.
        Метод доступен для: admin, service, bti, seller
      operationId: GroupService_GetGroup
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupResponse"
        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:
        - group(auth)
      security:
        - oauth2:
            - access_management:read
            - access_management:edit
          bearerHttp: []
    delete:
      summary: |-
        Метод удаления группы.
        Метод доступен для: admin, service
      operationId: GroupService_DeleteGroup
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteGroupResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          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:
        - group(auth)
      security:
        - oauth2:
            - access_management:edit
          bearerHttp: []
  "/access_management/api/v1/group/{userGroup.groupId}/user/{userGroup.userId}/attach":
    put:
      summary: |-
        Метод привязки пользователя к группе.
        Метод доступен для: admin, owner, service, bti, seller
      operationId: GroupService_PutGroupUserAttach
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PutGroupUserAttachResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: userGroup.groupId
          description: |-
            Идентификатор группы.
            # Тип: Guid
          in: path
          required: true
          schema:
            type: string
        - name: userGroup.userId
          description: |-
            Идентификатор пользователя.
            Соответствует subject, sub, client_id из JWT.
            # Диапазон: 3..256
          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:
        - group(auth)
      security:
        - oauth2:
            - access_management:edit
          bearerHttp: []
  "/access_management/api/v1/group/{userGroup.groupId}/user/{userGroup.userId}/detach":
    put:
      summary: |-
        Метод удаления привязки пользователя к группе.
        Метод доступен для: admin, owner, service, bti, seller
      operationId: GroupService_PutGroupUserDetach
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PutGroupUserDetachResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: userGroup.groupId
          description: |-
            Идентификатор группы.
            # Тип: Guid
          in: path
          required: true
          schema:
            type: string
        - name: userGroup.userId
          description: |-
            Идентификатор пользователя.
            Соответствует subject, sub, client_id из JWT.
            # Диапазон: 3..256
          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:
        - group(auth)
      security:
        - oauth2:
            - access_management:edit
          bearerHttp: []
  /access_management/api/v1/group_template:
    post:
      summary: |-
        Метод сохранения шаблона группы.
        Поддерживает создание и обновление как UPSERT по GroupTemplate.id.
        Метод доступен для: admin, service
      operationId: GroupTemplateService_PostGroupTemplate
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostGroupTemplateResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostGroupTemplateResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostGroupTemplateResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostGroupTemplateRequest"
        required: true
      tags:
        - group_template(auth)
      security:
        - oauth2:
            - access_management: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, он никогда не
            будет перенаправлен на канареечный деплой
  /access_management/api/v1/group_template/count:
    get:
      summary: |-
        Метод получения количества шаблонов групп.
        Метод доступен для: admin, service, bti, seller
      operationId: GroupTemplateService_GetGroupTemplateCount
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupTemplateCountResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupTemplateCountResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupTemplateCountResponse"
        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.tags
          description: |-
            По тегам.
            # Диапазон: 0..10
          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:
        - group_template(auth)
      security:
        - oauth2:
            - access_management:read
            - access_management:edit
          bearerHttp: []
  /access_management/api/v1/group_template/group/count:
    get:
      summary: |-
        Метод получения количества связей шаблонов групп и группы пользователя.
        Метод доступен для: admin, service
      operationId: GroupTemplateService_GetGroupTemplateGroupCount
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupTemplateGroupCountResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.groupIds
          description: По Идентификатору группы пользователя
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: filter.groupTemplateIds
          description: По шаблону группы
          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:
        - group_template(auth)
      security:
        - oauth2:
            - access_management:read
            - access_management:edit
          bearerHttp: []
  /access_management/api/v1/group_template/group/list:
    get:
      summary: |-
        Метод получения списка связей шаблонов групп и группы пользователя.
        Метод доступен для: admin, service
      operationId: GroupTemplateService_GetGroupTemplateGroupList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    $ref: "#/components/schemas/v1GetGroupTemplateGroupListResponse"
                  error:
                    $ref: "#/components/schemas/rpcStatus"
                title: Поток объектов v1GetGroupTemplateGroupListResponse
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.groupIds
          description: По Идентификатору группы пользователя
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: filter.groupTemplateIds
          description: По шаблону группы
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: paging.orderByType
          description: |-
            Тип значения сортировки.
            По умолчанию: ID

             - ORDER_BY_TYPE_UNKNOWN: Значение не указано
             - GROUP_ID: По Идентификатору группы пользователя
             - GROUP_TEMPLATE_ID: По шаблону групп
          in: query
          required: false
          schema:
            type: string
            enum:
              - GROUP_ID
              - GROUP_TEMPLATE_ID
        - name: paging.directionType
          description: |-
            Тип направления сортировки.
            По умолчанию: DESC

             - DIRECTION_TYPE_UNKNOWN: Значение не указано
             - DESC: От большего к меньшему
             - ASC: От меньшего к большему
          in: query
          required: false
          schema:
            type: string
            enum:
              - DESC
              - ASC
        - name: paging.limit
          description: |-
            Количество записей на страницу.
            Минимальное значение: 1.
            Максимальное значение: 100.
            По умолчанию: 20.
            Если значение 0 (не передано), то выставляем значение по умолчанию
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: paging.offset
          description: |-
            Сдвиг.
            По умолчанию: 0
          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:
        - group_template(auth)
      security:
        - oauth2:
            - access_management:read
            - access_management:edit
          bearerHttp: []
  /access_management/api/v1/group_template/list:
    get:
      summary: |-
        Метод получения списка шаблонов групп.
        Метод доступен для: admin, service, bti, seller
      operationId: GroupTemplateService_GetGroupTemplateList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    $ref: "#/components/schemas/v1GetGroupTemplateListResponse"
                  error:
                    $ref: "#/components/schemas/rpcStatus"
                title: Поток объектов v1GetGroupTemplateListResponse
        "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.tags
          description: |-
            По тегам.
            # Диапазон: 0..10
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: paging.orderByType
          description: |-
            Тип значения сортировки.
            Если значение не передано, то будет взято значение по умолчанию.
            # По умолчанию: ID

             - ORDER_BY_TYPE_UNKNOWN: Значение не указано
             - ID: По идентификатору
             - TITLE: По наименованию
          in: query
          required: false
          schema:
            type: string
            enum:
              - ID
              - TITLE
        - 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:
        - group_template(auth)
      security:
        - oauth2:
            - access_management:read
            - access_management:edit
          bearerHttp: []
  "/access_management/api/v1/group_template/{groupTemplateGroup.groupTemplateId}/group/{groupTemplateGroup.groupId}/attach":
    put:
      summary: |-
        Метод сохранения связей шаблонов групп и группы пользователя.
        Метод доступен для: admin, service
      operationId: GroupTemplateService_PutGroupTemplateGroupAttach
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PutGroupTemplateGroupAttachResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: groupTemplateGroup.groupTemplateId
          description: |-
            Идентификатор шаблона группы.
            # Тип: Guid
          in: path
          required: true
          schema:
            type: string
        - name: groupTemplateGroup.groupId
          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:
        - group_template(auth)
      security:
        - oauth2:
            - access_management:edit
          bearerHttp: []
  "/access_management/api/v1/group_template/{groupTemplateGroup.groupTemplateId}/group/{groupTemplateGroup.groupId}/detach":
    put:
      summary: |-
        Метод удаления связей шаблонов групп и группы пользователя.
        Метод доступен для: admin, service
      operationId: GroupTemplateService_PutGroupTemplateGroupDetach
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PutGroupTemplateGroupDetachResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: groupTemplateGroup.groupTemplateId
          description: |-
            Идентификатор шаблона группы.
            # Тип: Guid
          in: path
          required: true
          schema:
            type: string
        - name: groupTemplateGroup.groupId
          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:
        - group_template(auth)
      security:
        - oauth2:
            - access_management:edit
          bearerHttp: []
  "/access_management/api/v1/group_template/{id}":
    get:
      summary: |-
        Метод получения шаблона группы.
        Метод доступен для: admin, service, bti, seller
      operationId: GroupTemplateService_GetGroupTemplate
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupTemplateResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupTemplateResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetGroupTemplateResponse"
        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:
        - group_template(auth)
      security:
        - oauth2:
            - access_management:read
            - access_management:edit
          bearerHttp: []
    delete:
      summary: |-
        Метод удаления шаблона группы.
        Проставляет дату удаления GroupTemplate.deleted_at.
        Метод доступен для: admin, service
      operationId: GroupTemplateService_DeleteGroupTemplate
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteGroupTemplateResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          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:
        - group_template(auth)
      security:
        - oauth2:
            - access_management:edit
          bearerHttp: []
  /access_management/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:
    ErrorClaimFilterEmptyError:
      type: object
      title: Ошибка пустого фильтра по атрибутам пользователя
    GroupClaimFilterUserData:
      type: object
      properties:
        claims:
          type: object
          additionalProperties:
            type: string
          title: Атрибуты пользователя, claims которого мы хотим получить
      title: Условие принадлежности к группе
    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: Ошибка транспортного слоя
    v1Claim:
      type: object
      properties:
        key:
          type: string
          title: Ключ атрибута
        value:
          type: string
          title: Значение атрибута
      title: Атрибут пользователя
      required:
        - key
    v1DeleteGroupResponse:
      type: object
      title: Ответ на запрос удаления группы
    v1DeleteGroupTemplateResponse:
      type: object
      title: Ответ на запрос удаления группы
    v1GetGroupClaimCountResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего уникальных атрибутов пользователя
      title: Ответ на запрос получения количества уникальных назначенных атрибутов
        пользователя
    v1GetGroupClaimExistResponse:
      type: object
      properties:
        data:
          type: boolean
          title: Флаг наличия
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetGroupClaimExistResponseError"
      title: Ответ на запрос проверки назначенных атрибутов пользователя
    v1GetGroupClaimExistResponseError:
      type: object
      properties:
        claimFilterEmpty:
          title: Ошибка пустого фильтра по атрибутам пользователя
          allOf:
            - $ref: "#/components/schemas/ErrorClaimFilterEmptyError"
      title: Ошибка запроса
    v1GetGroupClaimListResponse:
      type: object
      properties:
        data:
          title: Атрибут пользователя
          allOf:
            - $ref: "#/components/schemas/v1Claim"
      title: Ответ на запрос уникального списка назначенных атрибутов пользователя
    v1GetGroupCountResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего групп
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetGroupCountResponseError"
      title: Ответ на запрос получения количества групп
    v1GetGroupCountResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения количества групп
    v1GetGroupListResponse:
      type: object
      properties:
        data:
          title: Группа
          allOf:
            - $ref: "#/components/schemas/v1Group"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetGroupListResponseError"
      title: Ответ на запрос получения списка групп
    v1GetGroupListResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения списка групп
    v1GetGroupResponse:
      type: object
      properties:
        data:
          title: Группа
          allOf:
            - $ref: "#/components/schemas/v1Group"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetGroupResponseError"
      title: Ответ на запрос получения группы
    v1GetGroupResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения группы
    v1GetGroupTemplateCountResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего шаблонов групп
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetGroupTemplateCountResponseError"
      title: Ответ на запрос получения количества шаблонов групп
    v1GetGroupTemplateCountResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения количества шаблонов групп
    v1GetGroupTemplateGroupCountResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего связей шаблонов групп и группы пользователя
      title: Ответ на запрос получения количества связей шаблонов групп и группы
        пользователя
    v1GetGroupTemplateGroupListResponse:
      type: object
      properties:
        data:
          title: Связь шаблона группы и группы пользователя
          allOf:
            - $ref: "#/components/schemas/v1GroupTemplateGroup"
      title: Ответ на запрос получения списка связей шаблонов групп и группы
        пользователя
    v1GetGroupTemplateListResponse:
      type: object
      properties:
        data:
          title: Шаблон группы
          allOf:
            - $ref: "#/components/schemas/v1GroupTemplate"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetGroupTemplateListResponseError"
      title: Ответ на запрос получения списка шаблонов групп
    v1GetGroupTemplateListResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения списка шаблонов групп
    v1GetGroupTemplateResponse:
      type: object
      properties:
        data:
          title: Шаблон группы
          allOf:
            - $ref: "#/components/schemas/v1GroupTemplate"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetGroupTemplateResponseError"
      title: Ответ на запрос получения шаблона группы
    v1GetGroupTemplateResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения шаблона группы
    v1GetGroupUserCountResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего связей пользователей и групп
      title: Ответ на запрос получения количества связей пользователей и групп
    v1GetGroupUserListResponse:
      type: object
      properties:
        data:
          title: Связь пользователя и группы
          allOf:
            - $ref: "#/components/schemas/v1UserGroup"
      title: Ответ на запрос получения списка связей пользователей и групп
    v1GetSystemStatusResponse:
      type: object
      title: Ответ на запрос проверки доступности сервиса
    v1Group:
      type: object
      properties:
        id:
          type: string
          title: |-
            Идентификатор группы.
            # Тип: Guid
        title:
          type: string
          title: |-
            Наименование.
            # Диапазон: 3..256
        description:
          type: string
          title: |-
            Описание.
            # Диапазон: 3..256
        claims:
          type: array
          items:
            $ref: "#/components/schemas/v1Claim"
          title: |-
            Массив атрибутов группы.
            Эти атрибуты назначены пользователям, которые принадлежат группе.
            # Диапазон: 0..100
        requirements:
          type: array
          items:
            $ref: "#/components/schemas/v1Claim"
          title: >-
            Требования, означающие принадлежность пользователя к данной группе.

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

            # Диапазон: 0..10
        deletedAt:
          type: string
          format: date-time
          title: >-
            Дата удаления группы из использования.

            Группа не участвует в определении разрешений пользователя, если дата deleted_at непустая и уже в прошлом
        tags:
          type: array
          items:
            type: string
          title: |-
            Теги группы.
            # Диапазон: 0..10
      title: Группа атрибутов пользователя
      required:
        - title
    v1GroupClaimFilter:
      type: object
      properties:
        userId:
          type: string
          title: |-
            По идентификатору пользователя.
            Соответствует subject, sub из JWT.
            Для пользователя Ключа это user_id Ключа
        claims:
          type: object
          additionalProperties:
            type: string
          title: >-
            По назначенным атрибутам пользователя.

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

            Возвращаем атрибуты групп, у которых Claim.key=claims[n].key И (Claim.value=claims[n].value ИЛИ claims[n].value пустой).

            При пустом GroupClaimFilter.claims не ограничиваем выдачу, отдаем все Claims, назначенные пользователю
        userData:
          title: >-
            По условию принадлежности к группе.

            Пользователь принадлежит группе, если user_data полностью удовлетворяет требованиям группы, то есть user_data содержит в себе Group.requirements целиком
          allOf:
            - $ref: "#/components/schemas/GroupClaimFilterUserData"
        apiKeyHash:
          type: string
          title: Хешированное SHA256 значение ключа доступа ApiKey
      title: Фильтр атрибутов пользователя
    v1GroupClaimPaging:
      type: object
      properties:
        orderByType:
          title: |-
            Тип значения сортировки.
            Если значение не передано, то будет взято значение по умолчанию.
            # По умолчанию: KEY
          allOf:
            - $ref: "#/components/schemas/v1GroupClaimPagingOrderByType"
        directionType:
          title: |-
            Тип направления сортировки.
            # По умолчанию: DESC
          allOf:
            - $ref: "#/components/schemas/v1GroupClaimPagingDirectionType"
        limit:
          type: integer
          format: int32
          title: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
        offset:
          type: integer
          format: int32
          title: |-
            Сдвиг.
            # Диапазон: 0..2147483647
      title: Пагинация атрибутов пользователя
    v1GroupClaimPagingDirectionType:
      type: string
      enum:
        - DESC
        - ASC
      description: |-
        - DIRECTION_TYPE_UNKNOWN: Значение не указано
         - DESC: От большего к меньшему
         - ASC: От меньшего к большему
      title: |-
        Справочник типов направлений сортировки.
        # Тип: byte
    v1GroupClaimPagingOrderByType:
      type: string
      enum:
        - KEY
        - VALUE
      description: |-
        - ORDER_BY_TYPE_UNKNOWN: Значение не указано
         - KEY: По ключу атрибута
         - VALUE: По значению атрибута
      title: |-
        Справочник типов значений сортировки.
        # Тип: byte
    v1GroupFilter:
      type: object
      properties:
        text:
          type: string
          title: |-
            По тексту.
            Если значение не передано то поиск по нему не производится.
            # Диапазон: 3..64.
            # Поиск производится по полям:
            # - Наименование
        requirements:
          type: object
          additionalProperties:
            type: string
          title: >-
            По requirements группы.

            Возвращаем группы, у которых Group.requirements.key=GroupFilter.requirements[n].key И Group.requirements.value=GroupFilter.requirements[n].value.

            При пустом GroupFilter.requirements[n].value возвращаем все группы, у которых Group.requirements.key=GroupFilter.requirements[n].key.

            При передаче нескольких элементов map они работают в выборке через И
        claims:
          type: object
          additionalProperties:
            type: string
          title: >-
            По claims группы.

            Возвращаем группы, у которых Group.claim.key=GroupFilter.claims[n].key И Group.claims.value=GroupFilter.claims[n].value.

            При пустом GroupFilter.claims[n].value возвращаем все группы, у которых Group.claims.key=GroupFilter.claims[n].key.

            При передаче нескольких элементов map они работают в выборке через И
        tags:
          type: array
          items:
            type: string
          title: |-
            По тегам.
            # Диапазон: 0..10
        hideDeleted:
          type: boolean
          title: >-
            Скрывать удалённые элементы.

            Если значение — true, возвращаются только записи, у которых deleted_at = null или deleted_at > текущего времени.

            Если значение — false или не задано, возвращаются все записи, включая удалённые
      title: Фильтр групп
    v1GroupPaging:
      type: object
      properties:
        orderByType:
          title: |-
            Тип значения сортировки.
            Если значение не передано, то будет взято значение по умолчанию.
            # По умолчанию: ID
          allOf:
            - $ref: "#/components/schemas/v1GroupPagingOrderByType"
        directionType:
          title: |-
            Тип направления сортировки.
            # По умолчанию: DESC
          allOf:
            - $ref: "#/components/schemas/v1GroupPagingDirectionType"
        limit:
          type: integer
          format: int32
          title: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
        offset:
          type: integer
          format: int32
          title: |-
            Сдвиг.
            # Диапазон: 0..2147483647
      title: Пагинация групп
    v1GroupPagingDirectionType:
      type: string
      enum:
        - DESC
        - ASC
      description: |-
        - DIRECTION_TYPE_UNKNOWN: Значение не указано
         - DESC: От большего к меньшему
         - ASC: От меньшего к большему
      title: |-
        Справочник типов направлений сортировки.
        # Тип: byte
    v1GroupPagingOrderByType:
      type: string
      enum:
        - ID
        - TITLE
      description: |-
        - ORDER_BY_TYPE_UNKNOWN: Значение не указано
         - ID: По идентификатору
         - TITLE: По наименованию
      title: |-
        Справочник типов значений сортировки.
        # Тип: byte
    v1GroupTemplate:
      type: object
      properties:
        id:
          type: string
          title: |-
            Идентификатор шаблона группы.
            # Тип: Guid
        title:
          type: string
          title: |-
            Наименование шаблона группы.
            # Диапазон: 3..256
        groupTitleSuffix:
          type: string
          title: |-
            Суффикс наименования группы.
            # Диапазон: 3..256
        description:
          type: string
          title: |-
            Описание шаблона группы.
            # Диапазон: 3..256
        claims:
          type: array
          items:
            $ref: "#/components/schemas/v1Claim"
          title: |-
            Массив атрибутов группы.
            Эти атрибуты назначены пользователям, которые принадлежат группе.
            # Диапазон: 0..100
        requirements:
          type: array
          items:
            $ref: "#/components/schemas/v1Claim"
          title: >-
            Требования, означающие принадлежность пользователя к данной группе.

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

            # Диапазон: 0..10
        tags:
          type: array
          items:
            type: string
          title: |-
            Теги шаблона группы.
            # Диапазон: 0..10
      title: Шаблон группы пользователей
      required:
        - title
        - groupTitleSuffix
    v1GroupTemplateFilter:
      type: object
      properties:
        text:
          type: string
          title: |-
            По тексту.
            Если значение не передано то поиск по нему не производится.
            # Диапазон: 3..64.
            # Поиск производится по полям:
            # - Наименование
        tags:
          type: array
          items:
            type: string
          title: |-
            По тегам.
            # Диапазон: 0..10
      title: >-
        Фильтр шаблонов групп.

        При передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.

        При передаче нескольких разных параметров фильтра они работают в выборке через И
    v1GroupTemplateGroup:
      type: object
      properties:
        groupId:
          type: string
          title: |-
            Идентификатор группы.
            # Тип: Guid
        groupTemplateId:
          type: string
          title: |-
            Идентификатор шаблона группы.
            # Тип: Guid
      title: |-
        Связка шаблона группы и группы пользователя.
        Задает область ресурсов (resource scope), доступную пользователю.
        Используется для контроля доступа к шаблону группы
      required:
        - groupId
        - groupTemplateId
    v1GroupTemplateGroupFilter:
      type: object
      properties:
        groupIds:
          type: array
          items:
            type: string
          title: По Идентификатору группы пользователя
        groupTemplateIds:
          type: array
          items:
            type: string
          title: По шаблону группы
      title: >-
        Фильтр для запроса связей шаблона группы и группы пользователя.

        При передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.

        При передаче нескольких разных параметров фильтра они работают в выборке через И
    v1GroupTemplateGroupPaging:
      type: object
      properties:
        orderByType:
          title: |-
            Тип значения сортировки.
            По умолчанию: ID
          allOf:
            - $ref: "#/components/schemas/v1GroupTemplateGroupPagingOrderByType"
        directionType:
          title: |-
            Тип направления сортировки.
            По умолчанию: DESC
          allOf:
            - $ref: "#/components/schemas/v1GroupTemplateGroupPagingDirectionType"
        limit:
          type: integer
          format: int32
          title: |-
            Количество записей на страницу.
            Минимальное значение: 1.
            Максимальное значение: 100.
            По умолчанию: 20.
            Если значение 0 (не передано), то выставляем значение по умолчанию
        offset:
          type: integer
          format: int32
          title: |-
            Сдвиг.
            По умолчанию: 0
      title: Пагинация шаблонов групп и группы пользователя
    v1GroupTemplateGroupPagingDirectionType:
      type: string
      enum:
        - DESC
        - ASC
      description: |-
        - DIRECTION_TYPE_UNKNOWN: Значение не указано
         - DESC: От большего к меньшему
         - ASC: От меньшего к большему
      title: Справочник типов направлений сортировки
    v1GroupTemplateGroupPagingOrderByType:
      type: string
      enum:
        - GROUP_ID
        - GROUP_TEMPLATE_ID
      description: |-
        - ORDER_BY_TYPE_UNKNOWN: Значение не указано
         - GROUP_ID: По Идентификатору группы пользователя
         - GROUP_TEMPLATE_ID: По шаблону групп
      title: Справочник типов сортировки
    v1GroupTemplateNotFoundError:
      type: object
      properties:
        groupTemplateId:
          type: string
          title: Идентификатор шаблона группы, который не найден
        message:
          type: string
          title: Сообщение
      title: Ошибки создания группы по шаблону
      required:
        - groupTemplateId
        - message
    v1GroupTemplatePaging:
      type: object
      properties:
        orderByType:
          title: |-
            Тип значения сортировки.
            Если значение не передано, то будет взято значение по умолчанию.
            # По умолчанию: ID
          allOf:
            - $ref: "#/components/schemas/v1GroupTemplatePagingOrderByType"
        directionType:
          title: |-
            Тип направления сортировки.
            # По умолчанию: DESC
          allOf:
            - $ref: "#/components/schemas/v1GroupTemplatePagingDirectionType"
        limit:
          type: integer
          format: int32
          title: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
        offset:
          type: integer
          format: int32
          title: |-
            Сдвиг.
            # Диапазон: 0..2147483647
      title: Пагинация шаблонов групп
    v1GroupTemplatePagingDirectionType:
      type: string
      enum:
        - DESC
        - ASC
      description: |-
        - DIRECTION_TYPE_UNKNOWN: Значение не указано
         - DESC: От большего к меньшему
         - ASC: От меньшего к большему
      title: |-
        Справочник типов направлений сортировки.
        # Тип: byte
    v1GroupTemplatePagingOrderByType:
      type: string
      enum:
        - ID
        - TITLE
      description: |-
        - ORDER_BY_TYPE_UNKNOWN: Значение не указано
         - ID: По идентификатору
         - TITLE: По наименованию
      title: |-
        Справочник типов значений сортировки.
        # Тип: byte
    v1GroupUserFilter:
      type: object
      properties:
        groupIds:
          type: array
          items:
            type: string
          title: По Идентификаторам группы
        userIds:
          type: array
          items:
            type: string
          title: По Идентификаторам пользователя
      title: >-
        Фильтр для запроса связей пользователей и групп.

        При передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.

        При передаче нескольких разных параметров фильтра они работают в выборке через И
    v1GroupUserPaging:
      type: object
      properties:
        orderByType:
          title: |-
            Тип значения сортировки.
            По умолчанию: ID
          allOf:
            - $ref: "#/components/schemas/v1GroupUserPagingOrderByType"
        directionType:
          title: |-
            Тип направления сортировки.
            По умолчанию: DESC
          allOf:
            - $ref: "#/components/schemas/v1GroupUserPagingDirectionType"
        limit:
          type: integer
          format: int32
          title: |-
            Количество записей на страницу.
            Минимальное значение: 1.
            Максимальное значение: 100.
            По умолчанию: 20.
            Если значение 0 (не передано), то выставляем значение по умолчанию
        offset:
          type: integer
          format: int32
          title: |-
            Сдвиг.
            По умолчанию: 0
      title: Пагинация связей пользователей и групп
    v1GroupUserPagingDirectionType:
      type: string
      enum:
        - DESC
        - ASC
      description: |-
        - DIRECTION_TYPE_UNKNOWN: Значение не указано
         - DESC: От большего к меньшему
         - ASC: От меньшего к большему
      title: Справочник типов направлений сортировки
    v1GroupUserPagingOrderByType:
      type: string
      enum:
        - GROUP_ID
        - USER_ID
      description: |-
        - ORDER_BY_TYPE_UNKNOWN: Значение не указано
         - GROUP_ID: По Идентификатору группы
         - USER_ID: По Идентификатору пользователя
      title: Справочник типов сортировки
    v1PostGroupByTemplateRequest:
      type: object
      properties:
        groupTemplateId:
          type: string
          title: |-
            Идентификатор шаблона группы.
            # Тип: Guid
        groupTitle:
          type: string
          title: >-
            Наименование создаваемой по шаблону группы.

            В наименование группы будет добавлен суффикс GroupTemplate.group_title_suffix.

            # Диапазон: 3..256
        groupRequirements:
          type: array
          items:
            $ref: "#/components/schemas/v1Claim"
          title: >-
            Специфичные для создаваемой по шаблону группы Claim requirements,
            они будут добавлены к requirements создаваемой по шаблону группы.

            # Диапазон: 0..10
      title: Запрос создания группы по шаблону
      required:
        - groupTemplateId
        - groupTitle
    v1PostGroupByTemplateResponse:
      type: object
      properties:
        data:
          title: Группа
          allOf:
            - $ref: "#/components/schemas/v1Group"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostGroupByTemplateResponseError"
      title: Ответ на запрос создания группы по шаблону
    v1PostGroupByTemplateResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        groupTemplateNotFoundError:
          title: Шаблон не найден
          allOf:
            - $ref: "#/components/schemas/v1GroupTemplateNotFoundError"
      title: Ошибка запроса создания группы
    v1PostGroupRequest:
      type: object
      properties:
        data:
          title: Группа
          allOf:
            - $ref: "#/components/schemas/v1Group"
      title: Запрос сохранения группы
      required:
        - data
    v1PostGroupResponse:
      type: object
      properties:
        data:
          title: Группа
          allOf:
            - $ref: "#/components/schemas/v1Group"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostGroupResponseError"
      title: Ответ на запрос сохранения группы
    v1PostGroupResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса сохранения группы
    v1PostGroupTemplateRequest:
      type: object
      properties:
        data:
          title: Шаблон группы
          allOf:
            - $ref: "#/components/schemas/v1GroupTemplate"
      title: Запрос сохранения шаблона группы
      required:
        - data
    v1PostGroupTemplateResponse:
      type: object
      properties:
        data:
          title: Шаблон группы
          allOf:
            - $ref: "#/components/schemas/v1GroupTemplate"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostGroupTemplateResponseError"
      title: Ответ на запрос сохранения шаблона группы
    v1PostGroupTemplateResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса сохранения шаблона группы
    v1PutGroupApiKeyCreateResponse:
      type: object
      properties:
        data:
          type: string
          title: |-
            Значение ключа доступа ApiKey.
            # Тип: Guid
      title: Ответ на запрос на добавления группе ключа доступа ApiKey
    v1PutGroupApiKeyDeleteResponse:
      type: object
      title: Ответ на запрос на удаление ключей доступа ApiKey
    v1PutGroupTemplateGroupAttachResponse:
      type: object
      title: Ответ на запрос сохранения связи шаблона группы и группы пользователя
    v1PutGroupTemplateGroupDetachResponse:
      type: object
      title: Ответ на запрос удаления связи шаблона группы и группы пользователя
    v1PutGroupUserAttachResponse:
      type: object
      title: Ответ на добавление связи пользователя и группы
    v1PutGroupUserDetachResponse:
      type: object
      title: Ответ на запрос удаления точки доступа в профиль
    v1UserGroup:
      type: object
      properties:
        userId:
          type: string
          title: |-
            Идентификатор пользователя.
            Соответствует subject, sub, client_id из JWT.
            # Диапазон: 3..256
        groupId:
          type: string
          title: |-
            Идентификатор группы.
            # Тип: Guid
      title: Связка пользователя с группой
      required:
        - userId
        - groupId
    v1ValidationError:
      type: object
      properties:
        path:
          type: string
          title: Путь к полю в формате наименования protobuf
        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:
            access_management:edit: Предоставляет полный доступ в сервис access_management
            access_management:read: Предоставляет доступ на чтение данных из сервиса access_management
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
