openapi: 3.0.3
info:
  title: user
  version: 1.0.1782225675181
  description: Сервис user
  license:
    name: CC BY-NC-ND 4.0
    url: https://gitlab.infra.rtkit.dev/openapi/key/raw/main/LICENCE.md
tags:
  - name: user(auth)
    description: Методы user. Требуют авторизацию. Доступны из интернета
  - name: system(public)
    description: Методы system. Не требуют авторизацию. Доступны из интернета
paths:
  /user/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, он никогда не
            будет перенаправлен на канареечный деплой
  /user/api/v1/user:
    post:
      summary: >-
        Метод создания пользователя.

        Метод доступен для: admin, service.

        Доступно создание пользователей с типом: ADMIN, MRF, BTI, LTP_FIRST, SERVICE, DEVICE_ADMIN, MANAGER
      operationId: UserService_PostUser
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUserResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUserResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUserResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostUserRequest"
        required: true
      tags:
        - user(auth)
      security:
        - oauth2:
            - user: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, он никогда не
            будет перенаправлен на канареечный деплой
    patch:
      summary: |-
        Метод частичного обновления пользователя.
        Метод доступен для: admin, service
      operationId: UserService_PatchUser
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PatchUserResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PatchUserResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PatchUserResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PatchUserRequest"
        required: true
      tags:
        - user(auth)
      security:
        - oauth2:
            - user:read
            - user: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, он никогда не
            будет перенаправлен на канареечный деплой
  /user/api/v1/user/code/create:
    post:
      summary: |-
        Метод создания идентификационного кода пользователя.
        После создания кода отправляется событие SendingSmsTask.
        Метод доступен для: admin, service, ltp_first
      operationId: UserService_PostUserCodeCreate
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUserCodeCreateResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUserCodeCreateResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUserCodeCreateResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostUserCodeCreateRequest"
        required: true
      tags:
        - user(auth)
      security:
        - oauth2:
            - user: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, он никогда не
            будет перенаправлен на канареечный деплой
  /user/api/v1/user/count:
    get:
      summary: >-
        Метод получения количества пользователей.

        Метод доступен для: admin, service, manager, bti, ltp_first, owner, empolyee.

        Если метод вызван ролями owner или employee в фильтре поле company_ids принудительно замещается их company_id
      operationId: UserService_GetUserCount
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetUserCountResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetUserCountResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetUserCountResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.companyIds
          description: По идентификаторам компаний
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: integer
              format: int32
        - name: filter.userTypes
          description: |-
            По типам

             - TYPE_UNKNOWN: Значение не указано
             - OWNER: Владелец УК
             - EMPLOYEE: Сотрудник УК
             - MASTER: Мастер житель
             - SLAVE: Подчиненный житель
             - ADMIN: Администратор
             - SELLER: Сотрудники ГАП
             - MRF: МРФ
             - BACKOFFICE: ГРЗУК
             - SERVICE: Сервис
             - ROOT: Супер админ
             - BTI: Сотрудник БТИ
             - LTP_FIRST: Сотрудник 1 ЛТП
             - EXTERNAL_SELLER: Сотрудник ГАП
             - APPLICATION: Приложение
             - MANAGER: Администратор точек продаж
             - DEVICE_ADMIN: Администратор устройств
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
              enum:
                - OWNER
                - EMPLOYEE
                - MASTER
                - SLAVE
                - ADMIN
                - SELLER
                - MRF
                - BACKOFFICE
                - SERVICE
                - ROOT
                - BTI
                - LTP_FIRST
                - EXTERNAL_SELLER
                - APPLICATION
                - MANAGER
                - DEVICE_ADMIN
        - name: filter.userStatusTypes
          description: |-
            По статусам

             - STATUS_TYPE_UNKNOWN: Значение не указано
             - NEW: Не активный пользователь
             - DEMO: Демо пользователь
             - ACTIVE: Активный пользователь
             - BLOCKED: Архивный пользователь
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
              enum:
                - NEW
                - DEMO
                - ACTIVE
                - BLOCKED
        - name: filter.emails
          description: По электронной почте
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: filter.phoneNumbers
          description: По номеру телефона
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: filter.logins
          description: По логину
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: filter.text
          description: |-
            Поиск по тексту.
            Если значение не передано то поиск по нему не производится.
            # Диапазон: 3..64.
            # Поиск производится по полям:
            # - Описание
          in: query
          required: false
          schema:
            type: string
        - name: filter.contacts
          description: >-
            Поиск по контактным данным пользователя (электронная почта или номер
            телефона).

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

            # Диапазон: 3..64.

            # Поиск производится по полям:

            # - Электронная почта;

            # - Номер телефона
          in: query
          required: false
          schema:
            type: string
        - name: filter.ssoUserIds
          description: По идентификаторам пользователей в ССО
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              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:
        - user(auth)
      security:
        - oauth2:
            - user:read
            - user:edit
          bearerHttp: []
  /user/api/v1/user/list:
    get:
      summary: >-
        Метод получения списка пользователей.

        Метод доступен для: admin, service, manager, bti, ltp_first, owner, empolyee.

        Если метод вызван ролями owner или employee в фильтре поле company_ids принудительно замещается их company_id
      operationId: UserService_GetUserList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    $ref: "#/components/schemas/v1GetUserListResponse"
                  error:
                    $ref: "#/components/schemas/rpcStatus"
                title: Поток объектов v1GetUserListResponse
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.companyIds
          description: По идентификаторам компаний
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: integer
              format: int32
        - name: filter.userTypes
          description: |-
            По типам

             - TYPE_UNKNOWN: Значение не указано
             - OWNER: Владелец УК
             - EMPLOYEE: Сотрудник УК
             - MASTER: Мастер житель
             - SLAVE: Подчиненный житель
             - ADMIN: Администратор
             - SELLER: Сотрудники ГАП
             - MRF: МРФ
             - BACKOFFICE: ГРЗУК
             - SERVICE: Сервис
             - ROOT: Супер админ
             - BTI: Сотрудник БТИ
             - LTP_FIRST: Сотрудник 1 ЛТП
             - EXTERNAL_SELLER: Сотрудник ГАП
             - APPLICATION: Приложение
             - MANAGER: Администратор точек продаж
             - DEVICE_ADMIN: Администратор устройств
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
              enum:
                - OWNER
                - EMPLOYEE
                - MASTER
                - SLAVE
                - ADMIN
                - SELLER
                - MRF
                - BACKOFFICE
                - SERVICE
                - ROOT
                - BTI
                - LTP_FIRST
                - EXTERNAL_SELLER
                - APPLICATION
                - MANAGER
                - DEVICE_ADMIN
        - name: filter.userStatusTypes
          description: |-
            По статусам

             - STATUS_TYPE_UNKNOWN: Значение не указано
             - NEW: Не активный пользователь
             - DEMO: Демо пользователь
             - ACTIVE: Активный пользователь
             - BLOCKED: Архивный пользователь
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
              enum:
                - NEW
                - DEMO
                - ACTIVE
                - BLOCKED
        - name: filter.emails
          description: По электронной почте
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: filter.phoneNumbers
          description: По номеру телефона
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: filter.logins
          description: По логину
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: filter.text
          description: |-
            Поиск по тексту.
            Если значение не передано то поиск по нему не производится.
            # Диапазон: 3..64.
            # Поиск производится по полям:
            # - Описание
          in: query
          required: false
          schema:
            type: string
        - name: filter.contacts
          description: >-
            Поиск по контактным данным пользователя (электронная почта или номер
            телефона).

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

            # Диапазон: 3..64.

            # Поиск производится по полям:

            # - Электронная почта;

            # - Номер телефона
          in: query
          required: false
          schema:
            type: string
        - name: filter.ssoUserIds
          description: По идентификаторам пользователей в ССО
          in: query
          required: false
          explode: true
          schema:
            type: array
            items:
              type: integer
              format: int32
        - name: paging.orderByType
          description: >-
            Тип значения сортировки.

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

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

             - ORDER_BY_TYPE_UNKNOWN: Значение не указано
             - ID: По идентификатору
             - CREATED_AT: По времени создания
             - CHANGED_AT: По времени изменения
             - EMAIL: По электронной почте
             - RANK: По рангу для поиска по тексту.
            Применяется когда передано поле для поиска по тексту.

            В случае если текстовое поле не передано, применяется значение по умолчанию
             - DESCRIPTION: По описанию (collate-agnostic ordering)
          in: query
          required: false
          schema:
            type: string
            enum:
              - ID
              - CREATED_AT
              - CHANGED_AT
              - EMAIL
              - RANK
              - DESCRIPTION
        - 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:
        - user(auth)
      security:
        - oauth2:
            - user:read
            - user:edit
          bearerHttp: []
  "/user/api/v1/user/{id}":
    get:
      summary: >-
        Метод получения пользователей.

        Метод доступен для: admin, service, manager, bti, ltp_first, owner, empolyee.

        Роли owner или employee могут запрашивать только пользователей, принадлежащих их компании
      operationId: UserService_GetUser
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetUserResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetUserResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetUserResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: id
          description: Идентификатор
          in: path
          required: true
          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:
        - user(auth)
      security:
        - oauth2:
            - user:read
            - user:edit
          bearerHttp: []
    delete:
      summary: |-
        Метод удаления пользователей.
        Метод доступен для: admin, service
      operationId: UserService_DeleteUser
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteUserResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteUserResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteUserResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: id
          description: Идентификатор
          in: path
          required: true
          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:
        - user(auth)
      security:
        - oauth2:
            - user:edit
          bearerHttp: []
  "/user/api/v1/user/{id}/clean_sso_data":
    post:
      summary: |-
        Метод очистки данных из ССО.
        Метод доступен для: admin, service
      operationId: UserService_PostUserCleanSsoData
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUserCleanSsoDataResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUserCleanSsoDataResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostUserCleanSsoDataResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: id
          description: |-
            Идентификатор пользователя.
            # Диапазон: 1..2147483647
          in: path
          required: true
          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:
        - user(auth)
      security:
        - oauth2:
            - user:edit
          bearerHttp: []
  "/user/api/v1/user/{id}/code":
    get:
      summary: |-
        Метод получения идентификационного кода пользователя.
        Метод доступен для: admin, service, ltp_first
      operationId: UserService_GetUserCode
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetUserCodeResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetUserCodeResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetUserCodeResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: id
          description: |-
            Идентификатор.
            # Диапазон: 0..2147483647
          in: path
          required: true
          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:
        - user(auth)
      security:
        - oauth2:
            - user:read
            - user:edit
          bearerHttp: []
  "/user/api/v1/user/{id}/sessions":
    delete:
      summary: |-
        Метод удаления всех пользовательских сессий.
        Метод доступен для: admin, service
      operationId: UserService_DeleteUserSessions
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteUserSessionsResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteUserSessionsResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "404":
          description: Объект не найден
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeleteUserSessionsResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: id
          description: |-
            Идентификатор пользователя.
            # Диапазон: 1..2147483647
          in: path
          required: true
          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:
        - user(auth)
      security:
        - oauth2:
            - user:edit
          bearerHttp: []
components:
  schemas:
    ErrorUserCodeNotFound:
      type: object
      title: У пользователя отсутствует идентификационный код
    ErrorUserTypeError:
      type: object
      title: |-
        Ошибка типа пользователя, для которого запрашивается очистка.
        Очистка доступна для пользователя с типами:
        - master
    SavingErrorConflict:
      type: object
      title: |-
        Конфликт версий.
        Причины:
        - В базе хранится другая версия строки, значения changed_at отличаются
    SavingErrorCreatorMustBeAdmin:
      type: object
      title: Создатель пользователя должен иметь роль Admin
    SavingErrorEmailIsAlreadyTaken:
      type: object
      title: Email уже занят
    SavingErrorEntityNotFound:
      type: object
      properties:
        field:
          type: string
          title: Поле
      title: |-
        Связанная с пользователем сущность не найдена.
        Например: компания по company_id, пользователь по owner_user_id
    SavingErrorMrfIdRequiredForUserType:
      type: object
      title: Для данного типа пользователя идентификатор МРФ обязателен
    SavingErrorRfIdDoesNotMatchMrfId:
      type: object
      title: Идентификатор РФ не соответствует идентификатору МРФ
    SavingErrorUserStatusForbidden:
      type: object
      title: |-
        Нельзя удалять пользователя в текущем статусе.
        В каких статусах можно удалить пользователя:
        - demo
    SavingErrorUserTypeForbidden:
      type: object
      title: |-
        Нельзя удалять пользователя с данным типом.
        Доступные типы:
        - Жилец (мастер)
    UserPagingDirectionType:
      type: string
      enum:
        - DESC
        - ASC
      description: |-
        - DIRECTION_TYPE_UNKNOWN: Значение не указано
         - DESC: От большего к меньшему
         - ASC: От меньшего к большему
      title: |-
        Справочник типов направлений сортировки.
        # Тип: byte
    UserPagingOrderByType:
      type: string
      enum:
        - ID
        - CREATED_AT
        - CHANGED_AT
        - EMAIL
        - RANK
        - DESCRIPTION
      description: >-
        - ORDER_BY_TYPE_UNKNOWN: Значение не указано
         - ID: По идентификатору
         - CREATED_AT: По времени создания
         - CHANGED_AT: По времени изменения
         - EMAIL: По электронной почте
         - RANK: По рангу для поиска по тексту.
        Применяется когда передано поле для поиска по тексту.

        В случае если текстовое поле не передано, применяется значение по умолчанию
         - DESCRIPTION: По описанию (collate-agnostic ordering)
      title: |-
        Справочник типов значений сортировки.
        # Тип: byte
    UserSavingError:
      type: object
      properties:
        conflict:
          title: Конфликт версий
          allOf:
            - $ref: "#/components/schemas/SavingErrorConflict"
        userTypeForbidden:
          title: Нельзя удалять пользователя с данным типом
          allOf:
            - $ref: "#/components/schemas/SavingErrorUserTypeForbidden"
        userStatusForbidden:
          title: Нельзя удалять пользователя в текущем статусе
          allOf:
            - $ref: "#/components/schemas/SavingErrorUserStatusForbidden"
        mrfIdIsRequiredForUserType:
          title: Идентификатор МРФ обязателен
          allOf:
            - $ref: "#/components/schemas/SavingErrorMrfIdRequiredForUserType"
        creatorMustBeAdmin:
          title: Создатель пользователя должен иметь роль Admin
          allOf:
            - $ref: "#/components/schemas/SavingErrorCreatorMustBeAdmin"
        rfIdDoesNotMatchMrfId:
          title: Идентификатор РФ не соответствует идентификатору МРФ
          allOf:
            - $ref: "#/components/schemas/SavingErrorRfIdDoesNotMatchMrfId"
        emailIsAlreadyTaken:
          title: Email уже занят
          allOf:
            - $ref: "#/components/schemas/SavingErrorEmailIsAlreadyTaken"
        entityNotFound:
          title: Связанная с пользователем сущность не найдена
          allOf:
            - $ref: "#/components/schemas/SavingErrorEntityNotFound"
      title: >-
        Ошибка сохранения.

        Эти проверки выполняются при работе с базой данных и сторонними сервисами
    UserStatusType:
      type: string
      enum:
        - NEW
        - DEMO
        - ACTIVE
        - BLOCKED
      description: |-
        - STATUS_TYPE_UNKNOWN: Значение не указано
         - NEW: Не активный пользователь
         - DEMO: Демо пользователь
         - ACTIVE: Активный пользователь
         - BLOCKED: Архивный пользователь
      title: |-
        Справочник типов статусов пользователей.
        # Тип: byte
    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: Ошибка транспортного слоя
    v1DeleteUserResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1DeleteUserResponseError"
      title: Ответ на запрос удаления пользователя
    v1DeleteUserResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        saving:
          title: Ошибка сохранения
          allOf:
            - $ref: "#/components/schemas/UserSavingError"
      title: Ошибка запроса удаления пользователя
    v1DeleteUserSessionsResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1DeleteUserSessionsResponseError"
      title: Ответ на запрос удаления всех пользовательских сессий
    v1DeleteUserSessionsResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1GetSystemStatusResponse:
      type: object
      title: Ответ на запрос проверки доступности сервиса
    v1GetUserCodeResponse:
      type: object
      properties:
        data:
          title: Идентификационный код
          allOf:
            - $ref: "#/components/schemas/v1UserCode"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetUserCodeResponseError"
      title: Ответ на запрос получения идентификационного кода пользователя
    v1GetUserCodeResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        userCodeNotFound:
          title: У пользователя отсутствует идентификационный код
          allOf:
            - $ref: "#/components/schemas/ErrorUserCodeNotFound"
      title: Ошибка запроса получения идентификационного кода пользователя
    v1GetUserCountResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Всего пользователей
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetUserCountResponseError"
      title: Ответ на запрос получения количества пользователей
    v1GetUserCountResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения количества пользователей
    v1GetUserListResponse:
      type: object
      properties:
        data:
          title: Пользователь
          allOf:
            - $ref: "#/components/schemas/v1User"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetUserListResponseError"
      title: Ответ на получение списка пользователей
    v1GetUserListResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения списка пользователей
    v1GetUserResponse:
      type: object
      properties:
        data:
          title: Пользователь
          allOf:
            - $ref: "#/components/schemas/v1User"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetUserResponseError"
      title: Ответ на запрос получения пользователя
    v1GetUserResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса получения пользователя
    v1PatchUserRequest:
      type: object
      properties:
        id:
          type: integer
          format: int32
          title: |-
            Идентификатор.
            # Диапазон: 1..2147483647
        phoneNumber:
          type: string
          title: |-
            Номер телефона.
            # Паттерн: /^(\+7\d{10})$/
        email:
          type: string
          title: |-
            Электронная почта.
            # Паттерн: /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/
        login:
          type: string
          title: |-
            Логин.
            # Паттерн: /^[A-Za-z0-9._-]{3,64}$/
      title: Запрос частичного обновления пользователя
      required:
        - id
    v1PatchUserResponse:
      type: object
      properties:
        data:
          title: Пользователь
          allOf:
            - $ref: "#/components/schemas/v1User"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PatchUserResponseError"
      title: Ответ на запрос частичного обновления пользователя
    v1PatchUserResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        userNotFoundError:
          title: Пользователь не найден
          allOf:
            - $ref: "#/components/schemas/v1PatchUserResponseErrorUserNotFoundError"
      title: Ошибка запроса частичного обновления пользователя
    v1PatchUserResponseErrorUserNotFoundError:
      type: object
      title: |-
        Ошибка, пользователь не найден.
        Возникает в случаях:
        Пользователь с переданным идентификатором отсутствует.
        Пользователь находится в статусе blocked
    v1PostUserCleanSsoDataResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostUserCleanSsoDataResponseError"
      title: Ответ на запрос очистки данных из ССО
    v1PostUserCleanSsoDataResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        userTypeError:
          title: Ошибка типа пользователя, для которого запрашивается очистка
          allOf:
            - $ref: "#/components/schemas/ErrorUserTypeError"
        userNotFoundError:
          title: Пользователь не найден
          allOf:
            - $ref: "#/components/schemas/v1PostUserCleanSsoDataResponseErrorUserNotFoundErro\
                r"
      title: Ошибка запроса очистки данных из ССО
    v1PostUserCleanSsoDataResponseErrorUserNotFoundError:
      type: object
      title: |-
        Ошибка, пользователь не найден.
        Возникает в случаях:
        Пользователь с переданным идентификатором отсутствует.
        Пользователь находится в статусе blocked
    v1PostUserCodeCreateRequest:
      type: object
      properties:
        userCode:
          title: Идентификационный код пользователя
          allOf:
            - $ref: "#/components/schemas/v1UserCode"
      title: Запрос создания идентификационного кода пользователя
      required:
        - userCode
    v1PostUserCodeCreateResponse:
      type: object
      properties:
        data:
          title: Идентификационный код пользователя
          allOf:
            - $ref: "#/components/schemas/v1UserCode"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostUserCodeCreateResponseError"
      title: Ответ на запрос создания идентификационного кода пользователя
    v1PostUserCodeCreateResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса создания идентификационного кода пользователя
    v1PostUserRequest:
      type: object
      properties:
        data:
          title: Пользователь
          allOf:
            - $ref: "#/components/schemas/v1User"
      title: Запрос на создание пользователя
      required:
        - data
    v1PostUserResponse:
      type: object
      properties:
        data:
          title: Пользователь
          allOf:
            - $ref: "#/components/schemas/v1User"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostUserResponseError"
      title: Ответ на запрос на создание пользователя
    v1PostUserResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        saving:
          title: Ошибка сохранения
          allOf:
            - $ref: "#/components/schemas/UserSavingError"
      title: Ошибка запроса сохранения пользователя
    v1User:
      type: object
      properties:
        id:
          type: integer
          format: int32
          title: |-
            Идентификатор.
            # Диапазон: 0..2147483647
        type:
          title: Тип пользователя
          allOf:
            - $ref: "#/components/schemas/v1UserType"
        statusType:
          title: Статус пользователя
          readOnly: true
          allOf:
            - $ref: "#/components/schemas/UserStatusType"
        login:
          type: string
          title: |-
            Логин.
            # Диапазон: 3..64
        email:
          type: string
          title: |-
            Электронная почта.
            # Диапазон: 4..256
        phoneNumber:
          type: string
          title: |-
            Номер телефона.
            # Диапазон: 5..14
        companyId:
          type: integer
          format: int32
          title: |-
            Идентификатор компании.
            # Диапазон: 1..2147483647
        mrfId:
          type: integer
          format: int32
          title: Идентификатор МРФ
        rfId:
          type: integer
          format: int32
          title: Идентификатор РФ
        createdAt:
          type: string
          format: date-time
          title: |-
            Дата создания.
            # Тип: DateTime
          readOnly: true
        changedAt:
          type: string
          format: date-time
          title: |-
            Дата изменения.
            # Тип: DateTime
        activatedAt:
          type: string
          format: date-time
          title: |-
            Дата активации.
            # Тип: DateTime
          readOnly: true
        blockedAt:
          type: string
          format: date-time
          title: |-
            Дата активации.
            # Тип: DateTime
          readOnly: true
        creatorUserId:
          type: integer
          format: int32
          title: |-
            Идентификатор создавшего пользователя.
            Берется из токена.
            # Диапазон: 1..2147483647
          readOnly: true
        ownerUserId:
          type: integer
          format: int32
          title: |-
            Идентификатор пользователя-владельца.
            # Диапазон: 1..2147483647
        invoiceEmail:
          type: string
          title: |-
            Электронная почта для чеков.
            # Диапазон: 4..256
        vcUserId:
          type: integer
          format: int32
          title: |-
            Идентификатор пользователя в Видеонаблюдении.
            Вычисляется на стороне сервера при создании пользователя
          readOnly: true
        description:
          type: string
          title: Описание
        ustoreUserId:
          type: integer
          format: int32
          title: |-
            Идентификатор пользователя в сервисе ustore.
            Вычисляется на стороне сервера при создании пользователя
          readOnly: true
        envUrl:
          type: string
          title: Адрес окружения для внутренних пользователей
      title: Пользователь
      required:
        - type
    v1UserCode:
      type: object
      properties:
        code:
          type: integer
          format: int32
          title: |-
            Идентификационный код.
            Если поле не заполнено, генерируется автоматически.
            # Диапазон: 10000..99999
        userId:
          type: integer
          format: int32
          title: |-
            Идентификатор пользователя.
            # Диапазон: 0..2147483647
        createdAt:
          type: string
          format: date-time
          title: |-
            Дата создания.
            # Тип: DateTime
          readOnly: true
        creatorUserId:
          type: integer
          format: int32
          title: Идентификатор создателя кода
          readOnly: true
        creatorUserType:
          title: Тип создателя кода
          readOnly: true
          allOf:
            - $ref: "#/components/schemas/v1UserType"
      title: Идентификационный код пользователя
      required:
        - userId
    v1UserFilter:
      type: object
      properties:
        companyIds:
          type: array
          items:
            type: integer
            format: int32
          title: По идентификаторам компаний
        userTypes:
          type: array
          items:
            $ref: "#/components/schemas/v1UserType"
          title: По типам
        userStatusTypes:
          type: array
          items:
            $ref: "#/components/schemas/UserStatusType"
          title: По статусам
        emails:
          type: array
          items:
            type: string
          title: По электронной почте
        phoneNumbers:
          type: array
          items:
            type: string
          title: По номеру телефона
        logins:
          type: array
          items:
            type: string
          title: По логину
        text:
          type: string
          title: |-
            Поиск по тексту.
            Если значение не передано то поиск по нему не производится.
            # Диапазон: 3..64.
            # Поиск производится по полям:
            # - Описание
        contacts:
          type: string
          title: >-
            Поиск по контактным данным пользователя (электронная почта или номер
            телефона).

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

            # Диапазон: 3..64.

            # Поиск производится по полям:

            # - Электронная почта;

            # - Номер телефона
        ssoUserIds:
          type: array
          items:
            type: integer
            format: int32
          title: По идентификаторам пользователей в ССО
      title: Фильтр по пользователям
    v1UserPaging:
      type: object
      properties:
        orderByType:
          title: |-
            Тип значения сортировки.
            Если значение не передано, то будет взято значение по умолчанию.
            # По умолчанию: CHANGED_AT
          allOf:
            - $ref: "#/components/schemas/UserPagingOrderByType"
        directionType:
          title: |-
            Тип направления сортировки.
            # По умолчанию: DESC
          allOf:
            - $ref: "#/components/schemas/UserPagingDirectionType"
        limit:
          type: integer
          format: int32
          title: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
        offset:
          type: integer
          format: int32
          title: |-
            Сдвиг.
            # Диапазон: 0..2147483647
      title: Постраничный вывод
    v1UserType:
      type: string
      enum:
        - OWNER
        - EMPLOYEE
        - MASTER
        - SLAVE
        - ADMIN
        - SELLER
        - MRF
        - BACKOFFICE
        - SERVICE
        - ROOT
        - BTI
        - LTP_FIRST
        - EXTERNAL_SELLER
        - APPLICATION
        - MANAGER
        - DEVICE_ADMIN
      description: |-
        - TYPE_UNKNOWN: Значение не указано
         - OWNER: Владелец УК
         - EMPLOYEE: Сотрудник УК
         - MASTER: Мастер житель
         - SLAVE: Подчиненный житель
         - ADMIN: Администратор
         - SELLER: Сотрудники ГАП
         - MRF: МРФ
         - BACKOFFICE: ГРЗУК
         - SERVICE: Сервис
         - ROOT: Супер админ
         - BTI: Сотрудник БТИ
         - LTP_FIRST: Сотрудник 1 ЛТП
         - EXTERNAL_SELLER: Сотрудник ГАП
         - APPLICATION: Приложение
         - MANAGER: Администратор точек продаж
         - DEVICE_ADMIN: Администратор устройств
      title: |-
        Справочник типов пользователей.
        # Тип: byte
    v1ValidationError:
      type: object
      properties:
        path:
          type: string
          title: Путь к полю в формате наименования прото
        message:
          type: string
          title: Валидационное сообщение
      title: |-
        Ошибки валидации.
        Эти проверки выполняются до обращения в базу данных
      required:
        - path
        - message
  securitySchemes:
    bearerHttp:
      type: http
      scheme: bearer
      bearerFormat: JWT
    oauth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://oauth2-staging.k8s.key.rt.ru/oauth2/token
          scopes:
            user:edit: Предоставляет полный доступ в сервис user
            user:read: Предоставляет доступ на чтение данных из сервиса user
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
