{
  "files": [
    {
      "name": "keyapis/access_management/v1/keyapis_access_management_group_v1.proto",
      "description": "Сервис реализует функционал управления доступом пользователями к ресурсам",
      "package": "keyapis.access_management.v1",
      "hasEnums": false,
      "hasExtensions": false,
      "hasMessages": true,
      "hasServices": true,
      "enums": [
        {
          "name": "DirectionType",
          "longName": "GroupClaimPaging.DirectionType",
          "fullName": "keyapis.access_management.v1.GroupClaimPaging.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": "GroupClaimPaging.OrderByType",
          "fullName": "keyapis.access_management.v1.GroupClaimPaging.OrderByType",
          "description": "Справочник типов значений сортировки.\n# Тип: byte",
          "values": [
            {
              "name": "ORDER_BY_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "KEY",
              "number": "1",
              "description": "По ключу атрибута"
            },
            {
              "name": "VALUE",
              "number": "2",
              "description": "По значению атрибута"
            }
          ]
        },
        {
          "name": "DirectionType",
          "longName": "GroupPaging.DirectionType",
          "fullName": "keyapis.access_management.v1.GroupPaging.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": "GroupPaging.OrderByType",
          "fullName": "keyapis.access_management.v1.GroupPaging.OrderByType",
          "description": "Справочник типов значений сортировки.\n# Тип: byte",
          "values": [
            {
              "name": "ORDER_BY_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "ID",
              "number": "1",
              "description": "По идентификатору"
            },
            {
              "name": "TITLE",
              "number": "2",
              "description": "По наименованию"
            }
          ]
        },
        {
          "name": "DirectionType",
          "longName": "GroupUserPaging.DirectionType",
          "fullName": "keyapis.access_management.v1.GroupUserPaging.DirectionType",
          "description": "Справочник типов направлений сортировки",
          "values": [
            {
              "name": "DIRECTION_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "DESC",
              "number": "1",
              "description": "От большего к меньшему"
            },
            {
              "name": "ASC",
              "number": "2",
              "description": "От меньшего к большему"
            }
          ]
        },
        {
          "name": "OrderByType",
          "longName": "GroupUserPaging.OrderByType",
          "fullName": "keyapis.access_management.v1.GroupUserPaging.OrderByType",
          "description": "Справочник типов сортировки",
          "values": [
            {
              "name": "ORDER_BY_TYPE_UNKNOWN",
              "number": "0",
              "description": "Значение не указано"
            },
            {
              "name": "GROUP_ID",
              "number": "1",
              "description": "По Идентификатору группы"
            },
            {
              "name": "USER_ID",
              "number": "2",
              "description": "По Идентификатору пользователя"
            }
          ]
        }
      ],
      "extensions": [],
      "messages": [
        {
          "name": "Claim",
          "longName": "Claim",
          "fullName": "keyapis.access_management.v1.Claim",
          "description": "Атрибут пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "key",
              "description": "Ключ атрибута",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            },
            {
              "name": "value",
              "description": "Значение атрибута",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "DeleteGroupRequest",
          "longName": "DeleteGroupRequest",
          "fullName": "keyapis.access_management.v1.DeleteGroupRequest",
          "description": "Запрос удаления группы",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "id",
              "description": "Идентификатор группы.\n# Тип: Guid",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "DeleteGroupResponse",
          "longName": "DeleteGroupResponse",
          "fullName": "keyapis.access_management.v1.DeleteGroupResponse",
          "description": "Ответ на запрос удаления группы",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "GetGroupClaimCountRequest",
          "longName": "GetGroupClaimCountRequest",
          "fullName": "keyapis.access_management.v1.GetGroupClaimCountRequest",
          "description": "Запрос получения количества уникальных назначенных атрибутов пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр атрибутов пользователя",
              "label": "",
              "type": "GroupClaimFilter",
              "longType": "GroupClaimFilter",
              "fullType": "keyapis.access_management.v1.GroupClaimFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetGroupClaimCountResponse",
          "longName": "GetGroupClaimCountResponse",
          "fullName": "keyapis.access_management.v1.GetGroupClaimCountResponse",
          "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": "GetGroupClaimExistRequest",
          "longName": "GetGroupClaimExistRequest",
          "fullName": "keyapis.access_management.v1.GetGroupClaimExistRequest",
          "description": "Запрос проверки назначенных атрибутов пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр атрибутов пользователя",
              "label": "",
              "type": "GroupClaimFilter",
              "longType": "GroupClaimFilter",
              "fullType": "keyapis.access_management.v1.GroupClaimFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetGroupClaimExistResponse",
          "longName": "GetGroupClaimExistResponse",
          "fullName": "keyapis.access_management.v1.GetGroupClaimExistResponse",
          "description": "Ответ на запрос проверки назначенных атрибутов пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Флаг наличия",
              "label": "",
              "type": "bool",
              "longType": "bool",
              "fullType": "bool",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "GetGroupClaimExistResponse.Error",
              "fullType": "keyapis.access_management.v1.GetGroupClaimExistResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "GetGroupClaimExistResponse.Error",
          "fullName": "keyapis.access_management.v1.GetGroupClaimExistResponse.Error",
          "description": "Ошибка запроса",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "claim_filter_empty",
              "description": "Ошибка пустого фильтра по атрибутам пользователя",
              "label": "",
              "type": "ClaimFilterEmptyError",
              "longType": "GetGroupClaimExistResponse.Error.ClaimFilterEmptyError",
              "fullType": "keyapis.access_management.v1.GetGroupClaimExistResponse.Error.ClaimFilterEmptyError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "ClaimFilterEmptyError",
          "longName": "GetGroupClaimExistResponse.Error.ClaimFilterEmptyError",
          "fullName": "keyapis.access_management.v1.GetGroupClaimExistResponse.Error.ClaimFilterEmptyError",
          "description": "Ошибка пустого фильтра по атрибутам пользователя",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "GetGroupClaimListRequest",
          "longName": "GetGroupClaimListRequest",
          "fullName": "keyapis.access_management.v1.GetGroupClaimListRequest",
          "description": "Запрос уникального списка назначенных атрибутов пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр атрибутов пользователя",
              "label": "",
              "type": "GroupClaimFilter",
              "longType": "GroupClaimFilter",
              "fullType": "keyapis.access_management.v1.GroupClaimFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "paging",
              "description": "Пагинация по атрибутам пользователя",
              "label": "",
              "type": "GroupClaimPaging",
              "longType": "GroupClaimPaging",
              "fullType": "keyapis.access_management.v1.GroupClaimPaging",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "pagination",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "GetGroupClaimListResponse",
          "longName": "GetGroupClaimListResponse",
          "fullName": "keyapis.access_management.v1.GetGroupClaimListResponse",
          "description": "Ответ на запрос уникального списка назначенных атрибутов пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Атрибут пользователя",
              "label": "",
              "type": "Claim",
              "longType": "Claim",
              "fullType": "keyapis.access_management.v1.Claim",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetGroupCountRequest",
          "longName": "GetGroupCountRequest",
          "fullName": "keyapis.access_management.v1.GetGroupCountRequest",
          "description": "Запрос получения количества групп",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр",
              "label": "",
              "type": "GroupFilter",
              "longType": "GroupFilter",
              "fullType": "keyapis.access_management.v1.GroupFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetGroupCountResponse",
          "longName": "GetGroupCountResponse",
          "fullName": "keyapis.access_management.v1.GetGroupCountResponse",
          "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": "GetGroupCountResponse.Error",
              "fullType": "keyapis.access_management.v1.GetGroupCountResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "GetGroupCountResponse.Error",
          "fullName": "keyapis.access_management.v1.GetGroupCountResponse.Error",
          "description": "Ошибка запроса получения количества групп",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "ValidationError",
              "fullType": "keyapis.access_management.v1.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetGroupListRequest",
          "longName": "GetGroupListRequest",
          "fullName": "keyapis.access_management.v1.GetGroupListRequest",
          "description": "Запрос получения списка групп",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр",
              "label": "",
              "type": "GroupFilter",
              "longType": "GroupFilter",
              "fullType": "keyapis.access_management.v1.GroupFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "paging",
              "description": "Пагинация",
              "label": "",
              "type": "GroupPaging",
              "longType": "GroupPaging",
              "fullType": "keyapis.access_management.v1.GroupPaging",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "pagination",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "GetGroupListResponse",
          "longName": "GetGroupListResponse",
          "fullName": "keyapis.access_management.v1.GetGroupListResponse",
          "description": "Ответ на запрос получения списка групп",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Группа",
              "label": "",
              "type": "Group",
              "longType": "Group",
              "fullType": "keyapis.access_management.v1.Group",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "GetGroupListResponse.Error",
              "fullType": "keyapis.access_management.v1.GetGroupListResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "GetGroupListResponse.Error",
          "fullName": "keyapis.access_management.v1.GetGroupListResponse.Error",
          "description": "Ошибка запроса получения списка групп",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "ValidationError",
              "fullType": "keyapis.access_management.v1.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetGroupRequest",
          "longName": "GetGroupRequest",
          "fullName": "keyapis.access_management.v1.GetGroupRequest",
          "description": "Запрос получения группы",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "id",
              "description": "Идентификатор группы.\n# Тип: Guid",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "GetGroupResponse",
          "longName": "GetGroupResponse",
          "fullName": "keyapis.access_management.v1.GetGroupResponse",
          "description": "Ответ на запрос получения группы",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Группа",
              "label": "",
              "type": "Group",
              "longType": "Group",
              "fullType": "keyapis.access_management.v1.Group",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "GetGroupResponse.Error",
              "fullType": "keyapis.access_management.v1.GetGroupResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "GetGroupResponse.Error",
          "fullName": "keyapis.access_management.v1.GetGroupResponse.Error",
          "description": "Ошибка запроса получения группы",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "ValidationError",
              "fullType": "keyapis.access_management.v1.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetGroupUserCountRequest",
          "longName": "GetGroupUserCountRequest",
          "fullName": "keyapis.access_management.v1.GetGroupUserCountRequest",
          "description": "Запрос получения количества связей пользователей и групп",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр связей пользователей и групп",
              "label": "",
              "type": "GroupUserFilter",
              "longType": "GroupUserFilter",
              "fullType": "keyapis.access_management.v1.GroupUserFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "GetGroupUserCountResponse",
          "longName": "GetGroupUserCountResponse",
          "fullName": "keyapis.access_management.v1.GetGroupUserCountResponse",
          "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": "GetGroupUserListRequest",
          "longName": "GetGroupUserListRequest",
          "fullName": "keyapis.access_management.v1.GetGroupUserListRequest",
          "description": "Запрос получения списка связей пользователей и групп",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "filter",
              "description": "Фильтр связей пользователей и групп",
              "label": "",
              "type": "GroupUserFilter",
              "longType": "GroupUserFilter",
              "fullType": "keyapis.access_management.v1.GroupUserFilter",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "paging",
              "description": "Пагинация",
              "label": "",
              "type": "GroupUserPaging",
              "longType": "GroupUserPaging",
              "fullType": "keyapis.access_management.v1.GroupUserPaging",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "pagination",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "GetGroupUserListResponse",
          "longName": "GetGroupUserListResponse",
          "fullName": "keyapis.access_management.v1.GetGroupUserListResponse",
          "description": "Ответ на запрос получения списка связей пользователей и групп",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Связь пользователя и группы",
              "label": "",
              "type": "UserGroup",
              "longType": "UserGroup",
              "fullType": "keyapis.access_management.v1.UserGroup",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "Group",
          "longName": "Group",
          "fullName": "keyapis.access_management.v1.Group",
          "description": "Группа атрибутов пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "id",
              "description": "Идентификатор группы.\n# Тип: Guid",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "title",
              "description": "Наименование.\n# Диапазон: 3..256",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 2
            },
            {
              "name": "description",
              "description": "Описание.\n# Диапазон: 3..256",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 3
            },
            {
              "name": "claims",
              "description": "Массив атрибутов группы.\nЭти атрибуты назначены пользователям, которые принадлежат группе.\n# Диапазон: 0..100",
              "label": "repeated",
              "type": "Claim",
              "longType": "Claim",
              "fullType": "keyapis.access_management.v1.Claim",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 4
            },
            {
              "name": "requirements",
              "description": "Требования, означающие принадлежность пользователя к данной группе.\nПользователь принадлежит группе, если все атрибуты требований группы присутствуют у пользователя и имеют те же значения.\n# Диапазон: 0..10",
              "label": "repeated",
              "type": "Claim",
              "longType": "Claim",
              "fullType": "keyapis.access_management.v1.Claim",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 5
            },
            {
              "name": "deleted_at",
              "description": "Дата удаления группы из использования.\nГруппа не участвует в определении разрешений пользователя, если дата deleted_at непустая и уже в прошлом",
              "label": "",
              "type": "Timestamp",
              "longType": "google.protobuf.Timestamp",
              "fullType": "google.protobuf.Timestamp",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 6
            },
            {
              "name": "tags",
              "description": "Теги группы.\n# Диапазон: 0..10",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 7
            }
          ]
        },
        {
          "name": "GroupClaimFilter",
          "longName": "GroupClaimFilter",
          "fullName": "keyapis.access_management.v1.GroupClaimFilter",
          "description": "Фильтр атрибутов пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "user_id",
              "description": "По идентификатору пользователя.\nСоответствует subject, sub, client_id из JWT.\nДля пользователя Ключа это user_id Ключа",
              "label": "",
              "type": "StringValue",
              "longType": "google.protobuf.StringValue",
              "fullType": "google.protobuf.StringValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "claims",
              "description": "По назначенным атрибутам пользователя.\nФильтр ограничивает возвращаемые атрибуты данным списком.\nВозвращаем атрибуты групп, у которых Claim.key=claims[n].key И (Claim.value=claims[n].value ИЛИ claims[n].value пустой).\nПри пустом GroupClaimFilter.claims не ограничиваем выдачу, отдаем все Claims, назначенные пользователю",
              "label": "repeated",
              "type": "ClaimsEntry",
              "longType": "GroupClaimFilter.ClaimsEntry",
              "fullType": "keyapis.access_management.v1.GroupClaimFilter.ClaimsEntry",
              "ismap": true,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            },
            {
              "name": "user_data",
              "description": "По условию принадлежности к группе.\nПользователь принадлежит группе, если user_data полностью удовлетворяет требованиям группы, то есть user_data содержит в себе Group.requirements целиком",
              "label": "",
              "type": "UserData",
              "longType": "GroupClaimFilter.UserData",
              "fullType": "keyapis.access_management.v1.GroupClaimFilter.UserData",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 3
            },
            {
              "name": "api_key_hash",
              "description": "Хешированное SHA256 значение ключа доступа ApiKey",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 4
            }
          ]
        },
        {
          "name": "ClaimsEntry",
          "longName": "GroupClaimFilter.ClaimsEntry",
          "fullName": "keyapis.access_management.v1.GroupClaimFilter.ClaimsEntry",
          "description": "",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "key",
              "description": "",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "value",
              "description": "",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "UserData",
          "longName": "GroupClaimFilter.UserData",
          "fullName": "keyapis.access_management.v1.GroupClaimFilter.UserData",
          "description": "Условие принадлежности к группе",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "claims",
              "description": "Атрибуты пользователя, claims которого мы хотим получить",
              "label": "repeated",
              "type": "ClaimsEntry",
              "longType": "GroupClaimFilter.UserData.ClaimsEntry",
              "fullType": "keyapis.access_management.v1.GroupClaimFilter.UserData.ClaimsEntry",
              "ismap": true,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "ClaimsEntry",
          "longName": "GroupClaimFilter.UserData.ClaimsEntry",
          "fullName": "keyapis.access_management.v1.GroupClaimFilter.UserData.ClaimsEntry",
          "description": "",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "key",
              "description": "",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "value",
              "description": "",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "GroupClaimPaging",
          "longName": "GroupClaimPaging",
          "fullName": "keyapis.access_management.v1.GroupClaimPaging",
          "description": "Пагинация атрибутов пользователя",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "order_by_type",
              "description": "Тип значения сортировки.\nЕсли значение не передано, то будет взято значение по умолчанию.\n# По умолчанию: KEY",
              "label": "",
              "type": "OrderByType",
              "longType": "GroupClaimPaging.OrderByType",
              "fullType": "keyapis.access_management.v1.GroupClaimPaging.OrderByType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "direction_type",
              "description": "Тип направления сортировки.\n# По умолчанию: DESC",
              "label": "",
              "type": "DirectionType",
              "longType": "GroupClaimPaging.DirectionType",
              "fullType": "keyapis.access_management.v1.GroupClaimPaging.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": "GroupFilter",
          "longName": "GroupFilter",
          "fullName": "keyapis.access_management.v1.GroupFilter",
          "description": "Фильтр групп",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "text",
              "description": "По тексту.\nЕсли значение не передано то поиск по нему не производится.\n# Диапазон: 3..64.\n# Поиск производится по полям:\n# - Наименование",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "requirements",
              "description": "По requirements группы.\nВозвращаем группы, у которых Group.requirements.key=GroupFilter.requirements[n].key И Group.requirements.value=GroupFilter.requirements[n].value.\nПри пустом GroupFilter.requirements[n].value возвращаем все группы, у которых Group.requirements.key=GroupFilter.requirements[n].key.\nПри передаче нескольких элементов map они работают в выборке через И",
              "label": "repeated",
              "type": "RequirementsEntry",
              "longType": "GroupFilter.RequirementsEntry",
              "fullType": "keyapis.access_management.v1.GroupFilter.RequirementsEntry",
              "ismap": true,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            },
            {
              "name": "claims",
              "description": "По claims группы.\nВозвращаем группы, у которых Group.claim.key=GroupFilter.claims[n].key И Group.claims.value=GroupFilter.claims[n].value.\nПри пустом GroupFilter.claims[n].value возвращаем все группы, у которых Group.claims.key=GroupFilter.claims[n].key.\nПри передаче нескольких элементов map они работают в выборке через И",
              "label": "repeated",
              "type": "ClaimsEntry",
              "longType": "GroupFilter.ClaimsEntry",
              "fullType": "keyapis.access_management.v1.GroupFilter.ClaimsEntry",
              "ismap": true,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 3
            },
            {
              "name": "tags",
              "description": "По тегам.\n# Диапазон: 0..10",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 4
            },
            {
              "name": "hide_deleted",
              "description": "Скрывать удалённые элементы.\nЕсли значение — true, возвращаются только записи, у которых deleted_at = null или deleted_at \u003e текущего времени.\nЕсли значение — false или не задано, возвращаются все записи, включая удалённые",
              "label": "",
              "type": "BoolValue",
              "longType": "google.protobuf.BoolValue",
              "fullType": "google.protobuf.BoolValue",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 5
            }
          ]
        },
        {
          "name": "ClaimsEntry",
          "longName": "GroupFilter.ClaimsEntry",
          "fullName": "keyapis.access_management.v1.GroupFilter.ClaimsEntry",
          "description": "",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "key",
              "description": "",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "value",
              "description": "",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "RequirementsEntry",
          "longName": "GroupFilter.RequirementsEntry",
          "fullName": "keyapis.access_management.v1.GroupFilter.RequirementsEntry",
          "description": "",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "key",
              "description": "",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "value",
              "description": "",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "GroupPaging",
          "longName": "GroupPaging",
          "fullName": "keyapis.access_management.v1.GroupPaging",
          "description": "Пагинация групп",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "order_by_type",
              "description": "Тип значения сортировки.\nЕсли значение не передано, то будет взято значение по умолчанию.\n# По умолчанию: ID",
              "label": "",
              "type": "OrderByType",
              "longType": "GroupPaging.OrderByType",
              "fullType": "keyapis.access_management.v1.GroupPaging.OrderByType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "direction_type",
              "description": "Тип направления сортировки.\n# По умолчанию: DESC",
              "label": "",
              "type": "DirectionType",
              "longType": "GroupPaging.DirectionType",
              "fullType": "keyapis.access_management.v1.GroupPaging.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": "GroupTemplateNotFoundError",
          "longName": "GroupTemplateNotFoundError",
          "fullName": "keyapis.access_management.v1.GroupTemplateNotFoundError",
          "description": "Ошибки создания группы по шаблону",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "group_template_id",
              "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
            }
          ]
        },
        {
          "name": "GroupUserFilter",
          "longName": "GroupUserFilter",
          "fullName": "keyapis.access_management.v1.GroupUserFilter",
          "description": "Фильтр для запроса связей пользователей и групп.\nПри передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.\nПри передаче нескольких разных параметров фильтра они работают в выборке через И",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "group_ids",
              "description": "По Идентификаторам группы",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "user_ids",
              "description": "По Идентификаторам пользователя",
              "label": "repeated",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "GroupUserPaging",
          "longName": "GroupUserPaging",
          "fullName": "keyapis.access_management.v1.GroupUserPaging",
          "description": "Пагинация связей пользователей и групп",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "order_by_type",
              "description": "Тип значения сортировки.\nПо умолчанию: ID",
              "label": "",
              "type": "OrderByType",
              "longType": "GroupUserPaging.OrderByType",
              "fullType": "keyapis.access_management.v1.GroupUserPaging.OrderByType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "direction_type",
              "description": "Тип направления сортировки.\nПо умолчанию: DESC",
              "label": "",
              "type": "DirectionType",
              "longType": "GroupUserPaging.DirectionType",
              "fullType": "keyapis.access_management.v1.GroupUserPaging.DirectionType",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 2
            },
            {
              "name": "limit",
              "description": "Количество записей на страницу.\nМинимальное значение: 1.\nМаксимальное значение: 100.\nПо умолчанию: 20.\nЕсли значение 0 (не передано), то выставляем значение по умолчанию",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 3
            },
            {
              "name": "offset",
              "description": "Сдвиг.\nПо умолчанию: 0",
              "label": "",
              "type": "int32",
              "longType": "int32",
              "fullType": "int32",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 4
            }
          ]
        },
        {
          "name": "PostGroupByTemplateRequest",
          "longName": "PostGroupByTemplateRequest",
          "fullName": "keyapis.access_management.v1.PostGroupByTemplateRequest",
          "description": "Запрос создания группы по шаблону",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "group_template_id",
              "description": "Идентификатор шаблона группы.\n# Тип: Guid",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            },
            {
              "name": "group_title",
              "description": "Наименование создаваемой по шаблону группы.\nВ наименование группы будет добавлен суффикс GroupTemplate.group_title_suffix.\n# Диапазон: 3..256",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 2
            },
            {
              "name": "group_requirements",
              "description": "Специфичные для создаваемой по шаблону группы Claim requirements, они будут добавлены к requirements создаваемой по шаблону группы.\n# Диапазон: 0..10",
              "label": "repeated",
              "type": "Claim",
              "longType": "Claim",
              "fullType": "keyapis.access_management.v1.Claim",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "number": 3
            }
          ]
        },
        {
          "name": "PostGroupByTemplateResponse",
          "longName": "PostGroupByTemplateResponse",
          "fullName": "keyapis.access_management.v1.PostGroupByTemplateResponse",
          "description": "Ответ на запрос создания группы по шаблону",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Группа",
              "label": "",
              "type": "Group",
              "longType": "Group",
              "fullType": "keyapis.access_management.v1.Group",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "PostGroupByTemplateResponse.Error",
              "fullType": "keyapis.access_management.v1.PostGroupByTemplateResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "PostGroupByTemplateResponse.Error",
          "fullName": "keyapis.access_management.v1.PostGroupByTemplateResponse.Error",
          "description": "Ошибка запроса создания группы",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "ValidationError",
              "fullType": "keyapis.access_management.v1.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "group_template_not_found_error",
              "description": "Шаблон не найден",
              "label": "",
              "type": "GroupTemplateNotFoundError",
              "longType": "GroupTemplateNotFoundError",
              "fullType": "keyapis.access_management.v1.GroupTemplateNotFoundError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "PostGroupRequest",
          "longName": "PostGroupRequest",
          "fullName": "keyapis.access_management.v1.PostGroupRequest",
          "description": "Запрос сохранения группы",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Группа",
              "label": "",
              "type": "Group",
              "longType": "Group",
              "fullType": "keyapis.access_management.v1.Group",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "PostGroupResponse",
          "longName": "PostGroupResponse",
          "fullName": "keyapis.access_management.v1.PostGroupResponse",
          "description": "Ответ на запрос сохранения группы",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Группа",
              "label": "",
              "type": "Group",
              "longType": "Group",
              "fullType": "keyapis.access_management.v1.Group",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            },
            {
              "name": "error",
              "description": "Ошибка",
              "label": "",
              "type": "Error",
              "longType": "PostGroupResponse.Error",
              "fullType": "keyapis.access_management.v1.PostGroupResponse.Error",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 2
            }
          ]
        },
        {
          "name": "Error",
          "longName": "PostGroupResponse.Error",
          "fullName": "keyapis.access_management.v1.PostGroupResponse.Error",
          "description": "Ошибка запроса сохранения группы",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "validation",
              "description": "Ошибка валидации",
              "label": "",
              "type": "ValidationError",
              "longType": "ValidationError",
              "fullType": "keyapis.access_management.v1.ValidationError",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "reason",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "PutGroupApiKeyCreateRequest",
          "longName": "PutGroupApiKeyCreateRequest",
          "fullName": "keyapis.access_management.v1.PutGroupApiKeyCreateRequest",
          "description": "Запрос на добавления группе ключа доступа ApiKey",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "group_id",
              "description": "Идентификатор группы.\n# Тип: Guid",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "PutGroupApiKeyCreateResponse",
          "longName": "PutGroupApiKeyCreateResponse",
          "fullName": "keyapis.access_management.v1.PutGroupApiKeyCreateResponse",
          "description": "Ответ на запрос на добавления группе ключа доступа ApiKey",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": true,
          "extensions": [],
          "fields": [
            {
              "name": "data",
              "description": "Значение ключа доступа ApiKey.\n# Тип: Guid",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": true,
              "oneofdecl": "type",
              "defaultValue": "",
              "number": 1
            }
          ]
        },
        {
          "name": "PutGroupApiKeyDeleteRequest",
          "longName": "PutGroupApiKeyDeleteRequest",
          "fullName": "keyapis.access_management.v1.PutGroupApiKeyDeleteRequest",
          "description": "Запрос на удаление ключей доступа ApiKey",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "group_id",
              "description": "Идентификатор группы.\n# Тип: Guid",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "PutGroupApiKeyDeleteResponse",
          "longName": "PutGroupApiKeyDeleteResponse",
          "fullName": "keyapis.access_management.v1.PutGroupApiKeyDeleteResponse",
          "description": "Ответ на запрос на удаление ключей доступа ApiKey",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "PutGroupUserAttachRequest",
          "longName": "PutGroupUserAttachRequest",
          "fullName": "keyapis.access_management.v1.PutGroupUserAttachRequest",
          "description": "Запрос на добавление связи пользователя и группы",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "user_group",
              "description": "Связь пользователя и группы",
              "label": "",
              "type": "UserGroup",
              "longType": "UserGroup",
              "fullType": "keyapis.access_management.v1.UserGroup",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "PutGroupUserAttachResponse",
          "longName": "PutGroupUserAttachResponse",
          "fullName": "keyapis.access_management.v1.PutGroupUserAttachResponse",
          "description": "Ответ на добавление связи пользователя и группы",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "PutGroupUserDetachRequest",
          "longName": "PutGroupUserDetachRequest",
          "fullName": "keyapis.access_management.v1.PutGroupUserDetachRequest",
          "description": "Запрос на удаление связи пользователя и группы",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "user_group",
              "description": "Связь пользователя и группы",
              "label": "",
              "type": "UserGroup",
              "longType": "UserGroup",
              "fullType": "keyapis.access_management.v1.UserGroup",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            }
          ]
        },
        {
          "name": "PutGroupUserDetachResponse",
          "longName": "PutGroupUserDetachResponse",
          "fullName": "keyapis.access_management.v1.PutGroupUserDetachResponse",
          "description": "Ответ на запрос удаления точки доступа в профиль",
          "hasExtensions": false,
          "hasFields": false,
          "hasOneofs": false,
          "extensions": [],
          "fields": []
        },
        {
          "name": "UserGroup",
          "longName": "UserGroup",
          "fullName": "keyapis.access_management.v1.UserGroup",
          "description": "Связка пользователя с группой",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "user_id",
              "description": "Идентификатор пользователя.\nСоответствует subject, sub, client_id из JWT.\n# Диапазон: 3..256",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 1
            },
            {
              "name": "group_id",
              "description": "Идентификатор группы.\n# Тип: Guid",
              "label": "",
              "type": "string",
              "longType": "string",
              "fullType": "string",
              "ismap": false,
              "isoneof": false,
              "oneofdecl": "",
              "defaultValue": "",
              "options": {
                "google.api.field_behavior": {
                  "options": [
                    "REQUIRED"
                  ]
                }
              },
              "number": 2
            }
          ]
        },
        {
          "name": "ValidationError",
          "longName": "ValidationError",
          "fullName": "keyapis.access_management.v1.ValidationError",
          "description": "Ошибки валидации.\nЭти проверки выполняются до обращения в базу данных",
          "hasExtensions": false,
          "hasFields": true,
          "hasOneofs": false,
          "extensions": [],
          "fields": [
            {
              "name": "path",
              "description": "Путь к полю в формате наименования protobuf",
              "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": "GroupService",
          "longName": "GroupService",
          "fullName": "keyapis.access_management.v1.GroupService",
          "description": "Сервис управления доступом пользователей",
          "methods": [
            {
              "name": "GetGroup",
              "description": "Метод получения группы.\nМетод доступен для: admin, service, bti, seller",
              "requestType": "GetGroupRequest",
              "requestLongType": "GetGroupRequest",
              "requestFullType": "keyapis.access_management.v1.GetGroupRequest",
              "requestStreaming": false,
              "responseType": "GetGroupResponse",
              "responseLongType": "GetGroupResponse",
              "responseFullType": "keyapis.access_management.v1.GetGroupResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/access_management/api/v1/group/{id}"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetGroupList",
              "description": "Метод получения списка групп.\nМетод доступен для: admin, service, bti, seller",
              "requestType": "GetGroupListRequest",
              "requestLongType": "GetGroupListRequest",
              "requestFullType": "keyapis.access_management.v1.GetGroupListRequest",
              "requestStreaming": false,
              "responseType": "GetGroupListResponse",
              "responseLongType": "GetGroupListResponse",
              "responseFullType": "keyapis.access_management.v1.GetGroupListResponse",
              "responseStreaming": true,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/access_management/api/v1/group/list"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetGroupCount",
              "description": "Метод получения количества групп.\nМетод доступен для: admin, service, bti, seller",
              "requestType": "GetGroupCountRequest",
              "requestLongType": "GetGroupCountRequest",
              "requestFullType": "keyapis.access_management.v1.GetGroupCountRequest",
              "requestStreaming": false,
              "responseType": "GetGroupCountResponse",
              "responseLongType": "GetGroupCountResponse",
              "responseFullType": "keyapis.access_management.v1.GetGroupCountResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/access_management/api/v1/group/count"
                    }
                  ]
                }
              }
            },
            {
              "name": "PostGroup",
              "description": "Метод сохранения группы.\nПоддерживает создание и обновление как UPSERT по Group.id.\nМетод доступен для: admin, service",
              "requestType": "PostGroupRequest",
              "requestLongType": "PostGroupRequest",
              "requestFullType": "keyapis.access_management.v1.PostGroupRequest",
              "requestStreaming": false,
              "responseType": "PostGroupResponse",
              "responseLongType": "PostGroupResponse",
              "responseFullType": "keyapis.access_management.v1.PostGroupResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "POST",
                      "pattern": "/access_management/api/v1/group",
                      "body": "*"
                    }
                  ]
                }
              }
            },
            {
              "name": "DeleteGroup",
              "description": "Метод удаления группы.\nМетод доступен для: admin, service",
              "requestType": "DeleteGroupRequest",
              "requestLongType": "DeleteGroupRequest",
              "requestFullType": "keyapis.access_management.v1.DeleteGroupRequest",
              "requestStreaming": false,
              "responseType": "DeleteGroupResponse",
              "responseLongType": "DeleteGroupResponse",
              "responseFullType": "keyapis.access_management.v1.DeleteGroupResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "DELETE",
                      "pattern": "/access_management/api/v1/group/{id}"
                    }
                  ]
                }
              }
            },
            {
              "name": "PostGroupByTemplate",
              "description": "Метод создания группы по шаблону.\nМетод доступен для: admin, service, bti, seller",
              "requestType": "PostGroupByTemplateRequest",
              "requestLongType": "PostGroupByTemplateRequest",
              "requestFullType": "keyapis.access_management.v1.PostGroupByTemplateRequest",
              "requestStreaming": false,
              "responseType": "PostGroupByTemplateResponse",
              "responseLongType": "PostGroupByTemplateResponse",
              "responseFullType": "keyapis.access_management.v1.PostGroupByTemplateResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "POST",
                      "pattern": "/access_management/api/v1/group/by_template",
                      "body": "*"
                    }
                  ]
                }
              }
            },
            {
              "name": "PutGroupUserAttach",
              "description": "Метод привязки пользователя к группе.\nМетод доступен для: admin, owner, service, bti, seller",
              "requestType": "PutGroupUserAttachRequest",
              "requestLongType": "PutGroupUserAttachRequest",
              "requestFullType": "keyapis.access_management.v1.PutGroupUserAttachRequest",
              "requestStreaming": false,
              "responseType": "PutGroupUserAttachResponse",
              "responseLongType": "PutGroupUserAttachResponse",
              "responseFullType": "keyapis.access_management.v1.PutGroupUserAttachResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "PUT",
                      "pattern": "/access_management/api/v1/group/{user_group.group_id}/user/{user_group.user_id}/attach"
                    }
                  ]
                }
              }
            },
            {
              "name": "PutGroupUserDetach",
              "description": "Метод удаления привязки пользователя к группе.\nМетод доступен для: admin, owner, service, bti, seller",
              "requestType": "PutGroupUserDetachRequest",
              "requestLongType": "PutGroupUserDetachRequest",
              "requestFullType": "keyapis.access_management.v1.PutGroupUserDetachRequest",
              "requestStreaming": false,
              "responseType": "PutGroupUserDetachResponse",
              "responseLongType": "PutGroupUserDetachResponse",
              "responseFullType": "keyapis.access_management.v1.PutGroupUserDetachResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "PUT",
                      "pattern": "/access_management/api/v1/group/{user_group.group_id}/user/{user_group.user_id}/detach"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetGroupUserList",
              "description": "Метод получения списка связей пользователей и групп.\nМетод доступен для: admin, owner, service, bti, seller",
              "requestType": "GetGroupUserListRequest",
              "requestLongType": "GetGroupUserListRequest",
              "requestFullType": "keyapis.access_management.v1.GetGroupUserListRequest",
              "requestStreaming": false,
              "responseType": "GetGroupUserListResponse",
              "responseLongType": "GetGroupUserListResponse",
              "responseFullType": "keyapis.access_management.v1.GetGroupUserListResponse",
              "responseStreaming": true,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/access_management/api/v1/group/user/list"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetGroupUserCount",
              "description": "Метод получения количества связей пользователей и групп.\nМетод доступен для: admin, owner, service, bti, seller",
              "requestType": "GetGroupUserCountRequest",
              "requestLongType": "GetGroupUserCountRequest",
              "requestFullType": "keyapis.access_management.v1.GetGroupUserCountRequest",
              "requestStreaming": false,
              "responseType": "GetGroupUserCountResponse",
              "responseLongType": "GetGroupUserCountResponse",
              "responseFullType": "keyapis.access_management.v1.GetGroupUserCountResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/access_management/api/v1/group/user/count"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetGroupClaimList",
              "description": "Метод получения уникальных назначенных атрибутов пользователя.\nМетод также возвращает группы пользователя в виде атрибута (Claim) {key=GROUP_ID,value=Group.id}.\nБизнес-пользователи получают только свои разрешения, поэтому для всех пользователей, кроме admin, owner, service, bti, seller игнорируются GroupClaimFilter.user_id, GroupClaimFilter.user_data, GroupClaimFilter.api_key_hash, а значения для них берутся из токена.\nДля admin, owner, service, bti, seller при наличии GroupClaimFilter.user_id отдаем разрешения для указанного GroupClaimFilter.user_id и GroupClaimFilter.user_data, при отсутствии GroupClaimFilter.user_id значения берутся из токена.\nДля admin, service при наличии GroupClaimFilter.api_key_hash возвращаем Claim с учетом только GroupClaimFilter.api_key_hash.\nМетод доступен для: admin, master, slave, owner, employee, service, bti, seller, external_seller, ltp_first, mrf, manager",
              "requestType": "GetGroupClaimListRequest",
              "requestLongType": "GetGroupClaimListRequest",
              "requestFullType": "keyapis.access_management.v1.GetGroupClaimListRequest",
              "requestStreaming": false,
              "responseType": "GetGroupClaimListResponse",
              "responseLongType": "GetGroupClaimListResponse",
              "responseFullType": "keyapis.access_management.v1.GetGroupClaimListResponse",
              "responseStreaming": true,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/access_management/api/v1/group/claim/list"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetGroupClaimCount",
              "description": "Метод получения количества уникальных назначенных атрибутов пользователя.\nМетод также сосчитает и атрибуты групп {key=GROUP_ID,value=Group.id}.\nБизнес-пользователи получают только свои разрешения, поэтому для всех пользователей, кроме admin, owner, service, bti, seller игнорируются GroupClaimFilter.user_id, GroupClaimFilter.user_data, GroupClaimFilter.api_key_hash, а значения для них берутся из токена.\nДля admin, owner, service, bti, seller при наличии GroupClaimFilter.user_id отдаем разрешения для указанного GroupClaimFilter.user_id и GroupClaimFilter.user_data, при отсутствии GroupClaimFilter.user_id значения берутся из токена.\nДля admin, service при наличии GroupClaimFilter.api_key_hash возвращаем Claim с учетом только GroupClaimFilter.api_key_hash.\nМетод доступен для: admin, master, slave, owner, employee, service, bti, seller, external_seller, ltp_first, mrf, manager",
              "requestType": "GetGroupClaimCountRequest",
              "requestLongType": "GetGroupClaimCountRequest",
              "requestFullType": "keyapis.access_management.v1.GetGroupClaimCountRequest",
              "requestStreaming": false,
              "responseType": "GetGroupClaimCountResponse",
              "responseLongType": "GetGroupClaimCountResponse",
              "responseFullType": "keyapis.access_management.v1.GetGroupClaimCountResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/access_management/api/v1/group/claim/count"
                    }
                  ]
                }
              }
            },
            {
              "name": "GetGroupClaimExist",
              "description": "Метод проверки наличия назначенных атрибутов пользователя.\nМетод также проверит и атрибуты групп {key=GROUP_ID,value=Group.id}.\nБизнес-пользователи получают только свои разрешения, поэтому для всех пользователей, кроме admin, owner, service, bti, seller игнорируются GroupClaimFilter.user_id, GroupClaimFilter.user_data, GroupClaimFilter.api_key_hash, а значения для них берутся из токена.\nДля admin, owner, service, bti, seller при наличии GroupClaimFilter.user_id отдаем разрешения для указанного GroupClaimFilter.user_id и GroupClaimFilter.user_data, при отсутствии GroupClaimFilter.user_id значения берутся из токена.\nДля admin, service при наличии GroupClaimFilter.api_key_hash возвращаем Claim с учетом только GroupClaimFilter.api_key_hash.\nМетод доступен для: admin, master, slave, owner, employee, service, bti, seller, external_seller, ltp_first, mrf, manager",
              "requestType": "GetGroupClaimExistRequest",
              "requestLongType": "GetGroupClaimExistRequest",
              "requestFullType": "keyapis.access_management.v1.GetGroupClaimExistRequest",
              "requestStreaming": false,
              "responseType": "GetGroupClaimExistResponse",
              "responseLongType": "GetGroupClaimExistResponse",
              "responseFullType": "keyapis.access_management.v1.GetGroupClaimExistResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "GET",
                      "pattern": "/access_management/api/v1/group/claim/exist"
                    }
                  ]
                }
              }
            },
            {
              "name": "PutGroupApiKeyCreate",
              "description": "Метод добавления ключа доступа ApiKey.\nМетод доступен для: admin",
              "requestType": "PutGroupApiKeyCreateRequest",
              "requestLongType": "PutGroupApiKeyCreateRequest",
              "requestFullType": "keyapis.access_management.v1.PutGroupApiKeyCreateRequest",
              "requestStreaming": false,
              "responseType": "PutGroupApiKeyCreateResponse",
              "responseLongType": "PutGroupApiKeyCreateResponse",
              "responseFullType": "keyapis.access_management.v1.PutGroupApiKeyCreateResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "PUT",
                      "pattern": "/access_management/api/v1/group/{group_id}/api_key/create"
                    }
                  ]
                }
              }
            },
            {
              "name": "PutGroupApiKeyDelete",
              "description": "Метод удаления ключей доступа ApiKey.\nМетод доступен для: admin",
              "requestType": "PutGroupApiKeyDeleteRequest",
              "requestLongType": "PutGroupApiKeyDeleteRequest",
              "requestFullType": "keyapis.access_management.v1.PutGroupApiKeyDeleteRequest",
              "requestStreaming": false,
              "responseType": "PutGroupApiKeyDeleteResponse",
              "responseLongType": "PutGroupApiKeyDeleteResponse",
              "responseFullType": "keyapis.access_management.v1.PutGroupApiKeyDeleteResponse",
              "responseStreaming": false,
              "options": {
                "google.api.http": {
                  "rules": [
                    {
                      "method": "PUT",
                      "pattern": "/access_management/api/v1/group/{group_id}/api_key/delete"
                    }
                  ]
                }
              }
            }
          ]
        }
      ],
      "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)"
    }
  ]
}