{
  "files": [
    {
      "name": "keyapis/user/v1/keyapis_user_user_v1.proto",
      "description": "Сервис реализует функционал управления пользователями",
      "package": "keyapis.user.v1",
      "hasEnums": false,
      "hasExtensions": false,
      "hasMessages": true,
      "hasServices": true,
      "enums": [
        {
          "name": "StatusType",
          "longName": "User.StatusType",
          "fullName": "keyapis.user.v1.User.StatusType",
          "description": "Справочник типов статусов пользователей.\n# Тип: byte",
          "values": [
            {
              "name": "STATUS_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "NEW",
              "number": "1",
              "description": "Не активный пользователь"
            },
            {
              "name": "DEMO",
              "number": "2",
              "description": "Демо пользователь"
            },
            {
              "name": "ACTIVE",
              "number": "3",
              "description": "Активный пользователь"
            },
            {
              "name": "BLOCKED",
              "number": "4",
              "description": "Архивный пользователь"
            }
          ]
        },
        {
          "name": "Type",
          "longName": "User.Type",
          "fullName": "keyapis.user.v1.User.Type",
          "description": "Справочник типов пользователей.\n# Тип: byte",
          "values": [
            {
              "name": "TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "OWNER",
              "number": "1",
              "description": "Владелец УК"
            },
            {
              "name": "EMPLOYEE",
              "number": "2",
              "description": "Сотрудник УК"
            },
            {
              "name": "MASTER",
              "number": "3",
              "description": "Мастер житель"
            },
            {
              "name": "SLAVE",
              "number": "4",
              "description": "Подчиненный житель"
            },
            {
              "name": "ADMIN",
              "number": "5",
              "description": "Администратор"
            },
            {
              "name": "SELLER",
              "number": "6",
              "description": "Сотрудники ГАП"
            },
            {
              "name": "MRF",
              "number": "7",
              "description": "МРФ"
            },
            {
              "name": "BACKOFFICE",
              "number": "8",
              "description": "ГРЗУК"
            },
            {
              "name": "SERVICE",
              "number": "9",
              "description": "Сервис"
            },
            {
              "name": "ROOT",
              "number": "10",
              "description": "Супер админ"
            },
            {
              "name": "BTI",
              "number": "11",
              "description": "Сотрудник БТИ"
            },
            {
              "name": "LTP_FIRST",
              "number": "12",
              "description": "Сотрудник 1 ЛТП"
            },
            {
              "name": "EXTERNAL_SELLER",
              "number": "13",
              "description": "Сотрудник ГАП"
            },
            {
              "name": "APPLICATION",
              "number": "14",
              "description": "Приложение"
            },
            {
              "name": "MANAGER",
              "number": "15",
              "description": "Администратор точек продаж"
            },
            {
              "name": "DEVICE_ADMIN",
              "number": "16",
              "description": "Администратор устройств"
            }
          ]
        },
        {
          "name": "DirectionType",
          "longName": "UserPaging.DirectionType",
          "fullName": "keyapis.user.v1.UserPaging.DirectionType",
          "description": "Справочник типов направлений сортировки.\n# Тип: byte",
          "values": [
            {
              "name": "DIRECTION_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "DESC",
              "number": "1",
              "description": "От большего к меньшему"
            },
            {
              "name": "ASC",
              "number": "2",
              "description": "От меньшего к большему"
            }
          ]
        },
        {
          "name": "OrderByType",
          "longName": "UserPaging.OrderByType",
          "fullName": "keyapis.user.v1.UserPaging.OrderByType",
          "description": "Справочник типов значений сортировки.\n# Тип: byte",
          "values": [
            {
              "name": "ORDER_BY_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "ID",
              "number": "1",
              "description": "По идентификатору"
            },
            {
              "name": "CREATED_AT",
              "number": "2",
              "description": "По времени создания"
            },
            {
              "name": "CHANGED_AT",
              "number": "3",
              "description": "По времени изменения"
            },
            {
              "name": "EMAIL",
              "number": "4",
              "description": "По электронной почте"
            },
            {
              "name": "RANK",
              "number": "5",
              "description": "По рангу для поиска по тексту.\nПрименяется когда передано поле для поиска по тексту.\nВ случае если текстовое поле не передано, применяется значение по умолчанию"
            },
            {
              "name": "DESCRIPTION",
              "number": "6",
              "description": "По описанию (collate-agnostic ordering)"
            }
          ]
        }
      ],
      "extensions": [],
      "messages": [
        {
          "name": "DeleteUserRequest",
          "longName": "DeleteUserRequest",
          "fullName": "keyapis.user.v1.DeleteUserRequest",
          "description": "Запрос удаления пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "id",
              "description": "Идентификатор",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "DeleteUserResponse",
          "longName": "DeleteUserResponse",
          "fullName": "keyapis.user.v1.DeleteUserResponse",
          "description": "Ответ на запрос удаления пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "DeleteUserResponse.Error",
              "fullType": "keyapis.user.v1.DeleteUserResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "Error",
          "longName": "DeleteUserResponse.Error",
          "fullName": "keyapis.user.v1.DeleteUserResponse.Error",
          "description": "Ошибка запроса удаления пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "ValidationError",
              "fullType": "keyapis.user.v1.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "saving",
              "description": "Ошибка сохранения",
              "label": "",
              "type": "SavingError",
              "longType": "User.SavingError",
              "fullType": "keyapis.user.v1.User.SavingError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "DeleteUserSessionsRequest",
          "longName": "DeleteUserSessionsRequest",
          "fullName": "keyapis.user.v1.DeleteUserSessionsRequest",
          "description": "Запрос удаления всех пользовательских сессий",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "id",
              "description": "Идентификатор пользователя.\n# Диапазон: 1..2147483647",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "DeleteUserSessionsResponse",
          "longName": "DeleteUserSessionsResponse",
          "fullName": "keyapis.user.v1.DeleteUserSessionsResponse",
          "description": "Ответ на запрос удаления всех пользовательских сессий",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "DeleteUserSessionsResponse.Error",
              "fullType": "keyapis.user.v1.DeleteUserSessionsResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "Error",
          "longName": "DeleteUserSessionsResponse.Error",
          "fullName": "keyapis.user.v1.DeleteUserSessionsResponse.Error",
          "description": "Ошибка запроса",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "ValidationError",
              "fullType": "keyapis.user.v1.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetUserCodeRequest",
          "longName": "GetUserCodeRequest",
          "fullName": "keyapis.user.v1.GetUserCodeRequest",
          "description": "Запрос получения идентификационного кода пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "id",
              "description": "Идентификатор.\n# Диапазон: 0..2147483647",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "GetUserCodeResponse",
          "longName": "GetUserCodeResponse",
          "fullName": "keyapis.user.v1.GetUserCodeResponse",
          "description": "Ответ на запрос получения идентификационного кода пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Идентификационный код",
              "label": "",
              "type": "UserCode",
              "longType": "UserCode",
              "fullType": "keyapis.user.v1.UserCode",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "GetUserCodeResponse.Error",
              "fullType": "keyapis.user.v1.GetUserCodeResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "GetUserCodeResponse.Error",
          "fullName": "keyapis.user.v1.GetUserCodeResponse.Error",
          "description": "Ошибка запроса получения идентификационного кода пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "ValidationError",
              "fullType": "keyapis.user.v1.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "user_code_not_found",
              "description": "У пользователя отсутствует идентификационный код",
              "label": "",
              "type": "UserCodeNotFound",
              "longType": "GetUserCodeResponse.Error.UserCodeNotFound",
              "fullType": "keyapis.user.v1.GetUserCodeResponse.Error.UserCodeNotFound",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "UserCodeNotFound",
          "longName": "GetUserCodeResponse.Error.UserCodeNotFound",
          "fullName": "keyapis.user.v1.GetUserCodeResponse.Error.UserCodeNotFound",
          "description": "У пользователя отсутствует идентификационный код",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "GetUserCountRequest",
          "longName": "GetUserCountRequest",
          "fullName": "keyapis.user.v1.GetUserCountRequest",
          "description": "Запрос получения количества пользователей",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр",
              "label": "",
              "type": "UserFilter",
              "longType": "UserFilter",
              "fullType": "keyapis.user.v1.UserFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetUserCountResponse",
          "longName": "GetUserCountResponse",
          "fullName": "keyapis.user.v1.GetUserCountResponse",
          "description": "Ответ на запрос получения количества пользователей",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Всего пользователей",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "GetUserCountResponse.Error",
              "fullType": "keyapis.user.v1.GetUserCountResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "GetUserCountResponse.Error",
          "fullName": "keyapis.user.v1.GetUserCountResponse.Error",
          "description": "Ошибка запроса получения количества пользователей",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "ValidationError",
              "fullType": "keyapis.user.v1.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetUserListRequest",
          "longName": "GetUserListRequest",
          "fullName": "keyapis.user.v1.GetUserListRequest",
          "description": "Запрос на получение списка пользователей",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр",
              "label": "",
              "type": "UserFilter",
              "longType": "UserFilter",
              "fullType": "keyapis.user.v1.UserFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "paging",
              "description": "Стандартный постраничный вывод",
              "label": "",
              "type": "UserPaging",
              "longType": "UserPaging",
              "fullType": "keyapis.user.v1.UserPaging",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "pagination",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "GetUserListResponse",
          "longName": "GetUserListResponse",
          "fullName": "keyapis.user.v1.GetUserListResponse",
          "description": "Ответ на получение списка пользователей",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Пользователь",
              "label": "",
              "type": "User",
              "longType": "User",
              "fullType": "keyapis.user.v1.User",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "GetUserListResponse.Error",
              "fullType": "keyapis.user.v1.GetUserListResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "GetUserListResponse.Error",
          "fullName": "keyapis.user.v1.GetUserListResponse.Error",
          "description": "Ошибка запроса получения списка пользователей",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "ValidationError",
              "fullType": "keyapis.user.v1.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetUserRequest",
          "longName": "GetUserRequest",
          "fullName": "keyapis.user.v1.GetUserRequest",
          "description": "Запрос получения пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "id",
              "description": "Идентификатор",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "GetUserResponse",
          "longName": "GetUserResponse",
          "fullName": "keyapis.user.v1.GetUserResponse",
          "description": "Ответ на запрос получения пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Пользователь",
              "label": "",
              "type": "User",
              "longType": "User",
              "fullType": "keyapis.user.v1.User",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "GetUserResponse.Error",
              "fullType": "keyapis.user.v1.GetUserResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "GetUserResponse.Error",
          "fullName": "keyapis.user.v1.GetUserResponse.Error",
          "description": "Ошибка запроса получения пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "ValidationError",
              "fullType": "keyapis.user.v1.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "PostUserCodeCreateRequest",
          "longName": "PostUserCodeCreateRequest",
          "fullName": "keyapis.user.v1.PostUserCodeCreateRequest",
          "description": "Запрос создания идентификационного кода пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "user_code",
              "description": "Идентификационный код пользователя",
              "label": "",
              "type": "UserCode",
              "longType": "UserCode",
              "fullType": "keyapis.user.v1.UserCode",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "PostUserCodeCreateResponse",
          "longName": "PostUserCodeCreateResponse",
          "fullName": "keyapis.user.v1.PostUserCodeCreateResponse",
          "description": "Ответ на запрос создания идентификационного кода пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Идентификационный код пользователя",
              "label": "",
              "type": "UserCode",
              "longType": "UserCode",
              "fullType": "keyapis.user.v1.UserCode",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "PostUserCodeCreateResponse.Error",
              "fullType": "keyapis.user.v1.PostUserCodeCreateResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "PostUserCodeCreateResponse.Error",
          "fullName": "keyapis.user.v1.PostUserCodeCreateResponse.Error",
          "description": "Ошибка запроса создания идентификационного кода пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "ValidationError",
              "fullType": "keyapis.user.v1.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "PostUserRequest",
          "longName": "PostUserRequest",
          "fullName": "keyapis.user.v1.PostUserRequest",
          "description": "Запрос на создание пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Пользователь",
              "label": "",
              "type": "User",
              "longType": "User",
              "fullType": "keyapis.user.v1.User",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "PostUserResponse",
          "longName": "PostUserResponse",
          "fullName": "keyapis.user.v1.PostUserResponse",
          "description": "Ответ на запрос на создание пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Пользователь",
              "label": "",
              "type": "User",
              "longType": "User",
              "fullType": "keyapis.user.v1.User",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "PostUserResponse.Error",
              "fullType": "keyapis.user.v1.PostUserResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "PostUserResponse.Error",
          "fullName": "keyapis.user.v1.PostUserResponse.Error",
          "description": "Ошибка запроса сохранения пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "ValidationError",
              "fullType": "keyapis.user.v1.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "saving",
              "description": "Ошибка сохранения",
              "label": "",
              "type": "SavingError",
              "longType": "User.SavingError",
              "fullType": "keyapis.user.v1.User.SavingError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "User",
          "longName": "User",
          "fullName": "keyapis.user.v1.User",
          "description": "Пользователь",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "id",
              "description": "Идентификатор.\n# Диапазон: 0..2147483647",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "type",
              "description": "Тип пользователя",
              "label": "",
              "type": "Type",
              "longType": "User.Type",
              "fullType": "keyapis.user.v1.User.Type",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 2
            },
            {
              "name": "status_type",
              "description": "Статус пользователя",
              "label": "",
              "type": "StatusType",
              "longType": "User.StatusType",
              "fullType": "keyapis.user.v1.User.StatusType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 3
            },
            {
              "name": "login",
              "description": "Логин.\n# Диапазон: 3..64",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 4
            },
            {
              "name": "email",
              "description": "Электронная почта.\n# Диапазон: 4..256",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 5
            },
            {
              "name": "phone_number",
              "description": "Номер телефона.\n# Диапазон: 5..14",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 6
            },
            {
              "name": "company_id",
              "description": "Идентификатор компании.\n# Диапазон: 1..2147483647",
              "label": "",
              "type": "Int32Value",
              "longType": "google.protobuf.Int32Value",
              "fullType": "google.protobuf.Int32Value",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 7
            },
            {
              "name": "mrf_id",
              "description": "Идентификатор МРФ",
              "label": "",
              "type": "Int32Value",
              "longType": "google.protobuf.Int32Value",
              "fullType": "google.protobuf.Int32Value",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 8
            },
            {
              "name": "rf_id",
              "description": "Идентификатор РФ",
              "label": "",
              "type": "Int32Value",
              "longType": "google.protobuf.Int32Value",
              "fullType": "google.protobuf.Int32Value",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 9
            },
            {
              "name": "created_at",
              "description": "Дата создания.\n# Тип: DateTime",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 10
            },
            {
              "name": "changed_at",
              "description": "Дата изменения.\n# Тип: DateTime",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 11
            },
            {
              "name": "activated_at",
              "description": "Дата активации.\n# Тип: DateTime",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 12
            },
            {
              "name": "blocked_at",
              "description": "Дата активации.\n# Тип: DateTime",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 13
            },
            {
              "name": "creator_user_id",
              "description": "Идентификатор создавшего пользователя.\nБерется из токена.\n# Диапазон: 1..2147483647",
              "label": "",
              "type": "Int32Value",
              "longType": "google.protobuf.Int32Value",
              "fullType": "google.protobuf.Int32Value",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 14
            },
            {
              "name": "owner_user_id",
              "description": "Идентификатор пользователя-владельца.\n# Диапазон: 1..2147483647",
              "label": "",
              "type": "Int32Value",
              "longType": "google.protobuf.Int32Value",
              "fullType": "google.protobuf.Int32Value",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 15
            },
            {
              "name": "invoice_email",
              "description": "Электронная почта для чеков.\n# Диапазон: 4..256",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 16
            },
            {
              "name": "vc_user_id",
              "description": "Идентификатор пользователя в Видеонаблюдении.\nВычисляется на стороне сервера при создании пользователя",
              "label": "",
              "type": "Int32Value",
              "longType": "google.protobuf.Int32Value",
              "fullType": "google.protobuf.Int32Value",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 17
            },
            {
              "name": "description",
              "description": "Описание",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 18
            },
            {
              "name": "ustore_user_id",
              "description": "Идентификатор пользователя в сервисе ustore.\nВычисляется на стороне сервера при создании пользователя",
              "label": "",
              "type": "Int32Value",
              "longType": "google.protobuf.Int32Value",
              "fullType": "google.protobuf.Int32Value",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 19
            },
            {
              "name": "env_url",
              "description": "Адрес окружения для внутренних пользователей",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 20
            }
          ]
        },
        {
          "name": "SavingError",
          "longName": "User.SavingError",
          "fullName": "keyapis.user.v1.User.SavingError",
          "description": "Ошибка сохранения.\nЭти проверки выполняются при работе с базой данных и сторонними сервисами",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "conflict",
              "description": "Конфликт версий",
              "label": "",
              "type": "Conflict",
              "longType": "User.SavingError.Conflict",
              "fullType": "keyapis.user.v1.User.SavingError.Conflict",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "user_type_forbidden",
              "description": "Нельзя удалять пользователя с данным типом",
              "label": "",
              "type": "UserTypeForbidden",
              "longType": "User.SavingError.UserTypeForbidden",
              "fullType": "keyapis.user.v1.User.SavingError.UserTypeForbidden",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 2
            },
            {
              "name": "user_status_forbidden",
              "description": "Нельзя удалять пользователя в текущем статусе",
              "label": "",
              "type": "UserStatusForbidden",
              "longType": "User.SavingError.UserStatusForbidden",
              "fullType": "keyapis.user.v1.User.SavingError.UserStatusForbidden",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 3
            },
            {
              "name": "mrf_id_is_required_for_user_type",
              "description": "Идентификатор МРФ обязателен",
              "label": "",
              "type": "MrfIdRequiredForUserType",
              "longType": "User.SavingError.MrfIdRequiredForUserType",
              "fullType": "keyapis.user.v1.User.SavingError.MrfIdRequiredForUserType",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 4
            },
            {
              "name": "creator_must_be_admin",
              "description": "Создатель пользователя должен иметь роль Admin",
              "label": "",
              "type": "CreatorMustBeAdmin",
              "longType": "User.SavingError.CreatorMustBeAdmin",
              "fullType": "keyapis.user.v1.User.SavingError.CreatorMustBeAdmin",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 5
            },
            {
              "name": "rf_id_does_not_match_mrf_id",
              "description": "Идентификатор РФ не соответствует идентификатору МРФ",
              "label": "",
              "type": "RfIdDoesNotMatchMrfId",
              "longType": "User.SavingError.RfIdDoesNotMatchMrfId",
              "fullType": "keyapis.user.v1.User.SavingError.RfIdDoesNotMatchMrfId",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 6
            },
            {
              "name": "email_is_already_taken",
              "description": "Email уже занят",
              "label": "",
              "type": "EmailIsAlreadyTaken",
              "longType": "User.SavingError.EmailIsAlreadyTaken",
              "fullType": "keyapis.user.v1.User.SavingError.EmailIsAlreadyTaken",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 7
            },
            {
              "name": "entity_not_found",
              "description": "Связанная с пользователем сущность не найдена",
              "label": "",
              "type": "EntityNotFound",
              "longType": "User.SavingError.EntityNotFound",
              "fullType": "keyapis.user.v1.User.SavingError.EntityNotFound",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 8
            }
          ]
        },
        {
          "name": "Conflict",
          "longName": "User.SavingError.Conflict",
          "fullName": "keyapis.user.v1.User.SavingError.Conflict",
          "description": "Конфликт версий.\nПричины:\n- В базе хранится другая версия строки, значения changed_at отличаются",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "CreatorMustBeAdmin",
          "longName": "User.SavingError.CreatorMustBeAdmin",
          "fullName": "keyapis.user.v1.User.SavingError.CreatorMustBeAdmin",
          "description": "Создатель пользователя должен иметь роль Admin",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "EmailIsAlreadyTaken",
          "longName": "User.SavingError.EmailIsAlreadyTaken",
          "fullName": "keyapis.user.v1.User.SavingError.EmailIsAlreadyTaken",
          "description": "Email уже занят",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "EntityNotFound",
          "longName": "User.SavingError.EntityNotFound",
          "fullName": "keyapis.user.v1.User.SavingError.EntityNotFound",
          "description": "Связанная с пользователем сущность не найдена.\nНапример: компания по company_id, пользователь по owner_user_id",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "field",
              "description": "Поле",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "MrfIdRequiredForUserType",
          "longName": "User.SavingError.MrfIdRequiredForUserType",
          "fullName": "keyapis.user.v1.User.SavingError.MrfIdRequiredForUserType",
          "description": "Для данного типа пользователя идентификатор МРФ обязателен",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "RfIdDoesNotMatchMrfId",
          "longName": "User.SavingError.RfIdDoesNotMatchMrfId",
          "fullName": "keyapis.user.v1.User.SavingError.RfIdDoesNotMatchMrfId",
          "description": "Идентификатор РФ не соответствует идентификатору МРФ",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "UserStatusForbidden",
          "longName": "User.SavingError.UserStatusForbidden",
          "fullName": "keyapis.user.v1.User.SavingError.UserStatusForbidden",
          "description": "Нельзя удалять пользователя в текущем статусе.\nВ каких статусах можно удалить пользователя:\n- demo",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "UserTypeForbidden",
          "longName": "User.SavingError.UserTypeForbidden",
          "fullName": "keyapis.user.v1.User.SavingError.UserTypeForbidden",
          "description": "Нельзя удалять пользователя с данным типом.\nДоступные типы:\n- Жилец (мастер)",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "UserCode",
          "longName": "UserCode",
          "fullName": "keyapis.user.v1.UserCode",
          "description": "Идентификационный код пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "code",
              "description": "Идентификационный код.\nЕсли поле не заполнено, генерируется автоматически.\n# Диапазон: 10000..99999",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "user_id",
              "description": "Идентификатор пользователя.\n# Диапазон: 0..2147483647",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 2
            },
            {
              "name": "created_at",
              "description": "Дата создания.\n# Тип: DateTime",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 3
            },
            {
              "name": "creator_user_id",
              "description": "Идентификатор создателя кода",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 4
            },
            {
              "name": "creator_user_type",
              "description": "Тип создателя кода",
              "label": "",
              "type": "Type",
              "longType": "User.Type",
              "fullType": "keyapis.user.v1.User.Type",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "OUTPUT_ONLY"
                  ]
                }
              },
              "number": 5
            }
          ]
        },
        {
          "name": "UserFilter",
          "longName": "UserFilter",
          "fullName": "keyapis.user.v1.UserFilter",
          "description": "Фильтр по пользователям",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "company_ids",
              "description": "По идентификаторам компаний",
              "label": "repeated",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "user_types",
              "description": "По типам",
              "label": "repeated",
              "type": "Type",
              "longType": "User.Type",
              "fullType": "keyapis.user.v1.User.Type",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            },
            {
              "name": "user_status_types",
              "description": "По статусам",
              "label": "repeated",
              "type": "StatusType",
              "longType": "User.StatusType",
              "fullType": "keyapis.user.v1.User.StatusType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 3
            },
            {
              "name": "emails",
              "description": "По электронной почте",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 4
            },
            {
              "name": "phone_numbers",
              "description": "По номеру телефона",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 5
            },
            {
              "name": "logins",
              "description": "По логину",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 6
            },
            {
              "name": "text",
              "description": "Поиск по тексту.\nЕсли значение не передано то поиск по нему не производится.\n# Диапазон: 3..64.\n# Поиск производится по полям:\n# - Описание",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 7
            },
            {
              "name": "contacts",
              "description": "Поиск по контактным данным пользователя (электронная почта или номер телефона).\nЕсли значение не передано то поиск по нему не производится.\n# Диапазон: 3..64.\n# Поиск производится по полям:\n# - Электронная почта;\n# - Номер телефона",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 8
            }
          ]
        },
        {
          "name": "UserPaging",
          "longName": "UserPaging",
          "fullName": "keyapis.user.v1.UserPaging",
          "description": "Постраничный вывод",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "order_by_type",
              "description": "Тип значения сортировки.\nЕсли значение не передано, то будет взято значение по умолчанию.\n# По умолчанию: CHANGED_AT",
              "label": "",
              "type": "OrderByType",
              "longType": "UserPaging.OrderByType",
              "fullType": "keyapis.user.v1.UserPaging.OrderByType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "direction_type",
              "description": "Тип направления сортировки.\n# По умолчанию: DESC",
              "label": "",
              "type": "DirectionType",
              "longType": "UserPaging.DirectionType",
              "fullType": "keyapis.user.v1.UserPaging.DirectionType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            },
            {
              "name": "limit",
              "description": "Количество записей на страницу.\nЕсли значение 0 (не передано), то будет взято значение по умолчанию.\n# Диапазон: 0..100.\n# По умолчанию: 20",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 3
            },
            {
              "name": "offset",
              "description": "Сдвиг.\n# Диапазон: 0..2147483647",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 4
            }
          ]
        },
        {
          "name": "ValidationError",
          "longName": "ValidationError",
          "fullName": "keyapis.user.v1.ValidationError",
          "description": "Ошибки валидации.\nЭти проверки выполняются до обращения в базу данных",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "path",
              "description": "Путь к полю в формате наименования прото",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            },
            {
              "name": "message",
              "description": "Валидационное сообщение",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 2
            }
          ]
        }
      ],
      "services": [
        {
          "name": "UserService",
          "longName": "UserService",
          "fullName": "keyapis.user.v1.UserService",
          "description": "Сервис пользователей",
          "methods": [
            {
              "name": "GetUser",
              "description": "Метод получения пользователей.\nМетод доступен для: admin, service, manager, bti, ltp_first, owner, empolyee.\nРоли owner или employee могут запрашивать только пользователей, принадлежащих их компании",
              "requestType": "GetUserRequest",
              "requestLongType": "GetUserRequest",
              "requestFullType": "keyapis.user.v1.GetUserRequest",
              "requestStreaming": false,
              "responseType": "GetUserResponse",
              "responseLongType": "GetUserResponse",
              "responseFullType": "keyapis.user.v1.GetUserResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/user/api/v1/user/{id}"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetUserList",
              "description": "Метод получения списка пользователей.\nМетод доступен для: admin, service, manager, bti, ltp_first, owner, empolyee.\nЕсли метод вызван ролями owner или employee в фильтре поле company_ids принудительно замещается их company_id",
              "requestType": "GetUserListRequest",
              "requestLongType": "GetUserListRequest",
              "requestFullType": "keyapis.user.v1.GetUserListRequest",
              "requestStreaming": false,
              "responseType": "GetUserListResponse",
              "responseLongType": "GetUserListResponse",
              "responseFullType": "keyapis.user.v1.GetUserListResponse",
              "responseStreaming": true,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/user/api/v1/user/list"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetUserCount",
              "description": "Метод получения количества пользователей.\nМетод доступен для: admin, service, manager, bti, ltp_first, owner, empolyee.\nЕсли метод вызван ролями owner или employee в фильтре поле company_ids принудительно замещается их company_id",
              "requestType": "GetUserCountRequest",
              "requestLongType": "GetUserCountRequest",
              "requestFullType": "keyapis.user.v1.GetUserCountRequest",
              "requestStreaming": false,
              "responseType": "GetUserCountResponse",
              "responseLongType": "GetUserCountResponse",
              "responseFullType": "keyapis.user.v1.GetUserCountResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/user/api/v1/user/count"
                    }
                  ]
                }
              }
            },
            {
              "name": "DeleteUser",
              "description": "Метод удаления пользователей.\nМетод доступен для: admin, service",
              "requestType": "DeleteUserRequest",
              "requestLongType": "DeleteUserRequest",
              "requestFullType": "keyapis.user.v1.DeleteUserRequest",
              "requestStreaming": false,
              "responseType": "DeleteUserResponse",
              "responseLongType": "DeleteUserResponse",
              "responseFullType": "keyapis.user.v1.DeleteUserResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "DELETE",
                      "pattern": "/user/api/v1/user/{id}"
                    }
                  ]
                }
              }
            },
            {
              "name": "DeleteUserSessions",
              "description": "Метод удаления всех пользовательских сессий.\nМетод доступен для: admin, service",
              "requestType": "DeleteUserSessionsRequest",
              "requestLongType": "DeleteUserSessionsRequest",
              "requestFullType": "keyapis.user.v1.DeleteUserSessionsRequest",
              "requestStreaming": false,
              "responseType": "DeleteUserSessionsResponse",
              "responseLongType": "DeleteUserSessionsResponse",
              "responseFullType": "keyapis.user.v1.DeleteUserSessionsResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "DELETE",
                      "pattern": "/user/api/v1/user/{id}/sessions"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetUserCode",
              "description": "Метод получения идентификационного кода пользователя.\nМетод доступен для: admin, service, ltp_first",
              "requestType": "GetUserCodeRequest",
              "requestLongType": "GetUserCodeRequest",
              "requestFullType": "keyapis.user.v1.GetUserCodeRequest",
              "requestStreaming": false,
              "responseType": "GetUserCodeResponse",
              "responseLongType": "GetUserCodeResponse",
              "responseFullType": "keyapis.user.v1.GetUserCodeResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/user/api/v1/user/{id}/code"
                    }
                  ]
                }
              }
            },
            {
              "name": "PostUserCodeCreate",
              "description": "Метод создания идентификационного кода пользователя.\nПосле создания кода отправляется событие SendingSmsTask.\nМетод доступен для: admin, service, ltp_first",
              "requestType": "PostUserCodeCreateRequest",
              "requestLongType": "PostUserCodeCreateRequest",
              "requestFullType": "keyapis.user.v1.PostUserCodeCreateRequest",
              "requestStreaming": false,
              "responseType": "PostUserCodeCreateResponse",
              "responseLongType": "PostUserCodeCreateResponse",
              "responseFullType": "keyapis.user.v1.PostUserCodeCreateResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "POST",
                      "pattern": "/user/api/v1/user/code/create",
                      "body": "*"
                    }
                  ]
                }
              }
            },
            {
              "name": "PostUser",
              "description": "Метод создания пользователя.\nМетод доступен для: admin, service.\nДоступно создание пользователей с типом: ADMIN, MRF, BTI, LTP_FIRST, SERVICE, DEVICE_ADMIN, MANAGER",
              "requestType": "PostUserRequest",
              "requestLongType": "PostUserRequest",
              "requestFullType": "keyapis.user.v1.PostUserRequest",
              "requestStreaming": false,
              "responseType": "PostUserResponse",
              "responseLongType": "PostUserResponse",
              "responseFullType": "keyapis.user.v1.PostUserResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "POST",
                      "pattern": "/user/api/v1/user",
                      "body": "*"
                    }
                  ]
                }
              }
            }
          ]
        }
      ],
      "syntax": "proto3"
    }
  ],
  "scalarValueTypes": [
    {
      "protoType": "double",
      "notes": "",
      "cppType": "double",
      "csType": "double",
      "goType": "float64",
      "javaType": "double",
      "phpType": "float",
      "pythonType": "float",
      "rubyType": "Float"
    },
    {
      "protoType": "float",
      "notes": "",
      "cppType": "float",
      "csType": "float",
      "goType": "float32",
      "javaType": "float",
      "phpType": "float",
      "pythonType": "float",
      "rubyType": "Float"
    },
    {
      "protoType": "int32",
      "notes": "Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead.",
      "cppType": "int32",
      "csType": "int",
      "goType": "int32",
      "javaType": "int",
      "phpType": "integer",
      "pythonType": "int",
      "rubyType": "Bignum or Fixnum (as required)"
    },
    {
      "protoType": "int64",
      "notes": "Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead.",
      "cppType": "int64",
      "csType": "long",
      "goType": "int64",
      "javaType": "long",
      "phpType": "integer/string",
      "pythonType": "int/long",
      "rubyType": "Bignum"
    },
    {
      "protoType": "uint32",
      "notes": "Uses variable-length encoding.",
      "cppType": "uint32",
      "csType": "uint",
      "goType": "uint32",
      "javaType": "int",
      "phpType": "integer",
      "pythonType": "int/long",
      "rubyType": "Bignum or Fixnum (as required)"
    },
    {
      "protoType": "uint64",
      "notes": "Uses variable-length encoding.",
      "cppType": "uint64",
      "csType": "ulong",
      "goType": "uint64",
      "javaType": "long",
      "phpType": "integer/string",
      "pythonType": "int/long",
      "rubyType": "Bignum or Fixnum (as required)"
    },
    {
      "protoType": "sint32",
      "notes": "Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s.",
      "cppType": "int32",
      "csType": "int",
      "goType": "int32",
      "javaType": "int",
      "phpType": "integer",
      "pythonType": "int",
      "rubyType": "Bignum or Fixnum (as required)"
    },
    {
      "protoType": "sint64",
      "notes": "Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s.",
      "cppType": "int64",
      "csType": "long",
      "goType": "int64",
      "javaType": "long",
      "phpType": "integer/string",
      "pythonType": "int/long",
      "rubyType": "Bignum"
    },
    {
      "protoType": "fixed32",
      "notes": "Always four bytes. More efficient than uint32 if values are often greater than 2^28.",
      "cppType": "uint32",
      "csType": "uint",
      "goType": "uint32",
      "javaType": "int",
      "phpType": "integer",
      "pythonType": "int",
      "rubyType": "Bignum or Fixnum (as required)"
    },
    {
      "protoType": "fixed64",
      "notes": "Always eight bytes. More efficient than uint64 if values are often greater than 2^56.",
      "cppType": "uint64",
      "csType": "ulong",
      "goType": "uint64",
      "javaType": "long",
      "phpType": "integer/string",
      "pythonType": "int/long",
      "rubyType": "Bignum"
    },
    {
      "protoType": "sfixed32",
      "notes": "Always four bytes.",
      "cppType": "int32",
      "csType": "int",
      "goType": "int32",
      "javaType": "int",
      "phpType": "integer",
      "pythonType": "int",
      "rubyType": "Bignum or Fixnum (as required)"
    },
    {
      "protoType": "sfixed64",
      "notes": "Always eight bytes.",
      "cppType": "int64",
      "csType": "long",
      "goType": "int64",
      "javaType": "long",
      "phpType": "integer/string",
      "pythonType": "int/long",
      "rubyType": "Bignum"
    },
    {
      "protoType": "bool",
      "notes": "",
      "cppType": "bool",
      "csType": "bool",
      "goType": "bool",
      "javaType": "boolean",
      "phpType": "boolean",
      "pythonType": "boolean",
      "rubyType": "TrueClass/FalseClass"
    },
    {
      "protoType": "string",
      "notes": "A string must always contain UTF-8 encoded or 7-bit ASCII text.",
      "cppType": "string",
      "csType": "string",
      "goType": "string",
      "javaType": "String",
      "phpType": "string",
      "pythonType": "str/unicode",
      "rubyType": "String (UTF-8)"
    },
    {
      "protoType": "bytes",
      "notes": "May contain any arbitrary sequence of bytes.",
      "cppType": "string",
      "csType": "ByteString",
      "goType": "[]byte",
      "javaType": "ByteString",
      "phpType": "string",
      "pythonType": "str",
      "rubyType": "String (ASCII-8BIT)"
    }
  ]
}