# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: scalekit/v1/users/users.proto
# Protobuf Python Version: 5.26.1
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()


from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2
from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2
from google.api import visibility_pb2 as google_dot_api_dot_visibility__pb2
from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
from protoc_gen_openapiv2.options import annotations_pb2 as protoc__gen__openapiv2_dot_options_dot_annotations__pb2
from scalekit.v1.commons import commons_pb2 as scalekit_dot_v1_dot_commons_dot_commons__pb2
from scalekit.v1.errdetails import errdetails_pb2 as scalekit_dot_v1_dot_errdetails_dot_errdetails__pb2
from scalekit.v1.options import options_pb2 as scalekit_dot_v1_dot_options_dot_options__pb2


DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dscalekit/v1/users/users.proto\x12\x11scalekit.v1.users\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a!scalekit/v1/commons/commons.proto\x1a\'scalekit/v1/errdetails/errdetails.proto\x1a!scalekit/v1/options/options.proto\"\xf4\r\n\x04User\x12u\n\x02id\x18\x01 \x01(\tBe\x92\x41\x62\x32HUnique system-generated identifier for the user. Immutable once created.J\x16\"usr_1234abcd5678efgh\"R\x02id\x12\xaf\x01\n\x0e\x65nvironment_id\x18\x02 \x01(\tB\x87\x01\x92\x41r2XIdentifier of the environment where the user was created. System-assigned and read-only.J\x16\"env_9876zyxw5432vuts\"\xe0\x41\x03\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\renvironmentId\x12\x9c\x01\n\x0b\x63reate_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB_\x92\x41Y2WTimestamp when the user account was initially created. Automatically set by the server.\xe0\x41\x03R\ncreateTime\x12\xa1\x01\n\x0bupdate_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampBd\x92\x41^2\\Timestamp of the last modification to the user account. Automatically updated by the server.\xe0\x41\x03R\nupdateTime\x12\x98\x01\n\x05\x65mail\x18\x05 \x01(\tB\x81\x01\x92\x41w2aPrimary email address for the user. Must be unique across the environment and valid per RFC 5322.J\x12\"user@example.com\"\xbaH\x04r\x02`\x01R\x05\x65mail\x12\xa2\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tB|\x92\x41y2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x12\"ext_12345a67b89c\"H\x00R\nexternalId\x88\x01\x01\x12\xa9\x01\n\x0bmemberships\x18\x07 \x03(\x0b\x32+.scalekit.v1.commons.OrganizationMembershipBZ\x92\x41W2UList of organization memberships. Automatically populated based on group assignments.R\x0bmemberships\x12\x9c\x01\n\x0cuser_profile\x18\x08 \x01(\x0b\x32 .scalekit.v1.commons.UserProfileBW\x92\x41T2RUser\'s personal information including name, address, and other profile attributes.R\x0buserProfile\x12\x80\x02\n\x08metadata\x18\t \x03(\x0b\x32%.scalekit.v1.users.User.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa4\x01\n\nlast_login\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampBi\x92\x41W2UTimestamp of the user\'s most recent successful authentication. Updated automatically.\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWR\tlastLogin\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_id\"\xa6\x02\n\x1e\x43reateUserAndMembershipRequest\x12\'\n\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12\x39\n\x04user\x18\x02 \x01(\x0b\x32\x1d.scalekit.v1.users.CreateUserB\x06\xbaH\x03\xc8\x01\x01R\x04user\x12\x85\x01\n\x15send_invitation_email\x18\x03 \x01(\x08\x42L\x92\x41I2AIf true, sends an activation email to the user. Defaults to true.J\x04trueH\x00R\x13sendInvitationEmail\x88\x01\x01\x42\x18\n\x16_send_invitation_email\"N\n\x1f\x43reateUserAndMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xbc\x05\n\nUpdateUser\x12\xa2\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tB|\x92\x41y2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x12\"ext_12345a67b89c\"H\x00R\nexternalId\x88\x01\x01\x12\xa0\x01\n\x0cuser_profile\x18\x08 \x01(\x0b\x32$.scalekit.v1.users.UpdateUserProfileBW\x92\x41T2RUser\'s personal information including name, address, and other profile attributes.R\x0buserProfile\x12\x86\x02\n\x08metadata\x18\t \x03(\x0b\x32+.scalekit.v1.users.UpdateUser.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idJ\x04\x08\x01\x10\x06J\x04\x08\x07\x10\x08J\x04\x08\n\x10\x0b\"\xab\x04\n\x11UpdateUserRequest\x12\x8c\x01\n\x02id\x18\x01 \x01(\tBz\x92\x41h2NSystem-generated user ID. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x9a\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBw\x92\x41t2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\r\"ext_7890xyz\"H\x00R\nexternalId\x12\xdb\x01\n\x04user\x18\x03 \x01(\x0b\x32\x1d.scalekit.v1.users.UpdateUserB\xa7\x01\x92\x41\x9d\x01\x32qUser fields to update. Only specified fields will be modified. Required fields must be provided if being changed.J({\"firstName\": \"John\", \"lastName\": \"Doe\"}\xbaH\x03\xc8\x01\x01R\x04userB\x0c\n\nidentities\"A\n\x12UpdateUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\x93\x02\n\x0eGetUserRequest\x12V\n\x02id\x18\x01 \x01(\tBD\x92\x41\x32\x32\x18System-generated user IDJ\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04usr_H\x00R\x02id\x12\x9a\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBw\x92\x41t2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\r\"ext_7890xyz\"H\x00R\nexternalIdB\x0c\n\nidentities\">\n\x0fGetUserResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xf4\x04\n\x1cListOrganizationUsersRequest\x12\xc9\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9f\x01\x92\x41\x8c\x01\x32rUnique identifier of the organization for which to list users. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xa9\x01\n\tpage_size\x18\x02 \x01(\rB\x8b\x01\x92\x41\x7f\x32yMaximum number of users to return in a single response. Valid range: 1-100. Server may return fewer users than specified.J\x02\x35\x30\xbaH\x06*\x04\x18\x64(\x00R\x08pageSize\x12\xdb\x01\n\npage_token\x18\x03 \x01(\tB\xbb\x01\x92\x41\xb7\x01\x32\x80\x01Pagination token from a previous ListUserResponse. Used to retrieve the next page of results. Leave empty for the first request.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\tpageToken\"\xa4\x05\n\x1dListOrganizationUsersResponse\x12\xba\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x91\x01\x92\x41\x8d\x01\x32WOpaque token for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12\x92\x01\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserBc\x92\x41`2^List of user objects for the current page. May contain fewer entries than requested page_size.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SOpaque token for retrieving the previous page of results. Empty for the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xfd\x04\n\x17\x44\x65leteMembershipRequest\x12\xa7\x01\n\x0forganization_id\x18\x01 \x01(\tB~\x92\x41l2RUnique organization identifier. Must start with \'org_\' and be 1-32 characters longJ\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x81\x01\n\x02id\x18\x02 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x89\x01\n\x0b\x65xternal_id\x18\x03 \x01(\tBf\x92\x41\x63\x32RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"H\x00R\nexternalId\x12\x8d\x01\n\x07\x63\x61scade\x18\x05 \x01(\x08\x42n\x92\x41\\2SIf true, if user has no memberships left the user is also deleted. defaults to trueJ\x05\x66\x61lse\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEWH\x01R\x07\x63\x61scade\x88\x01\x01\x42\x0c\n\nidentitiesB\n\n\x08_cascade\"\xaa\x06\n\x17\x43reateMembershipRequest\x12\xb7\x01\n\x0forganization_id\x18\x01 \x01(\tB\x8d\x01\x92\x41{2aUnique identifier of the target organization. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x8f\x01\n\nmembership\x18\x02 \x01(\x0b\x32#.scalekit.v1.users.CreateMembershipBJ\x92\x41\x41\x32?Membership details to create. Required fields must be provided.\xbaH\x03\xc8\x01\x01R\nmembership\x12\x81\x01\n\x02id\x18\x03 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x8e\x01\n\x0b\x65xternal_id\x18\x04 \x01(\tBk\x92\x41h2WExternal system identifier from connected directories. Must be unique across the systemJ\r\"ext_7890xyz\"H\x00R\nexternalId\x12\x85\x01\n\x15send_invitation_email\x18\x05 \x01(\x08\x42L\x92\x41I2AIf true, sends an activation email to the user. Defaults to true.J\x04trueH\x01R\x13sendInvitationEmail\x88\x01\x01\x42\x0c\n\nidentitiesB\x18\n\x16_send_invitation_email\"G\n\x18\x43reateMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\x9a\x02\n\x10ListUsersRequest\x12t\n\tpage_size\x18\x01 \x01(\rBW\x92\x41T2NMaximum number of organizations to return per page. Must be between 10 and 100J\x02\x33\x30R\x08pageSize\x12\x8f\x01\n\npage_token\x18\x02 \x01(\tBp\x92\x41m2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\x0e\"<page_token>\"R\tpageToken\"\xc0\x04\n\x11ListUsersResponse\x12\x42\n\x05users\x18\x01 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x13\x92\x41\x10\x32\x0eList of users.R\x05users\x12\xb3\x01\n\x0fnext_page_token\x18\x02 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x03 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xe3\x03\n\x12SearchUsersRequest\x12\xaa\x01\n\x05query\x18\x01 \x01(\tB\x93\x01\x92\x41\x83\x01\x32oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x10john@example.com\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12x\n\tpage_size\x18\x02 \x01(\rB[\x92\x41Q2KMaximum number of users to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x03 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xcb\x04\n\x13SearchUsersResponse\x12\xb3\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12K\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x1c\x92\x41\x19\x32\x17List of matching users.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\xb1\x02\n\x11\x44\x65leteUserRequest\x12\x81\x01\n\x02id\x18\x01 \x01(\tBo\x92\x41]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12\x89\x01\n\x0b\x65xternal_id\x18\x02 \x01(\tBf\x92\x41\x63\x32RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"H\x00R\nexternalIdB\x0c\n\nidentities\"\x9a\x05\n\x17UpdateMembershipRequest\x12\xcb\x01\n\x0forganization_id\x18\x01 \x01(\tB\xa1\x01\x92\x41\x8e\x01\x32tUnique identifier of the organization containing the membership. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\x8c\x01\n\x02id\x18\x02 \x01(\tBz\x92\x41h2NSystem-generated user ID. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_H\x00R\x02id\x12j\n\x0b\x65xternal_id\x18\x03 \x01(\tBG\x92\x41\x44\x32\x33Your application\'s unique identifier for this user.J\r\"ext_7890xyz\"H\x00R\nexternalId\x12\xa7\x01\n\nmembership\x18\x05 \x01(\x0b\x32#.scalekit.v1.users.UpdateMembershipBb\x92\x41Y2DMembership fields to update. Only specified fields will be modified.J\x11{\"role\": \"admin\"}\xbaH\x03\xc8\x01\x01R\nmembershipB\x0c\n\nidentities\"\xfb\x03\n\x10UpdateMembership\x12}\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleBL\x92\x41I22Role to assign to the user within the organizationJ\x13[{\"name\": \"admin\"}]R\x05roles\x12\x8c\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x31.scalekit.v1.users.UpdateMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"\xb4\x05\n\x10\x43reateMembership\x12}\n\x05roles\x18\x04 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleBL\x92\x41I22Role to assign to the user within the organizationJ\x13[{\"name\": \"admin\"}]R\x05roles\x12\x8c\x02\n\x08metadata\x18\x07 \x03(\x0b\x32\x31.scalekit.v1.users.CreateMembership.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa4\x01\n\rinviter_email\x18\x08 \x01(\tBz\x92\x41k2QEmail address of the user who invited this member. Must be a valid email address.J\x16\"john.doe@example.com\"\xbaH\tr\x07\x10\x05\x18\xfe\x01`\x01H\x00R\x0cinviterEmail\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x10\n\x0e_inviter_emailJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"G\n\x18UpdateMembershipResponse\x12+\n\x04user\x18\x01 \x01(\x0b\x32\x17.scalekit.v1.users.UserR\x04user\"\xb7\x05\n\x1eSearchOrganizationUsersRequest\x12\xc5\x01\n\x0forganization_id\x18\x01 \x01(\tB\x9b\x01\x92\x41\x85\x01\x32kUnique identifier of the organization to search within. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0fr\n\x10\x01\x18 :\x04org_\xc8\x01\x01R\x0eorganizationId\x12\xaa\x01\n\x05query\x18\x02 \x01(\tB\x93\x01\x92\x41\x83\x01\x32oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\x10john@example.com\xbaH\tr\x04\x10\x03\x18\x64\xc8\x01\x01R\x05query\x12x\n\tpage_size\x18\x03 \x01(\rB[\x92\x41Q2KMaximum number of users to return per page. Value must be between 1 and 30.J\x02\x33\x30\xbaH\x04*\x02\x18\x1eR\x08pageSize\x12\xa5\x01\n\npage_token\x18\x04 \x01(\tB\x85\x01\x92\x41\x81\x01\x32\x61Token from a previous response for pagination. Provide this to retrieve the next page of results.J\x1c\x65yJwYWdlIjoyLCJsaW1pdCI6MzB9R\tpageToken\"\xd7\x04\n\x1fSearchOrganizationUsersResponse\x12\xb3\x01\n\x0fnext_page_token\x18\x01 \x01(\tB\x8a\x01\x92\x41\x86\x01\x32PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"R\rnextPageToken\x12x\n\ntotal_size\x18\x02 \x01(\rBY\x92\x41V2NTotal number of users matching the request criteria, regardless of pagination.J\x04\x31\x30\x34\x32R\ttotalSize\x12K\n\x05users\x18\x03 \x03(\x0b\x32\x17.scalekit.v1.users.UserB\x1c\x92\x41\x19\x32\x17List of matching users.R\x05users\x12\xb6\x01\n\x0fprev_page_token\x18\x04 \x01(\tB\x8d\x01\x92\x41\x89\x01\x32SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"R\rprevPageToken\"\x85\x08\n\nCreateUser\x12\x98\x01\n\x05\x65mail\x18\x05 \x01(\tB\x81\x01\x92\x41w2aPrimary email address for the user. Must be unique across the environment and valid per RFC 5322.J\x12\"user@example.com\"\xbaH\x04r\x02`\x01R\x05\x65mail\x12\xa2\x01\n\x0b\x65xternal_id\x18\x06 \x01(\tB|\x92\x41y2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\x12\"ext_12345a67b89c\"H\x00R\nexternalId\x88\x01\x01\x12\x9f\x01\n\nmembership\x18\x07 \x01(\x0b\x32#.scalekit.v1.users.CreateMembershipBZ\x92\x41W2UList of organization memberships. Automatically populated based on group assignments.R\nmembership\x12\xa0\x01\n\x0cuser_profile\x18\x08 \x01(\x0b\x32$.scalekit.v1.users.CreateUserProfileBW\x92\x41T2RUser\'s personal information including name, address, and other profile attributes.R\x0buserProfile\x12\x86\x02\n\x08metadata\x18\t \x03(\x0b\x32+.scalekit.v1.users.CreateUser.MetadataEntryB\xbc\x01\x92\x41\x9f\x01\x32\x64\x43ustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\xbaH\x16\x9a\x01\x13\x10\x14\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x0e\n\x0c_external_idJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\n\x10\x0b\"\x92\n\n\x11\x43reateUserProfile\x12^\n\nfirst_name\x18\x02 \x01(\tB?\x92\x41\x34\x32*User\'s given name. Maximum 200 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xc8\x01R\tfirstName\x12\\\n\tlast_name\x18\x03 \x01(\tB?\x92\x41\x34\x32+User\'s family name. Maximum 200 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xc8\x01R\x08lastName\x12v\n\x04name\x18\x04 \x01(\tBb\x92\x41_2IFull name in display format. Typically combines first_name and last_name.J\x12\"John Michael Doe\"R\x04name\x12y\n\x06locale\x18\x05 \x01(\tBa\x92\x41^2SUser\'s localization preference in BCP-47 format. Defaults to organization settings.J\x07\"en-US\"R\x06locale\x12\x8a\x01\n\x0cphone_number\x18\x07 \x01(\tBg\x92\x41\x64\x32RPhone number in E.164 international format. Required for SMS-based authentication.J\x0e\"+14155552671\"R\x0bphoneNumber\x12\x8b\x02\n\x08metadata\x18\x08 \x03(\x0b\x32\x32.scalekit.v1.users.CreateUserProfile.MetadataEntryB\xba\x01\x92\x41\x9d\x01\x32^System-managed key-value pairs for internal tracking. Keys (3-25 chars), values (1-256 chars).J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa2\x02\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32:.scalekit.v1.users.CreateUserProfile.CustomAttributesEntryB\xb8\x01\x92\x41\x9b\x01\x32ZCustom attributes for extended user profile data. Keys (3-25 chars), values (1-256 chars).J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x64\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01J\x04\x08\x01\x10\x02J\x04\x08\x06\x10\x07\"\xed\n\n\x11UpdateUserProfile\x12\x63\n\nfirst_name\x18\x02 \x01(\tB?\x92\x41\x34\x32*User\'s given name. Maximum 200 characters.J\x06\"John\"\xbaH\x05r\x03\x18\xc8\x01H\x00R\tfirstName\x88\x01\x01\x12\x61\n\tlast_name\x18\x03 \x01(\tB?\x92\x41\x34\x32+User\'s family name. Maximum 200 characters.J\x05\"Doe\"\xbaH\x05r\x03\x18\xc8\x01H\x01R\x08lastName\x88\x01\x01\x12{\n\x04name\x18\x04 \x01(\tBb\x92\x41_2IFull name in display format. Typically combines first_name and last_name.J\x12\"John Michael Doe\"H\x02R\x04name\x88\x01\x01\x12~\n\x06locale\x18\x05 \x01(\tBa\x92\x41^2SUser\'s localization preference in BCP-47 format. Defaults to organization settings.J\x07\"en-US\"H\x03R\x06locale\x88\x01\x01\x12\x8f\x01\n\x0cphone_number\x18\x07 \x01(\tBg\x92\x41\x64\x32RPhone number in E.164 international format. Required for SMS-based authentication.J\x0e\"+14155552671\"H\x04R\x0bphoneNumber\x88\x01\x01\x12\x8b\x02\n\x08metadata\x18\x08 \x03(\x0b\x32\x32.scalekit.v1.users.UpdateUserProfile.MetadataEntryB\xba\x01\x92\x41\x9d\x01\x32^System-managed key-value pairs for internal tracking. Keys (3-25 chars), values (1-256 chars).J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\xbaH\x16\x9a\x01\x13\x10\x1e\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x08metadata\x12\xa2\x02\n\x11\x63ustom_attributes\x18\t \x03(\x0b\x32:.scalekit.v1.users.UpdateUserProfile.CustomAttributesEntryB\xb8\x01\x92\x41\x9b\x01\x32ZCustom attributes for extended user profile data. Keys (3-25 chars), values (1-256 chars).J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\xbaH\x16\x9a\x01\x13\x10\x64\"\x06r\x04\x10\x03\x18\x19*\x07r\x05\x10\x01\x18\x80\x02R\x10\x63ustomAttributes\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\x43\n\x15\x43ustomAttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\r\n\x0b_first_nameB\x0c\n\n_last_nameB\x07\n\x05_nameB\t\n\x07_localeB\x0f\n\r_phone_numberJ\x04\x08\x01\x10\x02J\x04\x08\x06\x10\x07\"\xeb\x07\n\x06Invite\x12l\n\x0forganization_id\x18\x01 \x01(\tBC\x92\x41@2-The organization to which the invite belongs.J\x0f\"org_987654321\"R\x0eorganizationId\x12\x7f\n\x07user_id\x18\x02 \x01(\tBf\x92\x41\x63\x32SUser ID to whom the invite is sent. May be empty if the user has not signed up yet.J\x0c\"usr_123456\"R\x06userId\x12t\n\ninvited_by\x18\x03 \x01(\tBP\x92\x41M2;Identifier of the user or system that initiated the invite.J\x0e\"admin_998877\"H\x00R\tinvitedBy\x88\x01\x01\x12x\n\x06status\x18\x04 \x01(\tB`\x92\x41]2ICurrent status of the invite (e.g., pending, accepted, expired, revoked).J\x10\"pending_invite\"R\x06status\x12\x89\x01\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampBN\x92\x41K21Timestamp when the invite was originally created.J\x16\"2025-07-10T08:00:00Z\"R\tcreatedAt\x12}\n\nexpires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampBB\x92\x41?2%The time at which the invite expires.J\x16\"2025-12-31T23:59:59Z\"R\texpiresAt\x12\x8f\x01\n\tresent_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampBV\x92\x41S29Timestamp when the invite was last resent, if applicable.J\x16\"2025-07-15T09:30:00Z\"R\x08resentAt\x12V\n\x0cresent_count\x18\x08 \x01(\x05\x42\x33\x92\x41\x30\x32+Number of times the invite has been resent.J\x01\x32R\x0bresentCountB\r\n\x0b_invited_by\"\xa3\x03\n\x13ResendInviteRequest\x12\xd3\x01\n\x0forganization_id\x18\x01 \x01(\tB\xa9\x01\x92\x41\x96\x01\x32|Unique identifier of the organization containing the pending invitation. Must start with \'org_\' and be 1-32 characters long.J\x16\"org_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x01\x18 :\x04org_R\x0eorganizationId\x12\xb5\x01\n\x02id\x18\x02 \x01(\tB\xa4\x01\x92\x41\x91\x01\x32wSystem-generated user ID of the user who has a pending invitation. Must start with \'usr_\' and be 19-25 characters long.J\x16\"usr_1234abcd5678efgh\"\xbaH\x0cr\n\x10\x13\x18\x19:\x04usr_R\x02id\"\xe1\x02\n\x14ResendInviteResponse\x12\xc8\x02\n\x06invite\x18\x01 \x01(\x0b\x32\x19.scalekit.v1.users.InviteB\x94\x02\x92\x41\x90\x02\x32\x81\x01Updated invitation object containing the resent invitation details, including new expiration time and incremented resend counter.J\x89\x01{\"organization_id\": \"org_123\", \"user_id\": \"usr_456\", \"status\": \"pending_invite\", \"expires_at\": \"2025-12-31T23:59:59Z\", \"resent_count\": 2}R\x06invite\"\xf0\x01\n\x14ListUserRolesRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\"q\n\x15ListUserRolesResponse\x12X\n\x05roles\x18\x01 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleB\'\x92\x41$2\"List of roles assigned to the userR\x05roles\"\xde\x02\n\x16\x41ssignUserRolesRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\x12j\n\x05roles\x18\x03 \x03(\x0b\x32$.scalekit.v1.users.AssignRoleRequestB.\x92\x41%2#List of roles to assign to the user\xbaH\x03\xc8\x01\x01R\x05roles\"\xb2\x01\n\x11\x41ssignRoleRequest\x12N\n\x02id\x18\x01 \x01(\tB>\x18\x01\x92\x41\x39\x32\x1eUnique identifier for the roleJ\x17\"role_1234abcd5678efgh\"R\x02id\x12M\n\trole_name\x18\x02 \x01(\tB0\x92\x41$2\x18Unique name for the roleJ\x08\"viewer\"\xbaH\x06r\x04\x10\x00\x18\x64R\x08roleName\"\x81\x01\n\x17\x41ssignUserRolesResponse\x12\x66\n\x05roles\x18\x01 \x03(\x0b\x32\x19.scalekit.v1.commons.RoleB5\x92\x41\x32\x32\x30List of all roles currently assigned to the userR\x05roles\"\xd6\x02\n\x15RemoveUserRoleRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\x12\x63\n\trole_name\x18\x03 \x01(\tBF\x92\x41\x43\x32(Unique identifier for the role to removeJ\x17\"role_1234abcd5678efgh\"R\x08roleName\"\xf6\x01\n\x1aListUserPermissionsRequest\x12w\n\x0forganization_id\x18\x01 \x01(\tBN\x92\x41@2&Unique identifier for the organizationJ\x16\"org_1234abcd5678efgh\"\xbaH\x08r\x06:\x04org_R\x0eorganizationId\x12_\n\x07user_id\x18\x02 \x01(\tBF\x92\x41\x38\x32\x1eUnique identifier for the userJ\x16\"usr_1234abcd5678efgh\"\xbaH\x08r\x06:\x04usr_R\x06userId\"\xe8\x03\n\nPermission\x12U\n\x02id\x18\x01 \x01(\tBE\x92\x41?2$Unique identifier for the permissionJ\x17\"perm_1234abcd5678efgh\"\xe0\x41\x03R\x02id\x12R\n\x04name\x18\x02 \x01(\tB>\x92\x41;2)Unique name identifier for the permissionJ\x0e\"users.create\"R\x04name\x12^\n\x0c\x64isplay_name\x18\x03 \x01(\tB;\x92\x41\x38\x32&Human-readable name for the permissionJ\x0e\"Create Users\"R\x0b\x64isplayName\x12u\n\x0b\x64\x65scription\x18\x04 \x01(\tBS\x92\x41P2)Description of what the permission allowsJ#\"Allows creating new user accounts\"R\x0b\x64\x65scription\x12X\n\x04tags\x18\x05 \x03(\tBD\x92\x41\x41\x32!Tags for categorizing permissionsJ\x1c[\"user-management\", \"admin\"]R\x04tags\"\x8f\x01\n\x1bListUserPermissionsResponse\x12p\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x1d.scalekit.v1.users.PermissionB/\x92\x41,2*List of permissions the user has access toR\x0bpermissions2\x8c\x9b\x01\n\x0bUserService\x12\x81\x07\n\x07GetUser\x12!.scalekit.v1.users.GetUserRequest\x1a\".scalekit.v1.users.GetUserResponse\"\xae\x06\x92\x41\x8a\x06\n\x05Users\x12\x08Get user\x1a\x8e\x01Retrieves all details for a user by system-generated user ID or external ID. The response includes organization memberships and user metadata.J\x9c\x01\n\x03\x32\x30\x30\x12\x94\x01\njUser details retrieved successfully. Returns full user object with system-generated fields and timestamps.\x12&\n$\x1a\".scalekit.v1.users.GetUserResponsej\xc6\x03\n\rx-codeSamples\x12\xb4\x03\x32\xb1\x03\nn*l\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\n<\n\x06source\x12\x32\x1a\x30\x63onst { user } = await sc.user.getUser(user_id);\no*m\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\nB\n\x06source\x12\x38\x1a\x36response = users.get_user(organization_id, \n  user_id)\n\\*Z\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\n7\n\x06source\x12-\x1a+resp, err := sc.User().GetUser(ctx, userID)\np*n\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\nG\n\x06source\x12=\x1a;GetUserResponse resp = scalekit.users().getUser(\n  userId);\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x14\x12\x12/api/v1/users/{id}\x12\xba\t\n\tListUsers\x12#.scalekit.v1.users.ListUsersRequest\x1a$.scalekit.v1.users.ListUsersResponse\"\xe1\x08\x92\x41\xc2\x08\n\x05Users\x12\x1dList all users in environment\x1a\xbc\x02Retrieves a paginated list of all users across your entire environment. Use this endpoint to view all users regardless of their organization memberships. This is useful for administrative purposes, user audits, or when you need to see all users in your Scalekit environment. Supports pagination for large user bases.JA\n\x03\x32\x30\x30\x12:\n\x0eList of users.\x12(\n&\x1a$.scalekit.v1.users.ListUsersResponsej\x97\x05\n\rx-codeSamples\x12\x85\x05\x32\x82\x05\n}*{\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\nK\n\x06source\x12\x41\x1a?const response = await sc.user.listUsers(\n  { pageSize: 100 });\n\xac\x01*\xa9\x01\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\n~\n\x06source\x12t\x1ar# pass empty org to fetch all users in environment\nresp,_ = sc.users.list_users(organization_id=\"\", page_size=100)\n\x91\x01*\x8e\x01\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\nk\n\x06source\x12\x61\x1a_all, err := sc.User().ListOrganizationUsers(ctx, \"\", &scalekit.ListUsersOptions{PageSize: 100})\n\xbd\x01*\xba\x01\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\n\x92\x01\n\x06source\x12\x87\x01\x1a\x84\x01ListUsersRequest lur = ListUsersRequest.\n  newBuilder().setPageSize(100).build();\nListUsersResponse allUsers = users.listUsers(lur);\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x0f\x12\r/api/v1/users\x12\xcb\x03\n\x0bSearchUsers\x12%.scalekit.v1.users.SearchUsersRequest\x1a&.scalekit.v1.users.SearchUsersResponse\"\xec\x02\x92\x41\xb7\x02\n\x05Users\x12\x0cSearch users\x1a\x85\x01Searches for users in the environment by email, user ID, or external ID. Returns all users that match the query. Supports pagination.J\x97\x01\n\x03\x32\x30\x30\x12\x8f\x01\naReturns a list of matching users and a page token for pagination if there are additional results.\x12*\n(\x1a&.scalekit.v1.users.SearchUsersResponse\x82\xb5\x18\x02\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x16\x12\x14/api/v1/users:search\x12\xe0\x04\n\x17SearchOrganizationUsers\x12\x31.scalekit.v1.users.SearchOrganizationUsersRequest\x1a\x32.scalekit.v1.users.SearchOrganizationUsersResponse\"\xdd\x03\x92\x41\x88\x03\n\x05Users\x12\x19Search organization users\x1a\xa5\x01Searches for users within a specific organization by email, user ID, or external ID. Returns all users in the organization that match the query. Supports pagination.J\xbb\x01\n\x03\x32\x30\x30\x12\xb3\x01\nyReturns a list of matching users within the organization and a page token for pagination if there are additional results.\x12\x36\n4\x1a\x32.scalekit.v1.users.SearchOrganizationUsersResponse\x82\xb5\x18\x02\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/organizations/{organization_id}/users:search\x12\xd8\x11\n\nUpdateUser\x12$.scalekit.v1.users.UpdateUserRequest\x1a%.scalekit.v1.users.UpdateUserResponse\"\xfc\x10\x92\x41\xd2\x10\n\x05Users\x12\x17Update user information\x1a\xe1\x02Modifies user account information including profile details, metadata, and external ID. Use this endpoint to update a user\'s personal information, contact details, or custom metadata. You can update the user\'s profile, phone number, and metadata fields. Note that fields like user ID, email address, environment ID, and creation time cannot be modified.J\x89\x01\n\x03\x32\x30\x30\x12\x81\x01\nTUser updated successfully. Returns the modified user object with updated timestamps.\x12)\n\'\x1a%.scalekit.v1.users.UpdateUserResponsej\xbf\x0c\n\rx-codeSamples\x12\xad\x0c\x32\xaa\x0c\n\xd1\x01*\xce\x01\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\n\x9d\x01\n\x06source\x12\x92\x01\x1a\x8f\x01\x61wait sc.user.updateUser(\"usr_123\", {\n\tuserProfile: {\n\t\tfirstName: \"John\",\n\t\tlastName: \"Smith\",\n\t},\n\tmetadata: {\n\t\tdepartment: \"sales\",\n\t},\n});\n\xe0\x04*\xdd\x04\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\n\xb1\x04\n\x06source\x12\xa6\x04\x1a\xa3\x04import os\nfrom scalekit import ScalekitClient\nfrom scalekit.v1.users.users_pb2 import UpdateUser\nfrom scalekit.v1.commons.\n  commons_pb2 import UserProfile\nsc = ScalekitClient(\n    env_url=os.getenv(\"SCALEKIT_ENV_URL\"),\n    client_id=os.getenv(\"SCALEKIT_CLIENT_ID\"),\n    client_secret=os.getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\nupdate_user = UpdateUser(\n    user_profile=UserProfile(\n        first_name=\"John\",\n        last_name=\"Smith\"\n    ),\n    metadata={\"department\": \"sales\"}\n)\nsc.users.update_user(organization_id=\"org_123\", \n  user=update_user)\n\xae\x02*\xab\x02\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\n\x87\x02\n\x06source\x12\xfc\x01\x1a\xf9\x01upd := &usersv1.UpdateUser{\n    UserProfile: &usersv1.UpdateUserProfile{\n        FirstName: \"John\",\n        LastName:  \"Smith\",\n    },\n    Metadata: map[string]string{\n        \"department\": \"sales\",\n    },\n}\nsc.User().UpdateUser(ctx, \"usr_123\", upd)\n\xbf\x03*\xbc\x03\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\n\x94\x03\n\x06source\x12\x89\x03\x1a\x86\x03UpdateUser upd = UpdateUser.newBuilder()\n        .setUserProfile(\n          UpdateUserProfile.newBuilder()\n                .setFirstName(\"John\")\n                .setLastName(\"Smith\")\n                .build())\n        .putMetadata(\"department\", \"sales\")\n        .build();\nUpdateUserRequest updReq = UpdateUserRequest.\n  newBuilder().setUser(upd).build();\nusers.updateUser(\"usr_123\", updReq);\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x1a\x32\x12/api/v1/users/{id}:\x04user\x12\xd0\x07\n\nDeleteUser\x12$.scalekit.v1.users.DeleteUserRequest\x1a\x16.google.protobuf.Empty\"\x83\x07\x92\x41\xdf\x06\n\x05Users\x12\x17\x44\x65lete user permanently\x1a\xb0\x02Permanently removes a user from your environment and deletes all associated data. Use this endpoint when you need to completely remove a user account. This action deletes the user\'s profile, memberships, and all related data across all organizations. This operation cannot be undone, so use with caution.J7\n\x03\x32\x30\x30\x12\x30\n.User successfully deleted. No content returnedj\xd0\x03\n\rx-codeSamples\x12\xbe\x03\x32\xbb\x03\nb*`\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\n0\n\x06source\x12&\x1a$await sc.user.deleteUser(\"usr_123\");\n~*|\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\nQ\n\x06source\x12G\x1a\x45sc.users.delete_user(organization_id=\"org_123\", \n  user_id=\"usr_123\")\n\x81\x01*\x7f\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\n\\\n\x06source\x12R\x1aPif err := sc.User().DeleteUser(ctx, \n  \"usr_123\"); err != nil {\n    panic(err)\n}\nQ*O\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\n(\n\x06source\x12\x1e\x1a\x1cusers.deleteUser(\"usr_123\");\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x14*\x12/api/v1/users/{id}\x12\xa1\x18\n\x10\x43reateMembership\x12*.scalekit.v1.users.CreateMembershipRequest\x1a+.scalekit.v1.users.CreateMembershipResponse\"\xb3\x17\x92\x41\xd7\x16\n\x05Users\x12!Add existing user to organization\x1a\x95\x02\x41\x64\x64s an existing user to an organization and assigns them specific roles and permissions. Use this endpoint when you want to grant an existing user access to a particular organization. You can specify roles, metadata, and other membership details during the invitation process.J\x99\x01\n\x03\x32\x30\x31\x12\x91\x01\n^User successfully added to the organization. Returns details of the updated membership details\x12/\n-\x1a+.scalekit.v1.users.CreateMembershipResponsej\xf6\x12\n\rx-codeSamples\x12\xe4\x12\x32\xe1\x12\n\x92\x03*\x8f\x03\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\n\xde\x02\n\x06source\x12\xd3\x02\x1a\xd0\x02import { ScalekitClient } from \"@scalekit-sdk/node\";\nconst sc = new ScalekitClient(\n\tprocess.env.SCALEKIT_ENV_URL,\n\tprocess.env.SCALEKIT_CLIENT_ID,\n\tprocess.env.SCALEKIT_CLIENT_SECRET\n);\nawait sc.user.createMembership(\"org_123\", \"usr_123\", {\n\troles: [\"admin\"],\n\tmetadata: {\n\t\tdepartment: \"engineering\",\n\t\tlocation: \"nyc-office\",\n\t},\n});\n\xe0\x03*\xdd\x03\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\n\xb1\x03\n\x06source\x12\xa6\x03\x1a\xa3\x03import os\nfrom scalekit import ScalekitClient\nsc = ScalekitClient(\n    env_url=os.getenv(\"SCALEKIT_ENV_URL\"),\n    client_id=os.getenv(\"SCALEKIT_CLIENT_ID\"),\n    client_secret=os.getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\n# The Python SDK currently exposes a helper that \n  #simply links an existing\n# user to an organization.\nresp, _ = sc.users.add_user_to_organization(\n    organization_id=\"org_123\",\n    user_id=\"usr_123\",\n)\n\x85\x05*\x82\x05\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\n\xde\x04\n\x06source\x12\xd3\x04\x1a\xd0\x04\x66unc main() {\n    sc := scalekit.NewScalekitClient(\n        os.Getenv(\"SCALEKIT_ENV_URL\"),\n        os.Getenv(\"SCALEKIT_CLIENT_ID\"),\n        os.Getenv(\"SCALEKIT_CLIENT_SECRET\"),\n    )\n    membership := &usersv1.CreateMembership{\n        Roles: []*usersv1.Role{{Name: \"admin\"}},\n        Metadata: map[string]string{\n            \"department\": \"engineering\",\n            \"location\":   \"nyc-office\",\n        },\n    }\n    resp, \n      err := sc.User().CreateMembership(\n        context.Background(), \"org_123\", \n          \"usr_123\", membership, false)\n    if err != nil {\n        panic(err)\n    }\n}\n\xde\x06*\xdb\x06\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\n\xb3\x06\n\x06source\x12\xa8\x06\x1a\xa5\x06import com.scalekit.ScalekitClient;\nimport com.scalekit.api.UserClient;\nimport com.scalekit.grpc.scalekit.v1.users.*;\nScalekitClient sk = new ScalekitClient(\n    System.getenv(\"SCALEKIT_ENV_URL\"),\n    System.getenv(\"SCALEKIT_CLIENT_ID\"),\n    System.getenv(\"SCALEKIT_CLIENT_SECRET\")\n);\nUserClient users = sk.users();\nCreateMembershipRequest membershipReq = CreateMemb\n  ershipRequest.newBuilder()\n        .setMembership(\n          CreateMembership.newBuilder()\n                .addRoles(Role.newBuilder(\n                  ).setName(\"admin\").build())\n                .putMetadata(\"department\", \"engineering\")\n                .putMetadata(\"location\", \"nyc-office\")\n                .build())\n        .build();\nCreateMembershipResponse res = users.\n  createMembership(\"org_123\", \"usr_123\", \n    membershipReq);\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02L\">/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership\x12\xb0\x05\n\x10\x44\x65leteMembership\x12*.scalekit.v1.users.DeleteMembershipRequest\x1a\x16.google.protobuf.Empty\"\xd7\x04\x92\x41\x87\x04\n\x05Users\x12\'Delete organization membership for user\x1a\xdc\x01Removes a user from an organization by user ID or external ID. If the user has no memberships left and cascade is true, the user is also deleted. This action is irreversible and may also remove related group memberships.JC\n\x03\x32\x30\x30\x12<\n:User successfully marked for deletion. No content returnedj\xb0\x01\n\rx-codeSamples\x12\x9e\x01\x32\x9b\x01\n\x98\x01*\x95\x01\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\nj\n\x06source\x12`\x1a^response = scalekit_client.users.delete_membership(\n  organization_id=org_id,user_id=user_id\n)\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02@*>/api/v1/memberships/organizations/{organization_id}/users/{id}\x12\x8c\x04\n\x10UpdateMembership\x12*.scalekit.v1.users.UpdateMembershipRequest\x1a+.scalekit.v1.users.UpdateMembershipResponse\"\x9e\x03\x92\x41\xb3\x02\n\x05Users\x12\'Update organization membership for user\x1a\x83\x01Updates a user\'s membership details within an organization by user ID or external ID. You can update roles and membership metadata.J{\n\x03\x32\x30\x30\x12t\nAMembership updated successfully. Returns the updated user object.\x12/\n-\x1a+.scalekit.v1.users.UpdateMembershipResponse\x82\xb5\x18\x02\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02L2>/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership\x12\x9d\x18\n\x17\x43reateUserAndMembership\x12\x31.scalekit.v1.users.CreateUserAndMembershipRequest\x1a\x32.scalekit.v1.users.CreateUserAndMembershipResponse\"\x9a\x17\x92\x41\xd5\x16\n\x05Users\x12\x1f\x43reate new user in organization\x1a\x83\x03\x43reates a new user account and immediately adds them to the specified organization. Use this endpoint when you want to create a user and grant them access to an organization in a single operation. You can provide user profile information, assign roles, and configure membership metadata. The user receives an activation email unless this feature is disabled in the organization settings.J\xb3\x01\n\x03\x32\x30\x31\x12\xab\x01\nqUser created successfully. Returns the created user object, including system-generated identifiers and timestamps\x12\x36\n4\x1a\x32.scalekit.v1.users.CreateUserAndMembershipResponsej\xee\x11\n\rx-codeSamples\x12\xdc\x11\x32\xd9\x11\n\xd0\x02*\xcd\x02\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\n\x9c\x02\n\x06source\x12\x91\x02\x1a\x8e\x02\x63onst {\n   user } = await sc.user.\n    createUserAndMembership(\"org_123\", {\n\temail: \"user@example.com\",\n\texternalId: \"ext_12345a67b89c\",\n\tmetadata: { department: \"engineering\", \n\t  location: \"nyc-office\" },\n\tuserProfile: {\n\t\tfirstName: \"John\",\n\t\tlastName: \"Doe\",\n\t},\n});\n\xaa\x05*\xa7\x05\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\n\xfb\x04\n\x06source\x12\xf0\x04\x1a\xed\x04import os\nfrom scalekit import ScalekitClient\nfrom scalekit.v1.users.users_pb2 import User\nfrom scalekit.v1.commons.\n  commons_pb2 import UserProfile\nsc = ScalekitClient(\n    env_url=os.getenv(\"SCALEKIT_ENV_URL\"),\n    client_id=os.getenv(\"SCALEKIT_CLIENT_ID\"),\n    client_secret=os.getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\nuser_msg = User(\n    email=\"user@example.com\",\n    external_id=\"ext_12345a67b89c\",\n    metadata={\"department\": \"engineering\", \"location\": \"nyc-office\"},\n    user_profile=UserProfile(\n        first_name=\"John\",\n        last_name=\"Doe\"\n    )\n)\ncreate_resp, \n  _ = sc.users.create_user(\"org_123\", user_msg)\n\xf1\x03*\xee\x03\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\n\xca\x03\n\x06source\x12\xbf\x03\x1a\xbc\x03newUser := &usersv1.CreateUser{\n    Email:      \"user@example.com\",\n    ExternalId: \"ext_12345a67b89c\",\n    Metadata: map[string]string{\n        \"department\": \"engineering\",\n        \"location\":   \"nyc-office\",\n    },\n    UserProfile: &usersv1.CreateUserProfile{\n        FirstName: \"John\",\n        LastName:  \"Doe\",\n    },\n}\ncuResp, \n  err := sc.User().CreateUserAndMembership(ctx, \"org_123\", newUser, false)\nif err != nil { /* handle error */ }\n\xe2\x05*\xdf\x05\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\n\xb7\x05\n\x06source\x12\xac\x05\x1a\xa9\x05\x43reateUser createUser = CreateUser.newBuilder()\n        .setEmail(\"user@example.com\")\n        .setExternalId(\"ext_12345a67b89c\")\n        .putMetadata(\"department\", \"engineering\")\n        .putMetadata(\"location\", \"nyc-office\")\n        .setUserProfile(\n          CreateUserProfile.newBuilder()\n                .setFirstName(\"John\")\n                .setLastName(\"Doe\")\n                .build())\n        .build();\nCreateUserAndMembershipRequest cuReq = CreateUserA\n  ndMembershipRequest.newBuilder()\n        .setUser(createUser)\n        .build();\nCreateUserAndMembershipResponse cuResp = users.\n  createUserAndMembership(\"org_123\", cuReq);\nSystem.out.println(cuResp.getUser().getId());\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x35\"-/api/v1/organizations/{organization_id}/users:\x04user\x12\xa4\x0b\n\x15ListOrganizationUsers\x12/.scalekit.v1.users.ListOrganizationUsersRequest\x1a\x30.scalekit.v1.users.ListOrganizationUsersResponse\"\xa7\n\x92\x41\xe8\t\n\x05Users\x12\x17List organization users\x1a\x87\x02Retrieves a paginated list of all users who are members of the specified organization. Use this endpoint to view all users with access to a particular organization, including their roles, metadata, and membership details. Supports pagination for large user lists.J{\n\x03\x32\x30\x30\x12t\n<Successfully retrieved the list of users in the organization\x12\x34\n2\x1a\x30.scalekit.v1.users.ListOrganizationUsersResponsej\xbe\x06\n\rx-codeSamples\x12\xac\x06\x32\xa9\x06\n\xb4\x01*\xb1\x01\n\x16\n\x05label\x12\r\x1a\x0bNode.js SDK\n\x14\n\x04lang\x12\x0c\x1a\njavascript\n\x80\x01\n\x06source\x12v\x1atconst response = await sc.user.\n  listOrganizationUsers(\"org_123\", {\n\tpageSize: 50,\n});\nconsole.log(response.users);\n\x7f*}\n\x15\n\x05label\x12\x0c\x1a\nPython SDK\n\x10\n\x04lang\x12\x08\x1a\x06python\nR\n\x06source\x12H\x1a\x46resp, _ = sc.users.list_users(organization_id=\"org_123\", page_size=50)\n\xdb\x01*\xd8\x01\n\x11\n\x05label\x12\x08\x1a\x06Go SDK\n\x0c\n\x04lang\x12\x04\x1a\x02go\n\xb4\x01\n\x06source\x12\xa9\x01\x1a\xa6\x01list, \n  err := sc.User().ListOrganizationUsers(ctx, \"org_123\", &scalekit.ListUsersOptions{PageSize: 50})\nif err != nil { /* handle error */ }\nfmt.Println(list.Users)\n\x90\x02*\x8d\x02\n\x13\n\x05label\x12\n\x1a\x08Java SDK\n\x0e\n\x04lang\x12\x06\x1a\x04java\n\xe5\x01\n\x06source\x12\xda\x01\x1a\xd7\x01ListOrganizationUsersRequest listReq = ListOrganiz\n  ationUsersRequest.newBuilder()\n        .setPageSize(50)\n        .build();\nListOrganizationUsersResponse list = users.\n  listOrganizationUsers(\"org_123\", listReq);\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02/\x12-/api/v1/organizations/{organization_id}/users\x12\x92\x10\n\x0cResendInvite\x12&.scalekit.v1.users.ResendInviteRequest\x1a\'.scalekit.v1.users.ResendInviteResponse\"\xb0\x0f\x92\x41\xda\x0e\n\x05Users\x12\x1cResend user invitation email\x1a\xe1\x04Resends an invitation email to a user who has a pending or expired invitation in the specified organization. If the invitation has expired, a new invitation will be automatically created and sent. If the invitation is still valid, a reminder email will be sent instead. Use this endpoint when a user hasn\'t responded to their initial invitation and you need to send them a reminder or when the original invitation has expired. The invitation email includes a secure magic link that allows the user to complete their account setup and join the organization. Each resend operation increments the resent counter.J\xa7\x02\n\x03\x32\x30\x30\x12\x9f\x02\n\xef\x01Successfully resent the invitation email. Returns the updated invitation object with organization ID, user ID, membership status, timestamps, and resent count. If expired, a new invitation is created; otherwise, the existing one is resent.\x12+\n)\x1a\'.scalekit.v1.users.ResendInviteResponseJ\x8f\x02\n\x03\x34\x30\x30\x12\x87\x02\n\xdd\x01Invalid request \xe2\x80\x94 common causes include user ID or organization ID is invalid, full-stack authentication is disabled, user profile is missing, invite already accepted, or missing expiry time in user management settings.\x12%\n#\x1a!.scalekit.v1.errdetails.ErrorInfoJ\x9d\x02\n\x03\x34\x30\x34\x12\x95\x02\n\xeb\x01Resource not found \xe2\x80\x94 the specified user, organization, membership, or invitation could not be found in the specified environment. Verify that all IDs are correct and that the resources exist before attempting to resend an invitation.\x12%\n#\x1a!.scalekit.v1.errdetails.ErrorInfoJ\xf2\x02\n\x03\x35\x30\x30\x12\xea\x02\n\xc0\x02Internal server error \xe2\x80\x94 an unexpected error occurred while processing the invitation resend request. This may be due to database connectivity issues, problems generating the secure magic link, email delivery service failures, or transaction errors during invitation processing. Contact support if the problem persists.\x12%\n#\x1a!.scalekit.v1.errdetails.ErrorInfo\x82\xb5\x18\x02\x18T\x82\xd3\xe4\x93\x02\x46\x32\x41/api/v1/invites/organizations/{organization_id}/users/{id}/resend:\x01*\x12\xee\x03\n\rListUserRoles\x12\'.scalekit.v1.users.ListUserRolesRequest\x1a(.scalekit.v1.users.ListUserRolesResponse\"\x89\x03\x92\x41\xab\x02\n\x05Users\x12\x0fList user roles\x1a\x9a\x01Retrieves all roles assigned to a user within a specific organization. This includes both direct role assignments and inherited roles from role hierarchy.Jt\n\x03\x32\x30\x30\x12m\n=Successfully retrieved the list of roles assigned to the user\x12,\n*\x1a(.scalekit.v1.users.ListUserRolesResponse\x82\xb5\x18\x02\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02?\x12=/api/v1/organizations/{organization_id}/users/{user_id}/roles\x12\xe2\x03\n\x0f\x41ssignUserRoles\x12).scalekit.v1.users.AssignUserRolesRequest\x1a*.scalekit.v1.users.AssignUserRolesResponse\"\xf7\x02\x92\x41\x92\x02\n\x05Users\x12\x14\x41ssign roles to user\x1a\x90\x01\x41ssigns one or more roles to a user within a specific organization. This operation adds to existing role assignments rather than replacing them.J`\n\x03\x32\x30\x30\x12Y\n\'Successfully assigned roles to the user\x12.\n,\x1a*.scalekit.v1.users.AssignUserRolesResponse\x82\xb5\x18\x02\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x46\"=/api/v1/organizations/{organization_id}/users/{user_id}/roles:\x05roles\x12\xa8\x03\n\x0eRemoveUserRole\x12(.scalekit.v1.users.RemoveUserRoleRequest\x1a\x16.google.protobuf.Empty\"\xd3\x02\x92\x41\xe9\x01\n\x05Users\x12\x15Remove role from user\x1a\x9a\x01Removes a specific role assignment from a user within an organization. This only removes direct role assignments, not inherited roles from role hierarchy.J,\n\x03\x32\x30\x30\x12%\n#Role successfully removed from user\x82\xb5\x18\x02\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02K*I/api/v1/organizations/{organization_id}/users/{user_id}/roles/{role_name}\x12\xaa\x04\n\x13ListUserPermissions\x12-.scalekit.v1.users.ListUserPermissionsRequest\x1a..scalekit.v1.users.ListUserPermissionsResponse\"\xb3\x03\x92\x41\xcf\x02\n\x05Users\x12\x15List user permissions\x1a\xb4\x01Retrieves all permissions a user has access to within a specific organization. This includes permissions from direct role assignments and inherited permissions from role hierarchy.Jx\n\x03\x32\x30\x30\x12q\n;Successfully retrieved the list of permissions for the user\x12\x32\n0\x1a..scalekit.v1.users.ListUserPermissionsResponse\x82\xb5\x18\x02\x18T\xfa\xd2\xe4\x93\x02\t\x12\x07PREVIEW\x82\xd3\xe4\x93\x02\x45\x12\x43/api/v1/organizations/{organization_id}/users/{user_id}/permissions\x1a\xec\x03\x92\x41\xe8\x03\n\x05Users\x12\xde\x03\x43omprehensive user management operations including user lifecycle, organization memberships, and invitation workflows. This service provides endpoints for creating, retrieving, updating, and deleting user accounts across your Scalekit environment. It supports both individual user operations and bulk operations for user administration, including user search, pagination, and metadata management. The service also handles user invitations and organization membership management.B1Z/github.com/scalekit-inc/scalekit/pkg/grpc/usersb\x06proto3')

_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'scalekit.v1.users.users_pb2', _globals)
if not _descriptor._USE_C_DESCRIPTORS:
  _globals['DESCRIPTOR']._loaded_options = None
  _globals['DESCRIPTOR']._serialized_options = b'Z/github.com/scalekit-inc/scalekit/pkg/grpc/users'
  _globals['_USER_METADATAENTRY']._loaded_options = None
  _globals['_USER_METADATAENTRY']._serialized_options = b'8\001'
  _globals['_USER'].fields_by_name['id']._loaded_options = None
  _globals['_USER'].fields_by_name['id']._serialized_options = b'\222Ab2HUnique system-generated identifier for the user. Immutable once created.J\026\"usr_1234abcd5678efgh\"'
  _globals['_USER'].fields_by_name['environment_id']._loaded_options = None
  _globals['_USER'].fields_by_name['environment_id']._serialized_options = b'\222Ar2XIdentifier of the environment where the user was created. System-assigned and read-only.J\026\"env_9876zyxw5432vuts\"\340A\003\372\322\344\223\002\t\022\007PREVIEW'
  _globals['_USER'].fields_by_name['create_time']._loaded_options = None
  _globals['_USER'].fields_by_name['create_time']._serialized_options = b'\222AY2WTimestamp when the user account was initially created. Automatically set by the server.\340A\003'
  _globals['_USER'].fields_by_name['update_time']._loaded_options = None
  _globals['_USER'].fields_by_name['update_time']._serialized_options = b'\222A^2\\Timestamp of the last modification to the user account. Automatically updated by the server.\340A\003'
  _globals['_USER'].fields_by_name['email']._loaded_options = None
  _globals['_USER'].fields_by_name['email']._serialized_options = b'\222Aw2aPrimary email address for the user. Must be unique across the environment and valid per RFC 5322.J\022\"user@example.com\"\272H\004r\002`\001'
  _globals['_USER'].fields_by_name['external_id']._loaded_options = None
  _globals['_USER'].fields_by_name['external_id']._serialized_options = b'\222Ay2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\022\"ext_12345a67b89c\"'
  _globals['_USER'].fields_by_name['memberships']._loaded_options = None
  _globals['_USER'].fields_by_name['memberships']._serialized_options = b'\222AW2UList of organization memberships. Automatically populated based on group assignments.'
  _globals['_USER'].fields_by_name['user_profile']._loaded_options = None
  _globals['_USER'].fields_by_name['user_profile']._serialized_options = b'\222AT2RUser\'s personal information including name, address, and other profile attributes.'
  _globals['_USER'].fields_by_name['metadata']._loaded_options = None
  _globals['_USER'].fields_by_name['metadata']._serialized_options = b'\222A\237\0012dCustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\272H\026\232\001\023\020\024\"\006r\004\020\003\030\031*\007r\005\020\001\030\200\002'
  _globals['_USER'].fields_by_name['last_login']._loaded_options = None
  _globals['_USER'].fields_by_name['last_login']._serialized_options = b'\222AW2UTimestamp of the user\'s most recent successful authentication. Updated automatically.\372\322\344\223\002\t\022\007PREVIEW'
  _globals['_CREATEUSERANDMEMBERSHIPREQUEST'].fields_by_name['user']._loaded_options = None
  _globals['_CREATEUSERANDMEMBERSHIPREQUEST'].fields_by_name['user']._serialized_options = b'\272H\003\310\001\001'
  _globals['_CREATEUSERANDMEMBERSHIPREQUEST'].fields_by_name['send_invitation_email']._loaded_options = None
  _globals['_CREATEUSERANDMEMBERSHIPREQUEST'].fields_by_name['send_invitation_email']._serialized_options = b'\222AI2AIf true, sends an activation email to the user. Defaults to true.J\004true'
  _globals['_UPDATEUSER_METADATAENTRY']._loaded_options = None
  _globals['_UPDATEUSER_METADATAENTRY']._serialized_options = b'8\001'
  _globals['_UPDATEUSER'].fields_by_name['external_id']._loaded_options = None
  _globals['_UPDATEUSER'].fields_by_name['external_id']._serialized_options = b'\222Ay2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\022\"ext_12345a67b89c\"'
  _globals['_UPDATEUSER'].fields_by_name['user_profile']._loaded_options = None
  _globals['_UPDATEUSER'].fields_by_name['user_profile']._serialized_options = b'\222AT2RUser\'s personal information including name, address, and other profile attributes.'
  _globals['_UPDATEUSER'].fields_by_name['metadata']._loaded_options = None
  _globals['_UPDATEUSER'].fields_by_name['metadata']._serialized_options = b'\222A\237\0012dCustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\272H\026\232\001\023\020\024\"\006r\004\020\003\030\031*\007r\005\020\001\030\200\002'
  _globals['_UPDATEUSERREQUEST'].fields_by_name['id']._loaded_options = None
  _globals['_UPDATEUSERREQUEST'].fields_by_name['id']._serialized_options = b'\222Ah2NSystem-generated user ID. Must start with \'usr_\' and be 19-25 characters long.J\026\"usr_1234abcd5678efgh\"\272H\014r\n\020\023\030\031:\004usr_'
  _globals['_UPDATEUSERREQUEST'].fields_by_name['external_id']._loaded_options = None
  _globals['_UPDATEUSERREQUEST'].fields_by_name['external_id']._serialized_options = b'\222At2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\r\"ext_7890xyz\"'
  _globals['_UPDATEUSERREQUEST'].fields_by_name['user']._loaded_options = None
  _globals['_UPDATEUSERREQUEST'].fields_by_name['user']._serialized_options = b'\222A\235\0012qUser fields to update. Only specified fields will be modified. Required fields must be provided if being changed.J({\"firstName\": \"John\", \"lastName\": \"Doe\"}\272H\003\310\001\001'
  _globals['_GETUSERREQUEST'].fields_by_name['id']._loaded_options = None
  _globals['_GETUSERREQUEST'].fields_by_name['id']._serialized_options = b'\222A22\030System-generated user IDJ\026\"usr_1234abcd5678efgh\"\272H\014r\n\020\001\030 :\004usr_'
  _globals['_GETUSERREQUEST'].fields_by_name['external_id']._loaded_options = None
  _globals['_GETUSERREQUEST'].fields_by_name['external_id']._serialized_options = b'\222At2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\r\"ext_7890xyz\"'
  _globals['_LISTORGANIZATIONUSERSREQUEST'].fields_by_name['organization_id']._loaded_options = None
  _globals['_LISTORGANIZATIONUSERSREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222A\214\0012rUnique identifier of the organization for which to list users. Must start with \'org_\' and be 1-32 characters long.J\026\"org_1234abcd5678efgh\"\272H\014r\n\020\001\030 :\004org_'
  _globals['_LISTORGANIZATIONUSERSREQUEST'].fields_by_name['page_size']._loaded_options = None
  _globals['_LISTORGANIZATIONUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222A\1772yMaximum number of users to return in a single response. Valid range: 1-100. Server may return fewer users than specified.J\00250\272H\006*\004\030d(\000'
  _globals['_LISTORGANIZATIONUSERSREQUEST'].fields_by_name['page_token']._loaded_options = None
  _globals['_LISTORGANIZATIONUSERSREQUEST'].fields_by_name['page_token']._serialized_options = b'\222A\267\0012\200\001Pagination token from a previous ListUserResponse. Used to retrieve the next page of results. Leave empty for the first request.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"'
  _globals['_LISTORGANIZATIONUSERSRESPONSE'].fields_by_name['next_page_token']._loaded_options = None
  _globals['_LISTORGANIZATIONUSERSRESPONSE'].fields_by_name['next_page_token']._serialized_options = b'\222A\215\0012WOpaque token for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"'
  _globals['_LISTORGANIZATIONUSERSRESPONSE'].fields_by_name['total_size']._loaded_options = None
  _globals['_LISTORGANIZATIONUSERSRESPONSE'].fields_by_name['total_size']._serialized_options = b'\222AV2NTotal number of users matching the request criteria, regardless of pagination.J\0041042'
  _globals['_LISTORGANIZATIONUSERSRESPONSE'].fields_by_name['users']._loaded_options = None
  _globals['_LISTORGANIZATIONUSERSRESPONSE'].fields_by_name['users']._serialized_options = b'\222A`2^List of user objects for the current page. May contain fewer entries than requested page_size.'
  _globals['_LISTORGANIZATIONUSERSRESPONSE'].fields_by_name['prev_page_token']._loaded_options = None
  _globals['_LISTORGANIZATIONUSERSRESPONSE'].fields_by_name['prev_page_token']._serialized_options = b'\222A\211\0012SOpaque token for retrieving the previous page of results. Empty for the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"'
  _globals['_DELETEMEMBERSHIPREQUEST'].fields_by_name['organization_id']._loaded_options = None
  _globals['_DELETEMEMBERSHIPREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222Al2RUnique organization identifier. Must start with \'org_\' and be 1-32 characters longJ\026\"org_1234abcd5678efgh\"\272H\014r\n\020\001\030 :\004org_'
  _globals['_DELETEMEMBERSHIPREQUEST'].fields_by_name['id']._loaded_options = None
  _globals['_DELETEMEMBERSHIPREQUEST'].fields_by_name['id']._serialized_options = b'\222A]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\026\"usr_1234abcd5678efgh\"\272H\014r\n\020\023\030\031:\004usr_'
  _globals['_DELETEMEMBERSHIPREQUEST'].fields_by_name['external_id']._loaded_options = None
  _globals['_DELETEMEMBERSHIPREQUEST'].fields_by_name['external_id']._serialized_options = b'\222Ac2RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"'
  _globals['_DELETEMEMBERSHIPREQUEST'].fields_by_name['cascade']._loaded_options = None
  _globals['_DELETEMEMBERSHIPREQUEST'].fields_by_name['cascade']._serialized_options = b'\222A\\2SIf true, if user has no memberships left the user is also deleted. defaults to trueJ\005false\372\322\344\223\002\t\022\007PREVIEW'
  _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['organization_id']._loaded_options = None
  _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222A{2aUnique identifier of the target organization. Must start with \'org_\' and be 1-32 characters long.J\026\"org_1234abcd5678efgh\"\272H\014r\n\020\001\030 :\004org_'
  _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['membership']._loaded_options = None
  _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['membership']._serialized_options = b'\222AA2?Membership details to create. Required fields must be provided.\272H\003\310\001\001'
  _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['id']._loaded_options = None
  _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['id']._serialized_options = b'\222A]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\026\"usr_1234abcd5678efgh\"\272H\014r\n\020\023\030\031:\004usr_'
  _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['external_id']._loaded_options = None
  _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['external_id']._serialized_options = b'\222Ah2WExternal system identifier from connected directories. Must be unique across the systemJ\r\"ext_7890xyz\"'
  _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['send_invitation_email']._loaded_options = None
  _globals['_CREATEMEMBERSHIPREQUEST'].fields_by_name['send_invitation_email']._serialized_options = b'\222AI2AIf true, sends an activation email to the user. Defaults to true.J\004true'
  _globals['_LISTUSERSREQUEST'].fields_by_name['page_size']._loaded_options = None
  _globals['_LISTUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222AT2NMaximum number of organizations to return per page. Must be between 10 and 100J\00230'
  _globals['_LISTUSERSREQUEST'].fields_by_name['page_token']._loaded_options = None
  _globals['_LISTUSERSREQUEST'].fields_by_name['page_token']._serialized_options = b'\222Am2[Pagination token from the previous response. Use to retrieve the next page of organizationsJ\016\"<page_token>\"'
  _globals['_LISTUSERSRESPONSE'].fields_by_name['users']._loaded_options = None
  _globals['_LISTUSERSRESPONSE'].fields_by_name['users']._serialized_options = b'\222A\0202\016List of users.'
  _globals['_LISTUSERSRESPONSE'].fields_by_name['next_page_token']._loaded_options = None
  _globals['_LISTUSERSRESPONSE'].fields_by_name['next_page_token']._serialized_options = b'\222A\206\0012PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"'
  _globals['_LISTUSERSRESPONSE'].fields_by_name['total_size']._loaded_options = None
  _globals['_LISTUSERSRESPONSE'].fields_by_name['total_size']._serialized_options = b'\222AV2NTotal number of users matching the request criteria, regardless of pagination.J\0041042'
  _globals['_LISTUSERSRESPONSE'].fields_by_name['prev_page_token']._loaded_options = None
  _globals['_LISTUSERSRESPONSE'].fields_by_name['prev_page_token']._serialized_options = b'\222A\211\0012SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"'
  _globals['_SEARCHUSERSREQUEST'].fields_by_name['query']._loaded_options = None
  _globals['_SEARCHUSERSREQUEST'].fields_by_name['query']._serialized_options = b'\222A\203\0012oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\020john@example.com\272H\tr\004\020\003\030d\310\001\001'
  _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_size']._loaded_options = None
  _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222AQ2KMaximum number of users to return per page. Value must be between 1 and 30.J\00230\272H\004*\002\030\036'
  _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_token']._loaded_options = None
  _globals['_SEARCHUSERSREQUEST'].fields_by_name['page_token']._serialized_options = b'\222A\201\0012aToken from a previous response for pagination. Provide this to retrieve the next page of results.J\034eyJwYWdlIjoyLCJsaW1pdCI6MzB9'
  _globals['_SEARCHUSERSRESPONSE'].fields_by_name['next_page_token']._loaded_options = None
  _globals['_SEARCHUSERSRESPONSE'].fields_by_name['next_page_token']._serialized_options = b'\222A\206\0012PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"'
  _globals['_SEARCHUSERSRESPONSE'].fields_by_name['total_size']._loaded_options = None
  _globals['_SEARCHUSERSRESPONSE'].fields_by_name['total_size']._serialized_options = b'\222AV2NTotal number of users matching the request criteria, regardless of pagination.J\0041042'
  _globals['_SEARCHUSERSRESPONSE'].fields_by_name['users']._loaded_options = None
  _globals['_SEARCHUSERSRESPONSE'].fields_by_name['users']._serialized_options = b'\222A\0312\027List of matching users.'
  _globals['_SEARCHUSERSRESPONSE'].fields_by_name['prev_page_token']._loaded_options = None
  _globals['_SEARCHUSERSRESPONSE'].fields_by_name['prev_page_token']._serialized_options = b'\222A\211\0012SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"'
  _globals['_DELETEUSERREQUEST'].fields_by_name['id']._loaded_options = None
  _globals['_DELETEUSERREQUEST'].fields_by_name['id']._serialized_options = b'\222A]2CSystem-generated user ID. Must start with \'usr_\' (19-25 characters)J\026\"usr_1234abcd5678efgh\"\272H\014r\n\020\023\030\031:\004usr_'
  _globals['_DELETEUSERREQUEST'].fields_by_name['external_id']._loaded_options = None
  _globals['_DELETEUSERREQUEST'].fields_by_name['external_id']._serialized_options = b'\222Ac2RExternal system identifier from connected directories. Must match existing recordsJ\r\"ext_7890xyz\"'
  _globals['_UPDATEMEMBERSHIPREQUEST'].fields_by_name['organization_id']._loaded_options = None
  _globals['_UPDATEMEMBERSHIPREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222A\216\0012tUnique identifier of the organization containing the membership. Must start with \'org_\' and be 1-32 characters long.J\026\"org_1234abcd5678efgh\"\272H\014r\n\020\001\030 :\004org_'
  _globals['_UPDATEMEMBERSHIPREQUEST'].fields_by_name['id']._loaded_options = None
  _globals['_UPDATEMEMBERSHIPREQUEST'].fields_by_name['id']._serialized_options = b'\222Ah2NSystem-generated user ID. Must start with \'usr_\' and be 19-25 characters long.J\026\"usr_1234abcd5678efgh\"\272H\014r\n\020\023\030\031:\004usr_'
  _globals['_UPDATEMEMBERSHIPREQUEST'].fields_by_name['external_id']._loaded_options = None
  _globals['_UPDATEMEMBERSHIPREQUEST'].fields_by_name['external_id']._serialized_options = b'\222AD23Your application\'s unique identifier for this user.J\r\"ext_7890xyz\"'
  _globals['_UPDATEMEMBERSHIPREQUEST'].fields_by_name['membership']._loaded_options = None
  _globals['_UPDATEMEMBERSHIPREQUEST'].fields_by_name['membership']._serialized_options = b'\222AY2DMembership fields to update. Only specified fields will be modified.J\021{\"role\": \"admin\"}\272H\003\310\001\001'
  _globals['_UPDATEMEMBERSHIP_METADATAENTRY']._loaded_options = None
  _globals['_UPDATEMEMBERSHIP_METADATAENTRY']._serialized_options = b'8\001'
  _globals['_UPDATEMEMBERSHIP'].fields_by_name['roles']._loaded_options = None
  _globals['_UPDATEMEMBERSHIP'].fields_by_name['roles']._serialized_options = b'\222AI22Role to assign to the user within the organizationJ\023[{\"name\": \"admin\"}]'
  _globals['_UPDATEMEMBERSHIP'].fields_by_name['metadata']._loaded_options = None
  _globals['_UPDATEMEMBERSHIP'].fields_by_name['metadata']._serialized_options = b'\222A\237\0012dCustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\272H\026\232\001\023\020\024\"\006r\004\020\003\030\031*\007r\005\020\001\030\200\002'
  _globals['_CREATEMEMBERSHIP_METADATAENTRY']._loaded_options = None
  _globals['_CREATEMEMBERSHIP_METADATAENTRY']._serialized_options = b'8\001'
  _globals['_CREATEMEMBERSHIP'].fields_by_name['roles']._loaded_options = None
  _globals['_CREATEMEMBERSHIP'].fields_by_name['roles']._serialized_options = b'\222AI22Role to assign to the user within the organizationJ\023[{\"name\": \"admin\"}]'
  _globals['_CREATEMEMBERSHIP'].fields_by_name['metadata']._loaded_options = None
  _globals['_CREATEMEMBERSHIP'].fields_by_name['metadata']._serialized_options = b'\222A\237\0012dCustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\272H\026\232\001\023\020\024\"\006r\004\020\003\030\031*\007r\005\020\001\030\200\002'
  _globals['_CREATEMEMBERSHIP'].fields_by_name['inviter_email']._loaded_options = None
  _globals['_CREATEMEMBERSHIP'].fields_by_name['inviter_email']._serialized_options = b'\222Ak2QEmail address of the user who invited this member. Must be a valid email address.J\026\"john.doe@example.com\"\272H\tr\007\020\005\030\376\001`\001'
  _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['organization_id']._loaded_options = None
  _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222A\205\0012kUnique identifier of the organization to search within. Must start with \'org_\' and be 1-32 characters long.J\026\"org_1234abcd5678efgh\"\272H\017r\n\020\001\030 :\004org_\310\001\001'
  _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['query']._loaded_options = None
  _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['query']._serialized_options = b'\222A\203\0012oSearch term to match against user email, IDs, or external IDs. Must be at least 3 characters. Case insensitive.J\020john@example.com\272H\tr\004\020\003\030d\310\001\001'
  _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_size']._loaded_options = None
  _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_size']._serialized_options = b'\222AQ2KMaximum number of users to return per page. Value must be between 1 and 30.J\00230\272H\004*\002\030\036'
  _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_token']._loaded_options = None
  _globals['_SEARCHORGANIZATIONUSERSREQUEST'].fields_by_name['page_token']._serialized_options = b'\222A\201\0012aToken from a previous response for pagination. Provide this to retrieve the next page of results.J\034eyJwYWdlIjoyLCJsaW1pdCI6MzB9'
  _globals['_SEARCHORGANIZATIONUSERSRESPONSE'].fields_by_name['next_page_token']._loaded_options = None
  _globals['_SEARCHORGANIZATIONUSERSRESPONSE'].fields_by_name['next_page_token']._serialized_options = b'\222A\206\0012PToken for retrieving the next page of results. Empty if there are no more pages.J2\"eyJwYWdlIjogMiwgImxhc3RfaWQiOiAidXNyXzEyMzQ1In0=\"'
  _globals['_SEARCHORGANIZATIONUSERSRESPONSE'].fields_by_name['total_size']._loaded_options = None
  _globals['_SEARCHORGANIZATIONUSERSRESPONSE'].fields_by_name['total_size']._serialized_options = b'\222AV2NTotal number of users matching the request criteria, regardless of pagination.J\0041042'
  _globals['_SEARCHORGANIZATIONUSERSRESPONSE'].fields_by_name['users']._loaded_options = None
  _globals['_SEARCHORGANIZATIONUSERSRESPONSE'].fields_by_name['users']._serialized_options = b'\222A\0312\027List of matching users.'
  _globals['_SEARCHORGANIZATIONUSERSRESPONSE'].fields_by_name['prev_page_token']._loaded_options = None
  _globals['_SEARCHORGANIZATIONUSERSRESPONSE'].fields_by_name['prev_page_token']._serialized_options = b'\222A\211\0012SToken for retrieving the previous page of results. Empty if this is the first page.J2\"eyJwYWdlIjogMCwgImZpcnN0X2lkIjogInVzcl85ODc2NSJ9\"'
  _globals['_CREATEUSER_METADATAENTRY']._loaded_options = None
  _globals['_CREATEUSER_METADATAENTRY']._serialized_options = b'8\001'
  _globals['_CREATEUSER'].fields_by_name['email']._loaded_options = None
  _globals['_CREATEUSER'].fields_by_name['email']._serialized_options = b'\222Aw2aPrimary email address for the user. Must be unique across the environment and valid per RFC 5322.J\022\"user@example.com\"\272H\004r\002`\001'
  _globals['_CREATEUSER'].fields_by_name['external_id']._loaded_options = None
  _globals['_CREATEUSER'].fields_by_name['external_id']._serialized_options = b'\222Ay2cYour application\'s unique identifier for this organization, used to link Scalekit with your system.J\022\"ext_12345a67b89c\"'
  _globals['_CREATEUSER'].fields_by_name['membership']._loaded_options = None
  _globals['_CREATEUSER'].fields_by_name['membership']._serialized_options = b'\222AW2UList of organization memberships. Automatically populated based on group assignments.'
  _globals['_CREATEUSER'].fields_by_name['user_profile']._loaded_options = None
  _globals['_CREATEUSER'].fields_by_name['user_profile']._serialized_options = b'\222AT2RUser\'s personal information including name, address, and other profile attributes.'
  _globals['_CREATEUSER'].fields_by_name['metadata']._loaded_options = None
  _globals['_CREATEUSER'].fields_by_name['metadata']._serialized_options = b'\222A\237\0012dCustom key-value pairs for storing additional user context. Keys (3-25 chars), values (1-256 chars).J7{\"department\": \"engineering\", \"location\": \"nyc-office\"}\272H\026\232\001\023\020\024\"\006r\004\020\003\030\031*\007r\005\020\001\030\200\002'
  _globals['_CREATEUSERPROFILE_METADATAENTRY']._loaded_options = None
  _globals['_CREATEUSERPROFILE_METADATAENTRY']._serialized_options = b'8\001'
  _globals['_CREATEUSERPROFILE_CUSTOMATTRIBUTESENTRY']._loaded_options = None
  _globals['_CREATEUSERPROFILE_CUSTOMATTRIBUTESENTRY']._serialized_options = b'8\001'
  _globals['_CREATEUSERPROFILE'].fields_by_name['first_name']._loaded_options = None
  _globals['_CREATEUSERPROFILE'].fields_by_name['first_name']._serialized_options = b'\222A42*User\'s given name. Maximum 200 characters.J\006\"John\"\272H\005r\003\030\310\001'
  _globals['_CREATEUSERPROFILE'].fields_by_name['last_name']._loaded_options = None
  _globals['_CREATEUSERPROFILE'].fields_by_name['last_name']._serialized_options = b'\222A42+User\'s family name. Maximum 200 characters.J\005\"Doe\"\272H\005r\003\030\310\001'
  _globals['_CREATEUSERPROFILE'].fields_by_name['name']._loaded_options = None
  _globals['_CREATEUSERPROFILE'].fields_by_name['name']._serialized_options = b'\222A_2IFull name in display format. Typically combines first_name and last_name.J\022\"John Michael Doe\"'
  _globals['_CREATEUSERPROFILE'].fields_by_name['locale']._loaded_options = None
  _globals['_CREATEUSERPROFILE'].fields_by_name['locale']._serialized_options = b'\222A^2SUser\'s localization preference in BCP-47 format. Defaults to organization settings.J\007\"en-US\"'
  _globals['_CREATEUSERPROFILE'].fields_by_name['phone_number']._loaded_options = None
  _globals['_CREATEUSERPROFILE'].fields_by_name['phone_number']._serialized_options = b'\222Ad2RPhone number in E.164 international format. Required for SMS-based authentication.J\016\"+14155552671\"'
  _globals['_CREATEUSERPROFILE'].fields_by_name['metadata']._loaded_options = None
  _globals['_CREATEUSERPROFILE'].fields_by_name['metadata']._serialized_options = b'\222A\235\0012^System-managed key-value pairs for internal tracking. Keys (3-25 chars), values (1-256 chars).J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\272H\026\232\001\023\020\036\"\006r\004\020\003\030\031*\007r\005\020\001\030\200\002'
  _globals['_CREATEUSERPROFILE'].fields_by_name['custom_attributes']._loaded_options = None
  _globals['_CREATEUSERPROFILE'].fields_by_name['custom_attributes']._serialized_options = b'\222A\233\0012ZCustom attributes for extended user profile data. Keys (3-25 chars), values (1-256 chars).J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\272H\026\232\001\023\020d\"\006r\004\020\003\030\031*\007r\005\020\001\030\200\002'
  _globals['_UPDATEUSERPROFILE_METADATAENTRY']._loaded_options = None
  _globals['_UPDATEUSERPROFILE_METADATAENTRY']._serialized_options = b'8\001'
  _globals['_UPDATEUSERPROFILE_CUSTOMATTRIBUTESENTRY']._loaded_options = None
  _globals['_UPDATEUSERPROFILE_CUSTOMATTRIBUTESENTRY']._serialized_options = b'8\001'
  _globals['_UPDATEUSERPROFILE'].fields_by_name['first_name']._loaded_options = None
  _globals['_UPDATEUSERPROFILE'].fields_by_name['first_name']._serialized_options = b'\222A42*User\'s given name. Maximum 200 characters.J\006\"John\"\272H\005r\003\030\310\001'
  _globals['_UPDATEUSERPROFILE'].fields_by_name['last_name']._loaded_options = None
  _globals['_UPDATEUSERPROFILE'].fields_by_name['last_name']._serialized_options = b'\222A42+User\'s family name. Maximum 200 characters.J\005\"Doe\"\272H\005r\003\030\310\001'
  _globals['_UPDATEUSERPROFILE'].fields_by_name['name']._loaded_options = None
  _globals['_UPDATEUSERPROFILE'].fields_by_name['name']._serialized_options = b'\222A_2IFull name in display format. Typically combines first_name and last_name.J\022\"John Michael Doe\"'
  _globals['_UPDATEUSERPROFILE'].fields_by_name['locale']._loaded_options = None
  _globals['_UPDATEUSERPROFILE'].fields_by_name['locale']._serialized_options = b'\222A^2SUser\'s localization preference in BCP-47 format. Defaults to organization settings.J\007\"en-US\"'
  _globals['_UPDATEUSERPROFILE'].fields_by_name['phone_number']._loaded_options = None
  _globals['_UPDATEUSERPROFILE'].fields_by_name['phone_number']._serialized_options = b'\222Ad2RPhone number in E.164 international format. Required for SMS-based authentication.J\016\"+14155552671\"'
  _globals['_UPDATEUSERPROFILE'].fields_by_name['metadata']._loaded_options = None
  _globals['_UPDATEUSERPROFILE'].fields_by_name['metadata']._serialized_options = b'\222A\235\0012^System-managed key-value pairs for internal tracking. Keys (3-25 chars), values (1-256 chars).J;{\"account_status\": \"active\", \"signup_source\": \"mobile_app\"}\272H\026\232\001\023\020\036\"\006r\004\020\003\030\031*\007r\005\020\001\030\200\002'
  _globals['_UPDATEUSERPROFILE'].fields_by_name['custom_attributes']._loaded_options = None
  _globals['_UPDATEUSERPROFILE'].fields_by_name['custom_attributes']._serialized_options = b'\222A\233\0012ZCustom attributes for extended user profile data. Keys (3-25 chars), values (1-256 chars).J={\"department\": \"engineering\", \"security_clearance\": \"level2\"}\272H\026\232\001\023\020d\"\006r\004\020\003\030\031*\007r\005\020\001\030\200\002'
  _globals['_INVITE'].fields_by_name['organization_id']._loaded_options = None
  _globals['_INVITE'].fields_by_name['organization_id']._serialized_options = b'\222A@2-The organization to which the invite belongs.J\017\"org_987654321\"'
  _globals['_INVITE'].fields_by_name['user_id']._loaded_options = None
  _globals['_INVITE'].fields_by_name['user_id']._serialized_options = b'\222Ac2SUser ID to whom the invite is sent. May be empty if the user has not signed up yet.J\014\"usr_123456\"'
  _globals['_INVITE'].fields_by_name['invited_by']._loaded_options = None
  _globals['_INVITE'].fields_by_name['invited_by']._serialized_options = b'\222AM2;Identifier of the user or system that initiated the invite.J\016\"admin_998877\"'
  _globals['_INVITE'].fields_by_name['status']._loaded_options = None
  _globals['_INVITE'].fields_by_name['status']._serialized_options = b'\222A]2ICurrent status of the invite (e.g., pending, accepted, expired, revoked).J\020\"pending_invite\"'
  _globals['_INVITE'].fields_by_name['created_at']._loaded_options = None
  _globals['_INVITE'].fields_by_name['created_at']._serialized_options = b'\222AK21Timestamp when the invite was originally created.J\026\"2025-07-10T08:00:00Z\"'
  _globals['_INVITE'].fields_by_name['expires_at']._loaded_options = None
  _globals['_INVITE'].fields_by_name['expires_at']._serialized_options = b'\222A?2%The time at which the invite expires.J\026\"2025-12-31T23:59:59Z\"'
  _globals['_INVITE'].fields_by_name['resent_at']._loaded_options = None
  _globals['_INVITE'].fields_by_name['resent_at']._serialized_options = b'\222AS29Timestamp when the invite was last resent, if applicable.J\026\"2025-07-15T09:30:00Z\"'
  _globals['_INVITE'].fields_by_name['resent_count']._loaded_options = None
  _globals['_INVITE'].fields_by_name['resent_count']._serialized_options = b'\222A02+Number of times the invite has been resent.J\0012'
  _globals['_RESENDINVITEREQUEST'].fields_by_name['organization_id']._loaded_options = None
  _globals['_RESENDINVITEREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222A\226\0012|Unique identifier of the organization containing the pending invitation. Must start with \'org_\' and be 1-32 characters long.J\026\"org_1234abcd5678efgh\"\272H\014r\n\020\001\030 :\004org_'
  _globals['_RESENDINVITEREQUEST'].fields_by_name['id']._loaded_options = None
  _globals['_RESENDINVITEREQUEST'].fields_by_name['id']._serialized_options = b'\222A\221\0012wSystem-generated user ID of the user who has a pending invitation. Must start with \'usr_\' and be 19-25 characters long.J\026\"usr_1234abcd5678efgh\"\272H\014r\n\020\023\030\031:\004usr_'
  _globals['_RESENDINVITERESPONSE'].fields_by_name['invite']._loaded_options = None
  _globals['_RESENDINVITERESPONSE'].fields_by_name['invite']._serialized_options = b'\222A\220\0022\201\001Updated invitation object containing the resent invitation details, including new expiration time and incremented resend counter.J\211\001{\"organization_id\": \"org_123\", \"user_id\": \"usr_456\", \"status\": \"pending_invite\", \"expires_at\": \"2025-12-31T23:59:59Z\", \"resent_count\": 2}'
  _globals['_LISTUSERROLESREQUEST'].fields_by_name['organization_id']._loaded_options = None
  _globals['_LISTUSERROLESREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222A@2&Unique identifier for the organizationJ\026\"org_1234abcd5678efgh\"\272H\010r\006:\004org_'
  _globals['_LISTUSERROLESREQUEST'].fields_by_name['user_id']._loaded_options = None
  _globals['_LISTUSERROLESREQUEST'].fields_by_name['user_id']._serialized_options = b'\222A82\036Unique identifier for the userJ\026\"usr_1234abcd5678efgh\"\272H\010r\006:\004usr_'
  _globals['_LISTUSERROLESRESPONSE'].fields_by_name['roles']._loaded_options = None
  _globals['_LISTUSERROLESRESPONSE'].fields_by_name['roles']._serialized_options = b'\222A$2\"List of roles assigned to the user'
  _globals['_ASSIGNUSERROLESREQUEST'].fields_by_name['organization_id']._loaded_options = None
  _globals['_ASSIGNUSERROLESREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222A@2&Unique identifier for the organizationJ\026\"org_1234abcd5678efgh\"\272H\010r\006:\004org_'
  _globals['_ASSIGNUSERROLESREQUEST'].fields_by_name['user_id']._loaded_options = None
  _globals['_ASSIGNUSERROLESREQUEST'].fields_by_name['user_id']._serialized_options = b'\222A82\036Unique identifier for the userJ\026\"usr_1234abcd5678efgh\"\272H\010r\006:\004usr_'
  _globals['_ASSIGNUSERROLESREQUEST'].fields_by_name['roles']._loaded_options = None
  _globals['_ASSIGNUSERROLESREQUEST'].fields_by_name['roles']._serialized_options = b'\222A%2#List of roles to assign to the user\272H\003\310\001\001'
  _globals['_ASSIGNROLEREQUEST'].fields_by_name['id']._loaded_options = None
  _globals['_ASSIGNROLEREQUEST'].fields_by_name['id']._serialized_options = b'\030\001\222A92\036Unique identifier for the roleJ\027\"role_1234abcd5678efgh\"'
  _globals['_ASSIGNROLEREQUEST'].fields_by_name['role_name']._loaded_options = None
  _globals['_ASSIGNROLEREQUEST'].fields_by_name['role_name']._serialized_options = b'\222A$2\030Unique name for the roleJ\010\"viewer\"\272H\006r\004\020\000\030d'
  _globals['_ASSIGNUSERROLESRESPONSE'].fields_by_name['roles']._loaded_options = None
  _globals['_ASSIGNUSERROLESRESPONSE'].fields_by_name['roles']._serialized_options = b'\222A220List of all roles currently assigned to the user'
  _globals['_REMOVEUSERROLEREQUEST'].fields_by_name['organization_id']._loaded_options = None
  _globals['_REMOVEUSERROLEREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222A@2&Unique identifier for the organizationJ\026\"org_1234abcd5678efgh\"\272H\010r\006:\004org_'
  _globals['_REMOVEUSERROLEREQUEST'].fields_by_name['user_id']._loaded_options = None
  _globals['_REMOVEUSERROLEREQUEST'].fields_by_name['user_id']._serialized_options = b'\222A82\036Unique identifier for the userJ\026\"usr_1234abcd5678efgh\"\272H\010r\006:\004usr_'
  _globals['_REMOVEUSERROLEREQUEST'].fields_by_name['role_name']._loaded_options = None
  _globals['_REMOVEUSERROLEREQUEST'].fields_by_name['role_name']._serialized_options = b'\222AC2(Unique identifier for the role to removeJ\027\"role_1234abcd5678efgh\"'
  _globals['_LISTUSERPERMISSIONSREQUEST'].fields_by_name['organization_id']._loaded_options = None
  _globals['_LISTUSERPERMISSIONSREQUEST'].fields_by_name['organization_id']._serialized_options = b'\222A@2&Unique identifier for the organizationJ\026\"org_1234abcd5678efgh\"\272H\010r\006:\004org_'
  _globals['_LISTUSERPERMISSIONSREQUEST'].fields_by_name['user_id']._loaded_options = None
  _globals['_LISTUSERPERMISSIONSREQUEST'].fields_by_name['user_id']._serialized_options = b'\222A82\036Unique identifier for the userJ\026\"usr_1234abcd5678efgh\"\272H\010r\006:\004usr_'
  _globals['_PERMISSION'].fields_by_name['id']._loaded_options = None
  _globals['_PERMISSION'].fields_by_name['id']._serialized_options = b'\222A?2$Unique identifier for the permissionJ\027\"perm_1234abcd5678efgh\"\340A\003'
  _globals['_PERMISSION'].fields_by_name['name']._loaded_options = None
  _globals['_PERMISSION'].fields_by_name['name']._serialized_options = b'\222A;2)Unique name identifier for the permissionJ\016\"users.create\"'
  _globals['_PERMISSION'].fields_by_name['display_name']._loaded_options = None
  _globals['_PERMISSION'].fields_by_name['display_name']._serialized_options = b'\222A82&Human-readable name for the permissionJ\016\"Create Users\"'
  _globals['_PERMISSION'].fields_by_name['description']._loaded_options = None
  _globals['_PERMISSION'].fields_by_name['description']._serialized_options = b'\222AP2)Description of what the permission allowsJ#\"Allows creating new user accounts\"'
  _globals['_PERMISSION'].fields_by_name['tags']._loaded_options = None
  _globals['_PERMISSION'].fields_by_name['tags']._serialized_options = b'\222AA2!Tags for categorizing permissionsJ\034[\"user-management\", \"admin\"]'
  _globals['_LISTUSERPERMISSIONSRESPONSE'].fields_by_name['permissions']._loaded_options = None
  _globals['_LISTUSERPERMISSIONSRESPONSE'].fields_by_name['permissions']._serialized_options = b'\222A,2*List of permissions the user has access to'
  _globals['_USERSERVICE']._loaded_options = None
  _globals['_USERSERVICE']._serialized_options = b'\222A\350\003\n\005Users\022\336\003Comprehensive user management operations including user lifecycle, organization memberships, and invitation workflows. This service provides endpoints for creating, retrieving, updating, and deleting user accounts across your Scalekit environment. It supports both individual user operations and bulk operations for user administration, including user search, pagination, and metadata management. The service also handles user invitations and organization membership management.'
  _globals['_USERSERVICE'].methods_by_name['GetUser']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['GetUser']._serialized_options = b'\222A\212\006\n\005Users\022\010Get user\032\216\001Retrieves all details for a user by system-generated user ID or external ID. The response includes organization memberships and user metadata.J\234\001\n\003200\022\224\001\njUser details retrieved successfully. Returns full user object with system-generated fields and timestamps.\022&\n$\032\".scalekit.v1.users.GetUserResponsej\306\003\n\rx-codeSamples\022\264\0032\261\003\nn*l\n\026\n\005label\022\r\032\013Node.js SDK\n\024\n\004lang\022\014\032\njavascript\n<\n\006source\0222\0320const { user } = await sc.user.getUser(user_id);\no*m\n\025\n\005label\022\014\032\nPython SDK\n\020\n\004lang\022\010\032\006python\nB\n\006source\0228\0326response = users.get_user(organization_id, \n  user_id)\n\\*Z\n\021\n\005label\022\010\032\006Go SDK\n\014\n\004lang\022\004\032\002go\n7\n\006source\022-\032+resp, err := sc.User().GetUser(ctx, userID)\np*n\n\023\n\005label\022\n\032\010Java SDK\n\016\n\004lang\022\006\032\004java\nG\n\006source\022=\032;GetUserResponse resp = scalekit.users().getUser(\n  userId);\202\265\030\002\030T\202\323\344\223\002\024\022\022/api/v1/users/{id}'
  _globals['_USERSERVICE'].methods_by_name['ListUsers']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['ListUsers']._serialized_options = b'\222A\302\010\n\005Users\022\035List all users in environment\032\274\002Retrieves a paginated list of all users across your entire environment. Use this endpoint to view all users regardless of their organization memberships. This is useful for administrative purposes, user audits, or when you need to see all users in your Scalekit environment. Supports pagination for large user bases.JA\n\003200\022:\n\016List of users.\022(\n&\032$.scalekit.v1.users.ListUsersResponsej\227\005\n\rx-codeSamples\022\205\0052\202\005\n}*{\n\026\n\005label\022\r\032\013Node.js SDK\n\024\n\004lang\022\014\032\njavascript\nK\n\006source\022A\032?const response = await sc.user.listUsers(\n  { pageSize: 100 });\n\254\001*\251\001\n\025\n\005label\022\014\032\nPython SDK\n\020\n\004lang\022\010\032\006python\n~\n\006source\022t\032r# pass empty org to fetch all users in environment\nresp,_ = sc.users.list_users(organization_id=\"\", page_size=100)\n\221\001*\216\001\n\021\n\005label\022\010\032\006Go SDK\n\014\n\004lang\022\004\032\002go\nk\n\006source\022a\032_all, err := sc.User().ListOrganizationUsers(ctx, \"\", &scalekit.ListUsersOptions{PageSize: 100})\n\275\001*\272\001\n\023\n\005label\022\n\032\010Java SDK\n\016\n\004lang\022\006\032\004java\n\222\001\n\006source\022\207\001\032\204\001ListUsersRequest lur = ListUsersRequest.\n  newBuilder().setPageSize(100).build();\nListUsersResponse allUsers = users.listUsers(lur);\202\265\030\002\030T\202\323\344\223\002\017\022\r/api/v1/users'
  _globals['_USERSERVICE'].methods_by_name['SearchUsers']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['SearchUsers']._serialized_options = b'\222A\267\002\n\005Users\022\014Search users\032\205\001Searches for users in the environment by email, user ID, or external ID. Returns all users that match the query. Supports pagination.J\227\001\n\003200\022\217\001\naReturns a list of matching users and a page token for pagination if there are additional results.\022*\n(\032&.scalekit.v1.users.SearchUsersResponse\202\265\030\002\030T\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002\026\022\024/api/v1/users:search'
  _globals['_USERSERVICE'].methods_by_name['SearchOrganizationUsers']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['SearchOrganizationUsers']._serialized_options = b'\222A\210\003\n\005Users\022\031Search organization users\032\245\001Searches for users within a specific organization by email, user ID, or external ID. Returns all users in the organization that match the query. Supports pagination.J\273\001\n\003200\022\263\001\nyReturns a list of matching users within the organization and a page token for pagination if there are additional results.\0226\n4\0322.scalekit.v1.users.SearchOrganizationUsersResponse\202\265\030\002\030T\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\0026\0224/api/v1/organizations/{organization_id}/users:search'
  _globals['_USERSERVICE'].methods_by_name['UpdateUser']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['UpdateUser']._serialized_options = b'\222A\322\020\n\005Users\022\027Update user information\032\341\002Modifies user account information including profile details, metadata, and external ID. Use this endpoint to update a user\'s personal information, contact details, or custom metadata. You can update the user\'s profile, phone number, and metadata fields. Note that fields like user ID, email address, environment ID, and creation time cannot be modified.J\211\001\n\003200\022\201\001\nTUser updated successfully. Returns the modified user object with updated timestamps.\022)\n\'\032%.scalekit.v1.users.UpdateUserResponsej\277\014\n\rx-codeSamples\022\255\0142\252\014\n\321\001*\316\001\n\026\n\005label\022\r\032\013Node.js SDK\n\024\n\004lang\022\014\032\njavascript\n\235\001\n\006source\022\222\001\032\217\001await sc.user.updateUser(\"usr_123\", {\n\tuserProfile: {\n\t\tfirstName: \"John\",\n\t\tlastName: \"Smith\",\n\t},\n\tmetadata: {\n\t\tdepartment: \"sales\",\n\t},\n});\n\340\004*\335\004\n\025\n\005label\022\014\032\nPython SDK\n\020\n\004lang\022\010\032\006python\n\261\004\n\006source\022\246\004\032\243\004import os\nfrom scalekit import ScalekitClient\nfrom scalekit.v1.users.users_pb2 import UpdateUser\nfrom scalekit.v1.commons.\n  commons_pb2 import UserProfile\nsc = ScalekitClient(\n    env_url=os.getenv(\"SCALEKIT_ENV_URL\"),\n    client_id=os.getenv(\"SCALEKIT_CLIENT_ID\"),\n    client_secret=os.getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\nupdate_user = UpdateUser(\n    user_profile=UserProfile(\n        first_name=\"John\",\n        last_name=\"Smith\"\n    ),\n    metadata={\"department\": \"sales\"}\n)\nsc.users.update_user(organization_id=\"org_123\", \n  user=update_user)\n\256\002*\253\002\n\021\n\005label\022\010\032\006Go SDK\n\014\n\004lang\022\004\032\002go\n\207\002\n\006source\022\374\001\032\371\001upd := &usersv1.UpdateUser{\n    UserProfile: &usersv1.UpdateUserProfile{\n        FirstName: \"John\",\n        LastName:  \"Smith\",\n    },\n    Metadata: map[string]string{\n        \"department\": \"sales\",\n    },\n}\nsc.User().UpdateUser(ctx, \"usr_123\", upd)\n\277\003*\274\003\n\023\n\005label\022\n\032\010Java SDK\n\016\n\004lang\022\006\032\004java\n\224\003\n\006source\022\211\003\032\206\003UpdateUser upd = UpdateUser.newBuilder()\n        .setUserProfile(\n          UpdateUserProfile.newBuilder()\n                .setFirstName(\"John\")\n                .setLastName(\"Smith\")\n                .build())\n        .putMetadata(\"department\", \"sales\")\n        .build();\nUpdateUserRequest updReq = UpdateUserRequest.\n  newBuilder().setUser(upd).build();\nusers.updateUser(\"usr_123\", updReq);\202\265\030\002\030T\202\323\344\223\002\0322\022/api/v1/users/{id}:\004user'
  _globals['_USERSERVICE'].methods_by_name['DeleteUser']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['DeleteUser']._serialized_options = b'\222A\337\006\n\005Users\022\027Delete user permanently\032\260\002Permanently removes a user from your environment and deletes all associated data. Use this endpoint when you need to completely remove a user account. This action deletes the user\'s profile, memberships, and all related data across all organizations. This operation cannot be undone, so use with caution.J7\n\003200\0220\n.User successfully deleted. No content returnedj\320\003\n\rx-codeSamples\022\276\0032\273\003\nb*`\n\026\n\005label\022\r\032\013Node.js SDK\n\024\n\004lang\022\014\032\njavascript\n0\n\006source\022&\032$await sc.user.deleteUser(\"usr_123\");\n~*|\n\025\n\005label\022\014\032\nPython SDK\n\020\n\004lang\022\010\032\006python\nQ\n\006source\022G\032Esc.users.delete_user(organization_id=\"org_123\", \n  user_id=\"usr_123\")\n\201\001*\177\n\021\n\005label\022\010\032\006Go SDK\n\014\n\004lang\022\004\032\002go\n\\\n\006source\022R\032Pif err := sc.User().DeleteUser(ctx, \n  \"usr_123\"); err != nil {\n    panic(err)\n}\nQ*O\n\023\n\005label\022\n\032\010Java SDK\n\016\n\004lang\022\006\032\004java\n(\n\006source\022\036\032\034users.deleteUser(\"usr_123\");\202\265\030\002\030T\202\323\344\223\002\024*\022/api/v1/users/{id}'
  _globals['_USERSERVICE'].methods_by_name['CreateMembership']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['CreateMembership']._serialized_options = b'\222A\327\026\n\005Users\022!Add existing user to organization\032\225\002Adds an existing user to an organization and assigns them specific roles and permissions. Use this endpoint when you want to grant an existing user access to a particular organization. You can specify roles, metadata, and other membership details during the invitation process.J\231\001\n\003201\022\221\001\n^User successfully added to the organization. Returns details of the updated membership details\022/\n-\032+.scalekit.v1.users.CreateMembershipResponsej\366\022\n\rx-codeSamples\022\344\0222\341\022\n\222\003*\217\003\n\026\n\005label\022\r\032\013Node.js SDK\n\024\n\004lang\022\014\032\njavascript\n\336\002\n\006source\022\323\002\032\320\002import { ScalekitClient } from \"@scalekit-sdk/node\";\nconst sc = new ScalekitClient(\n\tprocess.env.SCALEKIT_ENV_URL,\n\tprocess.env.SCALEKIT_CLIENT_ID,\n\tprocess.env.SCALEKIT_CLIENT_SECRET\n);\nawait sc.user.createMembership(\"org_123\", \"usr_123\", {\n\troles: [\"admin\"],\n\tmetadata: {\n\t\tdepartment: \"engineering\",\n\t\tlocation: \"nyc-office\",\n\t},\n});\n\340\003*\335\003\n\025\n\005label\022\014\032\nPython SDK\n\020\n\004lang\022\010\032\006python\n\261\003\n\006source\022\246\003\032\243\003import os\nfrom scalekit import ScalekitClient\nsc = ScalekitClient(\n    env_url=os.getenv(\"SCALEKIT_ENV_URL\"),\n    client_id=os.getenv(\"SCALEKIT_CLIENT_ID\"),\n    client_secret=os.getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\n# The Python SDK currently exposes a helper that \n  #simply links an existing\n# user to an organization.\nresp, _ = sc.users.add_user_to_organization(\n    organization_id=\"org_123\",\n    user_id=\"usr_123\",\n)\n\205\005*\202\005\n\021\n\005label\022\010\032\006Go SDK\n\014\n\004lang\022\004\032\002go\n\336\004\n\006source\022\323\004\032\320\004func main() {\n    sc := scalekit.NewScalekitClient(\n        os.Getenv(\"SCALEKIT_ENV_URL\"),\n        os.Getenv(\"SCALEKIT_CLIENT_ID\"),\n        os.Getenv(\"SCALEKIT_CLIENT_SECRET\"),\n    )\n    membership := &usersv1.CreateMembership{\n        Roles: []*usersv1.Role{{Name: \"admin\"}},\n        Metadata: map[string]string{\n            \"department\": \"engineering\",\n            \"location\":   \"nyc-office\",\n        },\n    }\n    resp, \n      err := sc.User().CreateMembership(\n        context.Background(), \"org_123\", \n          \"usr_123\", membership, false)\n    if err != nil {\n        panic(err)\n    }\n}\n\336\006*\333\006\n\023\n\005label\022\n\032\010Java SDK\n\016\n\004lang\022\006\032\004java\n\263\006\n\006source\022\250\006\032\245\006import com.scalekit.ScalekitClient;\nimport com.scalekit.api.UserClient;\nimport com.scalekit.grpc.scalekit.v1.users.*;\nScalekitClient sk = new ScalekitClient(\n    System.getenv(\"SCALEKIT_ENV_URL\"),\n    System.getenv(\"SCALEKIT_CLIENT_ID\"),\n    System.getenv(\"SCALEKIT_CLIENT_SECRET\")\n);\nUserClient users = sk.users();\nCreateMembershipRequest membershipReq = CreateMemb\n  ershipRequest.newBuilder()\n        .setMembership(\n          CreateMembership.newBuilder()\n                .addRoles(Role.newBuilder(\n                  ).setName(\"admin\").build())\n                .putMetadata(\"department\", \"engineering\")\n                .putMetadata(\"location\", \"nyc-office\")\n                .build())\n        .build();\nCreateMembershipResponse res = users.\n  createMembership(\"org_123\", \"usr_123\", \n    membershipReq);\202\265\030\002\030T\202\323\344\223\002L\">/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership'
  _globals['_USERSERVICE'].methods_by_name['DeleteMembership']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['DeleteMembership']._serialized_options = b'\222A\207\004\n\005Users\022\'Delete organization membership for user\032\334\001Removes a user from an organization by user ID or external ID. If the user has no memberships left and cascade is true, the user is also deleted. This action is irreversible and may also remove related group memberships.JC\n\003200\022<\n:User successfully marked for deletion. No content returnedj\260\001\n\rx-codeSamples\022\236\0012\233\001\n\230\001*\225\001\n\025\n\005label\022\014\032\nPython SDK\n\020\n\004lang\022\010\032\006python\nj\n\006source\022`\032^response = scalekit_client.users.delete_membership(\n  organization_id=org_id,user_id=user_id\n)\202\265\030\002\030T\202\323\344\223\002@*>/api/v1/memberships/organizations/{organization_id}/users/{id}'
  _globals['_USERSERVICE'].methods_by_name['UpdateMembership']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['UpdateMembership']._serialized_options = b'\222A\263\002\n\005Users\022\'Update organization membership for user\032\203\001Updates a user\'s membership details within an organization by user ID or external ID. You can update roles and membership metadata.J{\n\003200\022t\nAMembership updated successfully. Returns the updated user object.\022/\n-\032+.scalekit.v1.users.UpdateMembershipResponse\202\265\030\002\030T\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002L2>/api/v1/memberships/organizations/{organization_id}/users/{id}:\nmembership'
  _globals['_USERSERVICE'].methods_by_name['CreateUserAndMembership']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['CreateUserAndMembership']._serialized_options = b'\222A\325\026\n\005Users\022\037Create new user in organization\032\203\003Creates a new user account and immediately adds them to the specified organization. Use this endpoint when you want to create a user and grant them access to an organization in a single operation. You can provide user profile information, assign roles, and configure membership metadata. The user receives an activation email unless this feature is disabled in the organization settings.J\263\001\n\003201\022\253\001\nqUser created successfully. Returns the created user object, including system-generated identifiers and timestamps\0226\n4\0322.scalekit.v1.users.CreateUserAndMembershipResponsej\356\021\n\rx-codeSamples\022\334\0212\331\021\n\320\002*\315\002\n\026\n\005label\022\r\032\013Node.js SDK\n\024\n\004lang\022\014\032\njavascript\n\234\002\n\006source\022\221\002\032\216\002const {\n   user } = await sc.user.\n    createUserAndMembership(\"org_123\", {\n\temail: \"user@example.com\",\n\texternalId: \"ext_12345a67b89c\",\n\tmetadata: { department: \"engineering\", \n\t  location: \"nyc-office\" },\n\tuserProfile: {\n\t\tfirstName: \"John\",\n\t\tlastName: \"Doe\",\n\t},\n});\n\252\005*\247\005\n\025\n\005label\022\014\032\nPython SDK\n\020\n\004lang\022\010\032\006python\n\373\004\n\006source\022\360\004\032\355\004import os\nfrom scalekit import ScalekitClient\nfrom scalekit.v1.users.users_pb2 import User\nfrom scalekit.v1.commons.\n  commons_pb2 import UserProfile\nsc = ScalekitClient(\n    env_url=os.getenv(\"SCALEKIT_ENV_URL\"),\n    client_id=os.getenv(\"SCALEKIT_CLIENT_ID\"),\n    client_secret=os.getenv(\"SCALEKIT_CLIENT_SECRET\"),\n)\nuser_msg = User(\n    email=\"user@example.com\",\n    external_id=\"ext_12345a67b89c\",\n    metadata={\"department\": \"engineering\", \"location\": \"nyc-office\"},\n    user_profile=UserProfile(\n        first_name=\"John\",\n        last_name=\"Doe\"\n    )\n)\ncreate_resp, \n  _ = sc.users.create_user(\"org_123\", user_msg)\n\361\003*\356\003\n\021\n\005label\022\010\032\006Go SDK\n\014\n\004lang\022\004\032\002go\n\312\003\n\006source\022\277\003\032\274\003newUser := &usersv1.CreateUser{\n    Email:      \"user@example.com\",\n    ExternalId: \"ext_12345a67b89c\",\n    Metadata: map[string]string{\n        \"department\": \"engineering\",\n        \"location\":   \"nyc-office\",\n    },\n    UserProfile: &usersv1.CreateUserProfile{\n        FirstName: \"John\",\n        LastName:  \"Doe\",\n    },\n}\ncuResp, \n  err := sc.User().CreateUserAndMembership(ctx, \"org_123\", newUser, false)\nif err != nil { /* handle error */ }\n\342\005*\337\005\n\023\n\005label\022\n\032\010Java SDK\n\016\n\004lang\022\006\032\004java\n\267\005\n\006source\022\254\005\032\251\005CreateUser createUser = CreateUser.newBuilder()\n        .setEmail(\"user@example.com\")\n        .setExternalId(\"ext_12345a67b89c\")\n        .putMetadata(\"department\", \"engineering\")\n        .putMetadata(\"location\", \"nyc-office\")\n        .setUserProfile(\n          CreateUserProfile.newBuilder()\n                .setFirstName(\"John\")\n                .setLastName(\"Doe\")\n                .build())\n        .build();\nCreateUserAndMembershipRequest cuReq = CreateUserA\n  ndMembershipRequest.newBuilder()\n        .setUser(createUser)\n        .build();\nCreateUserAndMembershipResponse cuResp = users.\n  createUserAndMembership(\"org_123\", cuReq);\nSystem.out.println(cuResp.getUser().getId());\202\265\030\002\030T\202\323\344\223\0025\"-/api/v1/organizations/{organization_id}/users:\004user'
  _globals['_USERSERVICE'].methods_by_name['ListOrganizationUsers']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['ListOrganizationUsers']._serialized_options = b'\222A\350\t\n\005Users\022\027List organization users\032\207\002Retrieves a paginated list of all users who are members of the specified organization. Use this endpoint to view all users with access to a particular organization, including their roles, metadata, and membership details. Supports pagination for large user lists.J{\n\003200\022t\n<Successfully retrieved the list of users in the organization\0224\n2\0320.scalekit.v1.users.ListOrganizationUsersResponsej\276\006\n\rx-codeSamples\022\254\0062\251\006\n\264\001*\261\001\n\026\n\005label\022\r\032\013Node.js SDK\n\024\n\004lang\022\014\032\njavascript\n\200\001\n\006source\022v\032tconst response = await sc.user.\n  listOrganizationUsers(\"org_123\", {\n\tpageSize: 50,\n});\nconsole.log(response.users);\n\177*}\n\025\n\005label\022\014\032\nPython SDK\n\020\n\004lang\022\010\032\006python\nR\n\006source\022H\032Fresp, _ = sc.users.list_users(organization_id=\"org_123\", page_size=50)\n\333\001*\330\001\n\021\n\005label\022\010\032\006Go SDK\n\014\n\004lang\022\004\032\002go\n\264\001\n\006source\022\251\001\032\246\001list, \n  err := sc.User().ListOrganizationUsers(ctx, \"org_123\", &scalekit.ListUsersOptions{PageSize: 50})\nif err != nil { /* handle error */ }\nfmt.Println(list.Users)\n\220\002*\215\002\n\023\n\005label\022\n\032\010Java SDK\n\016\n\004lang\022\006\032\004java\n\345\001\n\006source\022\332\001\032\327\001ListOrganizationUsersRequest listReq = ListOrganiz\n  ationUsersRequest.newBuilder()\n        .setPageSize(50)\n        .build();\nListOrganizationUsersResponse list = users.\n  listOrganizationUsers(\"org_123\", listReq);\202\265\030\002\030T\202\323\344\223\002/\022-/api/v1/organizations/{organization_id}/users'
  _globals['_USERSERVICE'].methods_by_name['ResendInvite']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['ResendInvite']._serialized_options = b'\222A\332\016\n\005Users\022\034Resend user invitation email\032\341\004Resends an invitation email to a user who has a pending or expired invitation in the specified organization. If the invitation has expired, a new invitation will be automatically created and sent. If the invitation is still valid, a reminder email will be sent instead. Use this endpoint when a user hasn\'t responded to their initial invitation and you need to send them a reminder or when the original invitation has expired. The invitation email includes a secure magic link that allows the user to complete their account setup and join the organization. Each resend operation increments the resent counter.J\247\002\n\003200\022\237\002\n\357\001Successfully resent the invitation email. Returns the updated invitation object with organization ID, user ID, membership status, timestamps, and resent count. If expired, a new invitation is created; otherwise, the existing one is resent.\022+\n)\032\'.scalekit.v1.users.ResendInviteResponseJ\217\002\n\003400\022\207\002\n\335\001Invalid request \342\200\224 common causes include user ID or organization ID is invalid, full-stack authentication is disabled, user profile is missing, invite already accepted, or missing expiry time in user management settings.\022%\n#\032!.scalekit.v1.errdetails.ErrorInfoJ\235\002\n\003404\022\225\002\n\353\001Resource not found \342\200\224 the specified user, organization, membership, or invitation could not be found in the specified environment. Verify that all IDs are correct and that the resources exist before attempting to resend an invitation.\022%\n#\032!.scalekit.v1.errdetails.ErrorInfoJ\362\002\n\003500\022\352\002\n\300\002Internal server error \342\200\224 an unexpected error occurred while processing the invitation resend request. This may be due to database connectivity issues, problems generating the secure magic link, email delivery service failures, or transaction errors during invitation processing. Contact support if the problem persists.\022%\n#\032!.scalekit.v1.errdetails.ErrorInfo\202\265\030\002\030T\202\323\344\223\002F2A/api/v1/invites/organizations/{organization_id}/users/{id}/resend:\001*'
  _globals['_USERSERVICE'].methods_by_name['ListUserRoles']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['ListUserRoles']._serialized_options = b'\222A\253\002\n\005Users\022\017List user roles\032\232\001Retrieves all roles assigned to a user within a specific organization. This includes both direct role assignments and inherited roles from role hierarchy.Jt\n\003200\022m\n=Successfully retrieved the list of roles assigned to the user\022,\n*\032(.scalekit.v1.users.ListUserRolesResponse\202\265\030\002\030T\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002?\022=/api/v1/organizations/{organization_id}/users/{user_id}/roles'
  _globals['_USERSERVICE'].methods_by_name['AssignUserRoles']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['AssignUserRoles']._serialized_options = b'\222A\222\002\n\005Users\022\024Assign roles to user\032\220\001Assigns one or more roles to a user within a specific organization. This operation adds to existing role assignments rather than replacing them.J`\n\003200\022Y\n\'Successfully assigned roles to the user\022.\n,\032*.scalekit.v1.users.AssignUserRolesResponse\202\265\030\002\030T\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002F\"=/api/v1/organizations/{organization_id}/users/{user_id}/roles:\005roles'
  _globals['_USERSERVICE'].methods_by_name['RemoveUserRole']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['RemoveUserRole']._serialized_options = b'\222A\351\001\n\005Users\022\025Remove role from user\032\232\001Removes a specific role assignment from a user within an organization. This only removes direct role assignments, not inherited roles from role hierarchy.J,\n\003200\022%\n#Role successfully removed from user\202\265\030\002\030T\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002K*I/api/v1/organizations/{organization_id}/users/{user_id}/roles/{role_name}'
  _globals['_USERSERVICE'].methods_by_name['ListUserPermissions']._loaded_options = None
  _globals['_USERSERVICE'].methods_by_name['ListUserPermissions']._serialized_options = b'\222A\317\002\n\005Users\022\025List user permissions\032\264\001Retrieves all permissions a user has access to within a specific organization. This includes permissions from direct role assignments and inherited permissions from role hierarchy.Jx\n\003200\022q\n;Successfully retrieved the list of permissions for the user\0222\n0\032..scalekit.v1.users.ListUserPermissionsResponse\202\265\030\002\030T\372\322\344\223\002\t\022\007PREVIEW\202\323\344\223\002E\022C/api/v1/organizations/{organization_id}/users/{user_id}/permissions'
  _globals['_USER']._serialized_start=395
  _globals['_USER']._serialized_end=2175
  _globals['_USER_METADATAENTRY']._serialized_start=2100
  _globals['_USER_METADATAENTRY']._serialized_end=2159
  _globals['_CREATEUSERANDMEMBERSHIPREQUEST']._serialized_start=2178
  _globals['_CREATEUSERANDMEMBERSHIPREQUEST']._serialized_end=2472
  _globals['_CREATEUSERANDMEMBERSHIPRESPONSE']._serialized_start=2474
  _globals['_CREATEUSERANDMEMBERSHIPRESPONSE']._serialized_end=2552
  _globals['_UPDATEUSER']._serialized_start=2555
  _globals['_UPDATEUSER']._serialized_end=3255
  _globals['_UPDATEUSER_METADATAENTRY']._serialized_start=2100
  _globals['_UPDATEUSER_METADATAENTRY']._serialized_end=2159
  _globals['_UPDATEUSERREQUEST']._serialized_start=3258
  _globals['_UPDATEUSERREQUEST']._serialized_end=3813
  _globals['_UPDATEUSERRESPONSE']._serialized_start=3815
  _globals['_UPDATEUSERRESPONSE']._serialized_end=3880
  _globals['_GETUSERREQUEST']._serialized_start=3883
  _globals['_GETUSERREQUEST']._serialized_end=4158
  _globals['_GETUSERRESPONSE']._serialized_start=4160
  _globals['_GETUSERRESPONSE']._serialized_end=4222
  _globals['_LISTORGANIZATIONUSERSREQUEST']._serialized_start=4225
  _globals['_LISTORGANIZATIONUSERSREQUEST']._serialized_end=4853
  _globals['_LISTORGANIZATIONUSERSRESPONSE']._serialized_start=4856
  _globals['_LISTORGANIZATIONUSERSRESPONSE']._serialized_end=5532
  _globals['_DELETEMEMBERSHIPREQUEST']._serialized_start=5535
  _globals['_DELETEMEMBERSHIPREQUEST']._serialized_end=6172
  _globals['_CREATEMEMBERSHIPREQUEST']._serialized_start=6175
  _globals['_CREATEMEMBERSHIPREQUEST']._serialized_end=6985
  _globals['_CREATEMEMBERSHIPRESPONSE']._serialized_start=6987
  _globals['_CREATEMEMBERSHIPRESPONSE']._serialized_end=7058
  _globals['_LISTUSERSREQUEST']._serialized_start=7061
  _globals['_LISTUSERSREQUEST']._serialized_end=7343
  _globals['_LISTUSERSRESPONSE']._serialized_start=7346
  _globals['_LISTUSERSRESPONSE']._serialized_end=7922
  _globals['_SEARCHUSERSREQUEST']._serialized_start=7925
  _globals['_SEARCHUSERSREQUEST']._serialized_end=8408
  _globals['_SEARCHUSERSRESPONSE']._serialized_start=8411
  _globals['_SEARCHUSERSRESPONSE']._serialized_end=8998
  _globals['_DELETEUSERREQUEST']._serialized_start=9001
  _globals['_DELETEUSERREQUEST']._serialized_end=9306
  _globals['_UPDATEMEMBERSHIPREQUEST']._serialized_start=9309
  _globals['_UPDATEMEMBERSHIPREQUEST']._serialized_end=9975
  _globals['_UPDATEMEMBERSHIP']._serialized_start=9978
  _globals['_UPDATEMEMBERSHIP']._serialized_end=10485
  _globals['_UPDATEMEMBERSHIP_METADATAENTRY']._serialized_start=2100
  _globals['_UPDATEMEMBERSHIP_METADATAENTRY']._serialized_end=2159
  _globals['_CREATEMEMBERSHIP']._serialized_start=10488
  _globals['_CREATEMEMBERSHIP']._serialized_end=11180
  _globals['_CREATEMEMBERSHIP_METADATAENTRY']._serialized_start=2100
  _globals['_CREATEMEMBERSHIP_METADATAENTRY']._serialized_end=2159
  _globals['_UPDATEMEMBERSHIPRESPONSE']._serialized_start=11182
  _globals['_UPDATEMEMBERSHIPRESPONSE']._serialized_end=11253
  _globals['_SEARCHORGANIZATIONUSERSREQUEST']._serialized_start=11256
  _globals['_SEARCHORGANIZATIONUSERSREQUEST']._serialized_end=11951
  _globals['_SEARCHORGANIZATIONUSERSRESPONSE']._serialized_start=11954
  _globals['_SEARCHORGANIZATIONUSERSRESPONSE']._serialized_end=12553
  _globals['_CREATEUSER']._serialized_start=12556
  _globals['_CREATEUSER']._serialized_end=13585
  _globals['_CREATEUSER_METADATAENTRY']._serialized_start=2100
  _globals['_CREATEUSER_METADATAENTRY']._serialized_end=2159
  _globals['_CREATEUSERPROFILE']._serialized_start=13588
  _globals['_CREATEUSERPROFILE']._serialized_end=14886
  _globals['_CREATEUSERPROFILE_METADATAENTRY']._serialized_start=2100
  _globals['_CREATEUSERPROFILE_METADATAENTRY']._serialized_end=2159
  _globals['_CREATEUSERPROFILE_CUSTOMATTRIBUTESENTRY']._serialized_start=14807
  _globals['_CREATEUSERPROFILE_CUSTOMATTRIBUTESENTRY']._serialized_end=14874
  _globals['_UPDATEUSERPROFILE']._serialized_start=14889
  _globals['_UPDATEUSERPROFILE']._serialized_end=16278
  _globals['_UPDATEUSERPROFILE_METADATAENTRY']._serialized_start=2100
  _globals['_UPDATEUSERPROFILE_METADATAENTRY']._serialized_end=2159
  _globals['_UPDATEUSERPROFILE_CUSTOMATTRIBUTESENTRY']._serialized_start=14807
  _globals['_UPDATEUSERPROFILE_CUSTOMATTRIBUTESENTRY']._serialized_end=14874
  _globals['_INVITE']._serialized_start=16281
  _globals['_INVITE']._serialized_end=17284
  _globals['_RESENDINVITEREQUEST']._serialized_start=17287
  _globals['_RESENDINVITEREQUEST']._serialized_end=17706
  _globals['_RESENDINVITERESPONSE']._serialized_start=17709
  _globals['_RESENDINVITERESPONSE']._serialized_end=18062
  _globals['_LISTUSERROLESREQUEST']._serialized_start=18065
  _globals['_LISTUSERROLESREQUEST']._serialized_end=18305
  _globals['_LISTUSERROLESRESPONSE']._serialized_start=18307
  _globals['_LISTUSERROLESRESPONSE']._serialized_end=18420
  _globals['_ASSIGNUSERROLESREQUEST']._serialized_start=18423
  _globals['_ASSIGNUSERROLESREQUEST']._serialized_end=18773
  _globals['_ASSIGNROLEREQUEST']._serialized_start=18776
  _globals['_ASSIGNROLEREQUEST']._serialized_end=18954
  _globals['_ASSIGNUSERROLESRESPONSE']._serialized_start=18957
  _globals['_ASSIGNUSERROLESRESPONSE']._serialized_end=19086
  _globals['_REMOVEUSERROLEREQUEST']._serialized_start=19089
  _globals['_REMOVEUSERROLEREQUEST']._serialized_end=19431
  _globals['_LISTUSERPERMISSIONSREQUEST']._serialized_start=19434
  _globals['_LISTUSERPERMISSIONSREQUEST']._serialized_end=19680
  _globals['_PERMISSION']._serialized_start=19683
  _globals['_PERMISSION']._serialized_end=20171
  _globals['_LISTUSERPERMISSIONSRESPONSE']._serialized_start=20174
  _globals['_LISTUSERPERMISSIONSRESPONSE']._serialized_end=20317
  _globals['_USERSERVICE']._serialized_start=20321
  _globals['_USERSERVICE']._serialized_end=40173
# @@protoc_insertion_point(module_scope)
